Woocommerce Orders Rest API:添加优惠券代码

时间:2017-10-31 05:31:14

标签: php woocommerce orders woocommerce-rest-api coupon

我已访问The official WooCommerce Rest API documentation "Create an Order" section。我正在尝试通过API创建订单,但是当我想使用优惠券创建订单时,我不知道如何制作订单。

当我通过REST API创建订单时,如何将优惠券代码作为折扣传递?

在相关的官方文档中,我找不到任何请求参数来传递优惠券代码或折扣。

请在WooCommerce中通过rest API创建订单时建议如何传递优惠券代码。

6 个答案:

答案 0 :(得分:2)

您需要添加数据 'coupon_lines' ,例如:

    'coupon_lines' => [
        [
            'code' => 'mycouponcode',
            'discount' => '5',
            'discount_tax' => '0.75',
            'meta_data' => [
                [
                    'key' => 'coupon_data',
                    'value' => [
                        'id' => '1234',
                        'code' => 'mycouponcode',
                        'amount' => '10',
                        /* ... and so on ... */
                    ]
                ]
            ]
        ]
    ]

meta_data 数组是所有woocommerce优惠券元数据。这应该有用......

答案 1 :(得分:0)

这是因为用于创建优惠券代码的API与订购API是分开的。您需要使用Coupon API

定义优惠券
 code: '10off',
 discount_type: 'percent',
 amount: '10',
 individual_use: true,
 exclude_sale_items: true,
 minimum_amount: '100.00'

然后自动计算客户申请的任何优惠券。

答案 2 :(得分:0)

您应按照此处所述,在订单对象中添加“ coupon_lines” Order propertiesenter link description here上有详细说明 因此,每个订单都应该有一个“ coupon_lines”数组,其中包含您通过优惠券API验证优惠券时所需的优惠券的“ id”,“代码”,“金额”数组。

'coupon_lines' => [
    [
        'id' => 32,
        'code' => testcoupon,
        'amount' => '0.75',
    ]
]

答案 3 :(得分:0)

如果您没有找到我写和回答的方式,以防万一有人来这里提出与我相同的问题:)。使用rest api创建订单后,您应该按照此处其他人的建议,使用coupon_lines更新该订单。因此,总而言之,请使用rest api创建一个订单,使用它返回的order_id来更新(documentation here)带有coupon_lines的订单以应用用户应用的优惠券。

答案 4 :(得分:0)

我尝试了以下答案

第一步是从woocommerce管理员后端创建一张优惠券,并为该优惠券添加规则(折扣或折扣金额或其他金额的百分比。)

然后根据woocommerce rest api的一部分的订单控制器类,在更新附有优惠券的订单时,您需要包括 ONLY 优惠券代码作为coupon_lines数组的一部分。

控制器的以下链接: https://github.com/woocommerce/woocommerce/blob/master/includes/api/class-wc-rest-orders-controller.php

这是代码的一部分,它对coupon_lines数组进行验证,并将我们的优惠券代码应用于woocommerce订单

如您所见,它确实验证您没有传递优惠券ID,并且仅在将优惠券代码应用于订单之前传递了优惠券代码。

下面与我合作的用于更新订单的示例JSON

 {  
    "coupon_lines": [
        {
            "code": "1122"
        }
     ]
 }

一旦应用了优惠券代码,订单总额计算并应用优惠券折扣后,订单将与woocommerce填充的所有其他字段一起返回

以下是来自REST API订单控制器的验证代码

        foreach ( $request['coupon_lines'] as $item ) {
            if ( is_array( $item ) ) {
                if ( empty( $item['id'] ) ) {
                    if ( empty( $item['code'] ) ) {
                        throw new WC_REST_Exception( 'woocommerce_rest_invalid_coupon', __( 'Coupon code is required.', 'woocommerce' ), 400 );
                    }
                    $results = $order->apply_coupon( wc_clean( $item['code'] ) );
                    if ( is_wp_error( $results ) ) {
                        throw new WC_REST_Exception( 'woocommerce_rest_' . $results->get_error_code(), $results->get_error_message(), 400 );
                    }
                }
            }
        }

答案 5 :(得分:0)

v2 中不存在通过 API 向订单应用优惠券。使用 v3。