簡體   English   中英

如何在WordPress Woocommerce API 4.3中創建訂單

[英]How to Create an Order in WordPress Woocommerce API 4.3

如何創建一個功能來基於從移動應用程序傳入的數據創建訂單? 我知道woocommerce有他們的訂單api,但是僅在付款結帳后才調用他們的create_order嗎?

我想創建一個create_order函數以傳遞像woocommerce api這樣的確切數據,但不成功后才付款。 我假設付款已經成功。

和woocommerce積分和獎勵擴展用於添加折扣

任何想法? 幫助請謝謝

在某人的幫助下問題得以解決

public function create_order()
            {
                if ($_REQUEST['dev']) {
                    $address = array(
                    'first_name' => 'Zayle',
                    'last_name' => 'Ong',
                    'company' => 'Timios',
                    'email' => 'Crystalizewy@hotmail.com',
                    'phone' => '777-777-777-777',
                    'address_1' => '31 Main Street',
                    'address_2' => '',
                    'city' => 'Simei',
                    'state' => 'SG',
                    'postcode' => '520151',
                    'country' => 'Singapore'
                    );
                    $userid = 1;
                    $productid = 196; // put here an id of a product that is available on Woocommerce->Products
                    $pointstouse = 100;
                    } else {
                    $address = array(
                    'first_name' => $_POST['first_name'],
                    'last_name' => $_POST['last_name'],
                    'company' => $_POST['company'],
                    'email' => $_POST['email'],
                    'phone' => $_POST['phone'],
                    'address_1' => $_POST['adddress1'],
                    'address_2' => $_POST['adddress2'],
                    'city' => $_POST['city'],
                    'state' => $_POST['state'],
                    'postcode' => $_POST['postcode'],
                    'country' => $_POST['country']
                    );
                    $userid = $_POST['userid'];
                    $productid = $_POST['productidid'];
                    $pointstouse = $_POST['pointstouse'];
                    if (! $_POST['first_name'] && ! $_POST['last_name'] && ! $_POST['email'] && ! $_POST['adddress1'] & ! $_POST['city']) {
                        return array(
                        "error" => "Please fill First name, Last Name, Address and City",
                        "orderstatus" => "error"
                        );
                    }
                    if (!$userid) {
                        return array(
                        "error" => "Need to specify a userid",
                        "orderstatus" => "error"
                        );
                    }
                    if (!$productid) {
                        return array(
                        "error" => "Need to specify a product id",
                        "orderstatus" => "error"
                        );
                    }
                    if (!$pointstouse) {
                        return array(
                        "error" => "Need to specify points to use",
                        "orderstatus" => "error"
                        );
                    }
                }
                $pointsuser = WC_Points_Rewards_Manager::get_users_points($userid);
                if ($pointsuser >= $pointstouse) {
                    $order = wc_create_order();
                    $product = new WC_Product($productid);
                    if (!$product->is_type('variable')) {
                        update_post_meta($productid, "_stock", (get_post_meta($productid, "_stock", true) - 1));
                        }else{

                    }
                    $order->add_product($product, 1);
                    $order->set_address($address, 'billing');
                    $order->set_address($address, 'shipping');
                    $discount_code = str_replace("--userid--", $userid, "wc_points_redemption_--userid--_" . date("d-m-Y") . "_" . rand(0, 99999));
                    /*
                        * Create coupon
                    */
                    $coupon_code = $discount_code; // Code
                    $amount = WC_Points_Rewards_Manager::calculate_points_value($pointstouse); // Amount
                    $discount_type = 'fixed_cart'; // Type: fixed_cart, percent, fixed_product, percent_product

                    $coupon = array(
                    'post_title' => $coupon_code,
                    'post_content' => '',
                    'post_status' => 'publish',
                    'post_author' => 1,
                    'post_type' => 'shop_coupon'
                    );

                    $new_coupon_id = wp_insert_post($coupon);

                    // Add meta
                    update_post_meta($new_coupon_id, 'discount_type', $discount_type);
                    update_post_meta($new_coupon_id, 'coupon_amount', $amount);
                    update_post_meta($new_coupon_id, 'individual_use', 'no');
                    update_post_meta($new_coupon_id, 'product_ids', '');
                    update_post_meta($new_coupon_id, 'exclude_product_ids', '');
                    update_post_meta($new_coupon_id, 'usage_limit', '1');
                    update_post_meta($new_coupon_id, 'expiry_date', '');
                    update_post_meta($new_coupon_id, 'apply_before_tax', 'yes');
                    update_post_meta($new_coupon_id, 'free_shipping', 'no');
                    $order->add_coupon($discount_code, $amount);
                    $order->calculate_totals();
                    $order->set_total($order->calculate_totals() - $amount);
                    $order->set_total($amount, 'cart_discount');
                    $orderid = new WC_Order($order->ID);
                    $order_id = trim(str_replace('#', '', $order->get_order_number()));

                    add_post_meta($order_id, '_payment_method', 'cheque');
                    update_post_meta($order_id, '_created_via', 'checkout');
                    update_post_meta($order_id, '_customer_user', $userid);
                    add_post_meta($order_id, '_payment_method_title', 'Cheque Payment');
                    update_post_meta($order->id, '_wc_points_redeemed', $pointstouse);
                    WC_Points_Rewards_Manager::decrease_points($userid, $pointstouse, 'order', "coupon " . $coupon_code . " used for order " . $order_id, $order_id);
                    return array(
                    "orderid" => $order_id,
                    "orderstatus" => "ok"
                    );
                    } else {
                    return array(
                    "error" => "You do not have enought points",
                    "orderstatus" => "error"
                    );
                }
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM