Я пытаюсь перенести наш старый экспресс-процесс проверки, основанный на API-интерфейсе PayPal classic, на новый 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 поддерживает API обратного вызова Express Checkout, который используется для обновления данных о доставке и сумме налогов в Express Checkout. Это неудивительно, так как REST нацелен на разработчиков мобильных устройств, и они не обязательно будут нуждаться в дополнительной пропускной способности.