如何在使用PayPal restAPI执行付款之前更改运费金额

我尝试将基于PayPal经典API的旧快速结账流程迁移到新的RestAPI,但在新流程中出现了一个问题:

如何在创建付款后使用PayPal restAPI执行付款之前更改运费?

创建付款后请求:

{ "intent": "sale", "payer": { "payment_method": "paypal" }, "transactions": [ { "amount": { "currency": "AUD", "total": "100", "details": { "shipping": "10", "subtotal": "75", "tax": "15" } }, "description": "Transaction description.", "item_list": { "items": [ { "quantity": "5", "name": "Item Name", "price": "15", "currency": "AUD", "sku": "sku" } ] } } ], "redirect_urls": { "return_url": "http://localhost:56508/PaymentWithPayPal.aspx?guid=77096", "cancel_url": "http://localhost:56508/PaymentWithPayPal.aspx?guid=77096" } } 

执行付款前请求:

 { "id": "PAY-12X5617352981972MKQ64KKA", "transactions": [ { "amount": { "currency": "AUD", "total": "101", "details": { "shipping": "11", "subtotal": "75", "tax": "15" } } } ] } 

执行付款后PayPal回复:

 { "id": "PAY-12X5617352981972MKQ64KKA", "create_time": "2014-10-15T00:51:52Z", "update_time": "2014-10-15T00:52:43Z", "intent": "sale", "payer": { "payment_method": "paypal", "payer_info": { -------------------- ----------------------------- ---------------------- } } }, "transactions": [ { "amount": { "currency": "AUD", "total": "100.00", "details": { "shipping": "10.00", "subtotal": "75.00", "tax": "15.00" } }, "description": "Transaction description.", "item_list": { "items": [ { "quantity": "5", "name": "Item Name", "price": "15.00", "currency": "AUD", "sku": "sku" } ], "shipping_address": { ------------------------------ } }, "related_resources": [ { "sale": { "id": "5KX17441UU9021742", "create_time": "2014-10-15T00:51:52Z", "update_time": "2014-10-15T00:52:43Z", "amount": { "currency": "AUD", "total": "100.00" }, "state": "completed", "parent_payment": "PAY-12X5617352981972MKQ64KKA", "links": [ { "href": "https://api.sandbox.paypal.com/v1/payments/sale/5KX17441UU9021742", "rel": "self", "method": "GET" }, { "href": "https://api.sandbox.paypal.com/v1/payments/sale/5KX17441UU9021742/refund", "rel": "refund", "method": "POST" }, { "href": "https://api.sandbox.paypal.com/v1/payments/payment/PAY-12X5617352981972MKQ64KKA", "rel": "parent_payment", "method": "GET" } ] } } ] } ], "state": "approved", "links": [ { "href": "https://api.sandbox.paypal.com/v1/payments/payment/PAY-12X5617352981972MKQ64KKA", "rel": "self", "method": "GET" } ] } 

您可以在创建付款后更改运费金额。 您需要在执行付款通知中传递运费金额,它将覆盖您在创建付款时设置的运费。

创建付款时传入的请求:

 { "intent": "sale", "payer": { "payment_method": "paypal" }, "redirect_urls": { "return_url": "http://www.fff.com", "cancel_url": "http://www.fff.com" }, "transactions": [ { "amount": { "total": "20.00", "currency": "USD", "details": { "subtotal": "18.00", "tax": "1.00", "shipping": "1.00" } }, "description": "This is payment description.", "item_list": { "items": [ { "quantity": "3", "name": "Hat", "price": "2.00", "sku": "product12345", "description": "This is desc", "currency": "USD" }, { "quantity": "3", "name": "Hat", "price": "2.00", "sku": "product12345", "description": "This is desc", "currency": "USD" }, { "quantity": "3", "name": "Hat", "price": "2.00", "sku": "product12345", "description": "This is desc", "currency": "USD" } ] } } ] } 

