繁体   English   中英

Paypal 智能按钮销售税 state

[英]Paypal Smart Buttons sales tax by state

如果订单在德克萨斯州,则必须收取销售税,但在客户输入地址之前不知道地址。 唯一看起来合理的事件是 onShippingChange,但在客户点击继续后,PayPal 发回一个错误页面,说这没有按预期工作。 我不能是唯一需要使用这些新的“智能”按钮收取销售税的人。

<script>
    const baseOrderAmount = 20.00;
    function initPayPalButton() {
        paypal.Buttons({
            style: {
                shape: 'pill',
                color: 'blue',
                layout: 'vertical',
                label: 'paypal',
            },
            createOrder: function(data, actions) {
                return actions.order.create({
                    purchase_units: [
                        {
                            "description": "Add product to buy",
                            "custom_id": "xxx-yyy-zzz",
                            "amount": {
                                "currency_code": "USD",
                                "value": baseOrderAmount,
                                "breakdown": {
                                    "item_total": {
                                        "currency_code": "USD",
                                        "value": baseOrderAmount
                                    },
                                    "tax_total": {
                                        "currency_code": "USD",
                                        "value": 0
                                    }
                                }
                            }
                        }]
                });
            },
            onShippingChange: function (data, actions) {
                const taxAmount = (data.shipping_address.state === 'TX' || data.shipping_address.state === 'Texas') ? baseOrderAmount * 0.0825 : '0.00';
                return actions.order.patch([
                    {
                        op: 'replace',
                        path: "/purchase_units/@@referenceId='default'/amount",
                        value: {
                            currency_code: 'USD',
                            value: (parseFloat(baseOrderAmount) + parseFloat(taxAmount)).toFixed(2),
                            breakdown: {
                                item_total: {
                                    currency_code: 'USD',
                                    value: baseOrderAmount
                                },
                                tax_total: {
                                    currency_code: 'USD',
                                    value: taxAmount
                                }
                            }
                        }
                    }
                ]);
            },
            onApprove: function(data, actions) {
                return actions.order.capture().then(function(orderData) {
                    const element = document.getElementById('paypal-button-container');
                    element.innerHTML = '';
                    element.innerHTML = '<h3>Thank you for your payment!</h3>';
                });
            },
            onError: function(err) {
                console.log(err);
            }
        }).render('#paypal-button-container');
    }

    initPayPalButton();
</script>

在浏览器开发人员工具的网络选项卡中,您可以看到补丁操作的 422 或 400 响应。

{
    "debug_id": "8ff787b4dd2c7",
    "details": [
        {
            "description": "Path should be a valid JSON Pointer https://tools.ietf.org/html/rfc6901 that references a location within the request where the operation is performed.",
            "field": "path",
            "issue": "INVALID_JSON_POINTER_FORMAT",
            "location": "body",
            "value": "/purchase_units/@@referenceId=default/amount"
        }
    ],
    "links": [
        {
            "href": "https://developer.paypal.com/docs/api/orders/v2/#error-INVALID_JSON_POINTER_FORMAT",
            "method": "GET",
            "rel": "information_link"
        }
    ],
    "message": "The requested action could not be performed, semantically incorrect, or failed business validation.",
    "name": "UNPROCESSABLE_ENTITY"
}

显然你的路径中有一个额外的符号 (@),它的格式错误......请参阅 SDK 参考:https://developer.paypal.com/sdk/js/reference/#onshippingchange

那里给出的是什么:

path: "/purchase_units/@reference_id==\'default\'/amount",

对于任何其他尝试实施的人,您必须修改脚本 url 以添加 commit=false,如下所示:

<script src="https://www.paypal.com/sdk/js?client-id=<Insert your client Id>&enable-funding=venmo&currency=USD&commit=false" data-sdk-integration-source="button-factory"></script>

在 paypal 脚本块上方放置一个代码块。

@{
    var url = @"/purchase_units/@reference_id==\'default\'/amount";
}

然后更改补丁中的路径

path: "@Html.Raw(url)",

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM