如何通过API以编程方式在Woocommerce中应用优惠券?

时间:2017-07-02 10:52:05

标签: php wordpress woocommerce

您好,我希望将10%的优惠券折扣应用于购物车我查看了之前用户的代码,并尝试修改并将其放入我的文件中,但它没有&#39为我工作 - 对于我做错了什么有帮助吗?

请记住,我将此代码用于我的APP API

以下是代码:

function create_wc_order($request) {

    $user = wp_get_current_user();
    if (!$user->ID) {
        // exit if user not logged in
        return;
    }

    $order = wc_create_order(array('customer_id' => $user->ID, 'customer_ip' => WC_Geolocation::get_ip_address()));

    foreach ($request['products'] as $prd) {
        $order->add_product( get_product( (int)$prd['id'] ), (int)$prd['qty']);
    }

    // set order address
    $order->set_address( $request['billing'], 'billing' );

    if ($request['shipping_as_billing'] == 'true') {
        $order->set_address( $request['billing'], 'shipping' );
    } else {
        $order->set_address( $request['shipping'], 'shipping' );
    }

    // set payment gateway
    $payment_gateways = WC()->payment_gateways->payment_gateways();
    if ($request['payment_gateway'] == 'cod' || $request['payment_gateway'] == 'bacs' || $request['payment_gateway'] == 'payfort') {
        $order->set_payment_method( $payment_gateways[$request['payment_gateway']] );
    } elseif ($request['payment_gateway'] == 'sadad') {
        //$order->set_payment_method( 'payfort' );
        update_post_meta($order->id, '_payment_method_title', __('SADAD', 'payfort_fort'));
        update_post_meta($order->id, '_payment_method', PAYFORT_FORT_PAYMENT_METHOD_SADAD);
    } elseif ($request['payment_gateway'] == 'installments') {
        //$order->set_payment_method( 'payfort' );
        update_post_meta($order->id, '_payment_method_title', __('INSTALLMENTS', 'payfort_fort'));
        update_post_meta($order->id, '_payment_method', PAYFORT_FORT_PAYMENT_METHOD_INSTALLMENTS);
    }


     $coupon_code = 'UNIQUECODE';
     $order->add_coupon($coupon_code);

     if (isset($coupon_code)) {
         if ( ! WC()->cart->has_discount( $coupon_code ) ) {
             WC()->cart->add_discount( $coupon_code );
        }
    }

    $order->calculate_totals();
    $order->update_status( 'Pending', 'Order created by API - ', true);

    return $order->get_data();
}
add_action( 'rest_api_init', function () {
  register_rest_route( 'wp/v2', '/create_order/', array(
    'methods' => 'POST',
    'callback' => 'create_wc_order',
  ) );
} );

0 个答案:

没有答案