带智能付款按钮的PayPal Checkout(javascript)会导致订单问题

时间:2019-06-02 11:37:26

标签: javascript paypal

我正在尝试按照以下手册在我的网页上实现PayPal Checkout(javascript):https://developer.paypal.com/docs/checkout/ 使用标准选项,一切都很棒。例如,这很好用:

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文档不是非常有用...

2 个答案:

答案 0 :(得分:1)

  

unit_amount:7,

那属于那里吗?您的错误引用了orders.v2.model.AmountBreakdown,并且我在item_total money对象的API规范中没有看到该字段。

答案 1 :(得分:0)

经过进一步的挖掘,我发现了正确的格式:

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');

这是一整套选项的示例:

<script>
            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');
        </script>