Paypal智能按钮销售税(按州)



如果订单在德克萨斯州,但在客户输入地址后才知道地址,则必须收取销售税。唯一合理的事件是ShippingChange,但在用户单击"继续"后,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"
}

显然,你的路径上有一个额外的at符号(@(,它的格式错误。。。请参阅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>

在贝宝脚本块上方放置了一个代码块。

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

然后随补丁中的路径而改变

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

最新更新