| | |
| | | namespace JVBase\rest\routes; |
| | | |
| | | |
| | | use JVBase\integrations\Square; |
| | | use JVBase\meta\Meta; |
| | | use JVBase\rest\Rest; |
| | | use Exception; |
| | |
| | | } |
| | | |
| | | try { |
| | | /** @var Square $square */ |
| | | $square = JVB()->connect('square'); |
| | | // Step 1: Get or create Square customer |
| | | $customer_id = $square->getOrCreateSquareCustomer($data['customer']); |
| | |
| | | // Step 3: Create Payment in Square |
| | | $payment_response = $square->createSquarePayment( |
| | | $data['source_id'], |
| | | $data['idempotency_key'], |
| | | $idempotency_key, |
| | | $data['amount'], |
| | | $order_id, |
| | | $customer_id |
| | |
| | | { |
| | | $data = $request->get_params(); |
| | | error_log('Getting Saved Cards: '.print_r($data, true)); |
| | | $user_id = absint($data['user']??0); |
| | | if ($user_id === 0) { |
| | | $user_id = get_current_user_id(); |
| | | if (!$user_id) { |
| | | return $this->success(['cards' => []]); |
| | | } |
| | | |
| | | $square = JVB()->connect('square'); |
| | | |
| | | // Get Square customer ID for this user |
| | | $square_customer_id = get_user_meta($user_id, BASE . '_square_customer_id', true); |
| | |
| | | return $this->success(['cards' => []]); |
| | | } |
| | | |
| | | // Fetch cards from Square (2025-compliant - separate endpoint) |
| | | $cards_response = $square->getRequest('cards?customer_id=' . $square_customer_id); |
| | | |
| | | if (is_wp_error($cards_response)) { |
| | | return $this->error('Failed to fetch cards'); |
| | | } |
| | | |
| | | return $this->success(['cards' => $cards_response['cards']??[]]); |
| | | return $this->success(['cards' => Square::getInstance()->getUserCards( $square_customer_id)]); |
| | | } |
| | | |
| | | public function getOrderHistory(WP_REST_Request $request):WP_REST_Response |
| | | { |
| | | $data = $request->get_params(); |
| | | $user_id = absint($data['user']??0); |
| | | if ($user_id === 0) { |
| | | $user_id = get_current_user_id(); |
| | | if (!$user_id) { |
| | | return $this->validationError(['message' => 'Not logged in']); |
| | | } |
| | | |
| | | // Get orders from custom post type |
| | | $orders = get_posts([ |
| | | 'post_type' => BASE . '_sq_orders', |
| | | 'author' => $user_id, |
| | | 'posts_per_page' => 50, |
| | | 'orderby' => 'date', |
| | | 'order' => 'DESC' |
| | | ]); |
| | | |
| | | $order_data = []; |
| | | foreach ($orders as $order) { |
| | | $meta = Meta::forPost($order->ID); |
| | | $fields = $meta->getAll(['square_order_id', 'status', 'amount', 'items', 'created_at', 'pickup_time']); |
| | | $order_data[] = array_merge([ |
| | | 'wp_order_id' => $order->ID, |
| | | ], $fields); |
| | | } |
| | | |
| | | return $this->success(['orders' => $order_data]); |
| | | return $this->success(['orders' => Square::getInstance()->getOrderHistory($user_id)]); |
| | | } |
| | | |
| | | public function getOrderStatus(WP_REST_Request $request):WP_REST_Response |
| | | { |
| | | $order_id = $request->get_param('order_id'); |
| | | |
| | | // Find WP post by Square order ID |
| | | $wp_order_id = get_option(BASE . 'square_order_map_' . $order_id); |
| | | $wp_order_id = Square::getInstance()->getOrderPost($order_id); |
| | | |
| | | if (!$wp_order_id) { |
| | | return $this->error('Order not found'); |
| | | } |
| | | |
| | | $meta = Meta::forPost($wp_order_id); |
| | | $fields = $meta->getAll(['status', 'fulfillment_status', 'pickup_time', 'items']); |
| | | $fields = $meta->getAll(['square_payment_status', 'fulfillment_status', 'pickup_time', 'items']); |
| | | |
| | | return $this->success(['order' => $fields]); |
| | | } |