带有智能支付按钮的PayPal结账(javascript)会造成订单问题
在我的网页上,我尝试使用JavaScript实现PayPal结账,如下手册所示:带有智能支付按钮的PayPal结账(javascript)会造成订单问题,javascript,paypal,Javascript,Paypal,在我的网页上,我尝试使用JavaScript实现PayPal结账,如下手册所示: 使用标准选项,一切都很好。例如,这很好: paypal.Buttons({ createOrder: function(data, actions) { return actions.order.create({ purchase_units: [{ amount: { currency_code
使用标准选项,一切都很好。例如,这很好:
paypal.Buttons({
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
amount: {
currency_code: 'EUR',
value: '120.16'
},
description: 'Purchase Unit test description',
custom_id: '64735',
}]
})
},
onApprove: function(data, actions) {
return actions.order.capture().then(function(details) {
alert('Transaction completed by ' +
details.payer.name.given_name)
// Call your server to save the transaction
return fetch('/api/paypal-transaction-complete', {
method: 'post',
headers: {
'content-type': 'application/json'
},
body: JSON.stringify({
orderID: data.orderID
})
})
})
}
}).render('#paypal-button-container')
但当我试图更具体地了解订单细节时,它会给我一个错误:
Error: "Order Api response error:
{
"name": "INVALID_REQUEST",
"message": "Request is not well-formed, syntactically incorrect, or violates schema.",
"debug_id": "1ed03d18530c1",
"details": [
{
"location": "body",
"issue": "INVALID_SYNTAX",
"description": "Cannot deserialize instance of `com.paypal.api.platform.checkout.orders.v2.model.AmountBreakdown` out of START_ARRAY token line: 1, column: 82"
}
],
"links": [
{
"href": "https://developer.paypal.com/docs/api/orders/v2/#error-INVALID_SYNTAX", "rel": "information_link", "encType": "application/json"
}
]
}"
}
这是我的代码:
paypal.Buttons({
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
amount: {
currency_code: 'EUR',
value: '120.16',
breakdown: [{
item_total: {
unit_amount: 7,
currency_code: 'EUR',
value: '120.16'
}
}]
},
description: 'Purchase Unit test description',
custom_id: '64735',
items: [{
name: 'Test item 1',
unit_amount: {
currency_code: 'EUR',
value: '60.12'
},
quantity: 2,
description: 'Uaua item 1 description'
}, {
name: 'Test item 2',
unit_amount: {
currency_code: 'EUR',
value: '60.00'
},
quantity: 5,
description: 'Test item 2 description'
}]
}]
})
},
onApprove: function(data, actions) {
return actions.order.capture().then(function(details) {
alert('Transaction completed by ' +
details.payer.name.given_name)
// Call your server to save the transaction
return fetch('/api/paypal-transaction-complete', {
method: 'post',
headers: {
'content-type': 'application/json'
},
body: JSON.stringify({
orderID: data.orderID
})
})
})
}
}).render('#paypal-button-container')
有人知道问题出在哪里吗?PayPal文档信息量不大……经过进一步挖掘,我找到了正确的格式:
paypal.Buttons({
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [
{
reference_id: "PUHF",
description: "Some description",
custom_id: "Something7364",
soft_descriptor: "Great description 1",
amount: {
currency_code: "EUR",
value: "200.00",
breakdown: {
item_total: {
currency_code: "EUR",
value: "200.00"
}
}
},
items: [
{
name: "Item 1",
description: "The best item ever",
sku: "xyz-2654",
unit_amount: {
currency_code: "EUR",
value: "100.00"
},
quantity: "1"
},
{
name: "Item 2",
description: "Not bad too",
sku: "zdc-3942",
unit_amount: {
currency_code: "EUR",
value: "50.00"
},
quantity: "2"
}
],
}
]
});
},
onApprove: function(data, actions) {
return actions.order.capture().then(function(details) {
alert('Transaction completed by ' + details.payer.name.given_name);
// Call your server to save the transaction
return fetch('/api/paypal-transaction-complete', {
method: 'post',
headers: {
'content-type': 'application/json'
},
body: JSON.stringify({
orderID: data.orderID
})
});
});
}
}).render('#paypal-button-container');
这是一个完整选项集的示例:
paypal.Buttons({
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
reference_id: "PUHF",
description: "Sporting Goods",
custom_id: "CUST-HighFashions",
soft_descriptor: "HighFashions",
amount: {
currency_code: "USD",
value: "230.00",
breakdown: {
item_total: {
currency_code: "USD",
value: "180.00"
},
shipping: {
currency_code: "USD",
value: "30.00"
},
handling: {
currency_code: "USD",
value: "10.00"
},
tax_total: {
currency_code: "USD",
value: "20.00"
},
shipping_discount: {
currency_code: "USD",
value: "10"
}
}
},
items: [{
name: "T-Shirt",
description: "Green XL",
sku: "sku01",
unit_amount: {
currency_code: "USD",
value: "90.00"
},
tax: {
currency_code: "USD",
value: "10.00"
},
quantity: "1",
category: "PHYSICAL_GOODS"
},
{
name: "Shoes",
description: "Running, Size 10.5",
sku: "sku02",
unit_amount: {
currency_code: "USD",
value: "45.00"
},
tax: {
currency_code: "USD",
value: "5.00"
},
quantity: "2",
category: "PHYSICAL_GOODS"
}
],
shipping: {
method: "United States Postal Service",
address: {
name: {
full_name: "John",
surname: "Doe"
},
address_line_1: "123 Townsend St",
address_line_2: "Floor 6",
admin_area_2: "San Francisco",
admin_area_1: "CA",
postal_code: "94107",
country_code: "US"
}
}
}]
})
},
onApprove: function(data, actions) {
return actions.order.capture().then(function(details) {
alert('Transaction completed by ' + details.payer.name.given_name)
// Call your server to save the transaction
return fetch('/api/paypal-transaction-complete', {
method: 'post',
headers: {
'content-type': 'application/json'
},
body: JSON.stringify({
orderID: data.orderID
})
})
})
}
}).render('#paypal-button-container')
非常感谢。它只是工作。尽管PayPal让人沮丧,但你的代码是网上最好的文档。贝宝应该雇佣你更新他们的文档。很高兴它能帮上忙:)如果你喜欢,请投票吧。很好!很难找到这样一个实际的例子,我同意卢卡斯的观点,这是我找到的最好的文档。非常感谢。我有一个问题。当您“调用您的服务器来保存事务”时,您正在向它传递data.orderID,但我在createOrder中没有看到这一点。这是参考号还是自定义号?