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

问题描述 投票:1回答:5

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

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

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

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

php woocommerce orders woocommerce-rest-api coupon
5个回答
4
投票

您应该添加数据数组'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
投票

您应该在此处说明的订单对象中添加“coupon_lines” Order properties在这里进一步详细说明enter link description here所以每个订单都应该有和“coupon_lines”数组包含“id”,“代码”,“金额”为您在通过优惠券API验证优惠券时获得的优惠券。

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

0
投票

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

 code: '10off',
 discount_type: 'percent',
 amount: '10',
 individual_use: true,
 exclude_sale_items: true,
 minimum_amount: '100.00'

然后自动计算客户应用的任何优惠券。


0
投票

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


0
投票

我试过以下的答案

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

然后根据作为woocommerce rest api一部分的订单控制器类,当更新订单以附加优惠券时,您将需要仅包括优惠券代码作为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 order controller的验证码

        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 );
                    }
                }
            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.