执行付款时:

https://api.sandbox.paypal.com/v1/payments/payment/PAY-2NX408505D489885FKQ6M7NA/execute/

 { "payer_id": "KQMQZ9Y7XZYBA", "transactions": [ { "amount": { "total": "28.00", "currency": "USD", "details": { "subtotal": "18.00", "tax": "5.00", "shipping": "5.00" } }, "description": "This is payment description.", "item_list": { "items": [ { "quantity": "3", "name": "Hat", "price": "2.00", "sku": "product12345", "description": "This is desc", "currency": "USD" }, { "quantity": "3", "name": "Hat", "price": "2.00", "sku": "product12345", "description": "This is desc", "currency": "USD" }, { "quantity": "3", "name": "Hat", "price": "2.00", "sku": "product12345", "description": "This is desc", "currency": "USD" } ] } } ] } 

回应:

 { "id": "PAY-2NX408505DYT5005FKQ6M7NA", "create_time": "2014-10-14T07:24:36Z", "update_time": "2014-10-14T07:29:09Z", "state": "approved", "intent": "sale", "payer": { "payment_method": "paypal", "payer_info": { "email": "XXXXXXXXXXX", "first_name": "Eshan Personal Test", "last_name": "Account", "payer_id": "XXXXXXXXXXXX", "shipping_address": { "line1": "cxas", "line2": "asa", "city": "FL", "state": "FL", "postal_code": "95616", "country_code": "US", "recipient_name": "Eshan Personal Test Account" } } }, "transactions": [ { "amount": { "total": "28.00", "currency": "USD", "details": { "subtotal": "18.00", "tax": "5.00", "shipping": "5.00" } }, "description": "This is payment description.", "item_list": { "items": [ { "name": "Hat", "sku": "product12345", "price": "2.00", "currency": "USD", "quantity": "3", "description": "This is desc" }, { "name": "Hat", "sku": "product12345", "price": "2.00", "currency": "USD", "quantity": "3", "description": "This is desc" }, { "name": "Hat", "sku": "product12345", "price": "2.00", "currency": "USD", "quantity": "3", "description": "This is desc" } ], "shipping_address": { "recipient_name": "Eshan Personal Test Account", "line1": "cxas", "line2": "asa", "city": "FL", "state": "FL", "postal_code": "95616", "country_code": "US" } }, "related_resources": [ { "sale": { "id": "04B04851PF2563348", "create_time": "2014-10-14T07:24:36Z", "update_time": "2014-10-14T07:29:09Z", "amount": { "total": "28.00", "currency": "USD" }, "payment_mode": "INSTANT_TRANSFER", "state": "completed", "protection_eligibility": "ELIGIBLE", "protection_eligibility_type": "ITEM_NOT_RECEIVED_ELIGIBLE,UNAUTHORIZED_PAYMENT_ELIGIBLE", "parent_payment": "PAY-2NX408505D485005FKQ6M7NA", "links": [ { "href": "https://api.sandbox.paypal.com/v1/payments/sale/04B04851PF2563348", "rel": "self", "method": "GET" }, { "href": "https://api.sandbox.paypal.com/v1/payments/sale/04B04851PF2563348/refund", "rel": "refund", "method": "POST" }, { "href": "https://api.sandbox.paypal.com/v1/payments/payment/PAY-2NX408505D485005FKQ6M7NA", "rel": "parent_payment", "method": "GET" } ] } } ] } ], "links": [ { "href": "https://api.sandbox.paypal.com/v1/payments/payment/PAY-2NX408505D485005FKQ6M7NA", "rel": "self", "method": "GET" } ] } 

正如您所看到的,我在执行付款时已经通过了新的运费金额,这将是最后一个。

它看起来不像REST支持Express Checkout Callback API ,后者用于更新Express Checkout中的运费和税金总额。 这并不奇怪,因为REST针对移动开发人员,他们不一定要花费额外的带宽。