[英]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¤cy=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.