How can I change shipping amount before execute payment using PayPal restAPI

微笑、不失礼 提交于 2020-01-11 11:49:08

问题


I try to migrate our old express checkout process based on PayPal classic API to new RestAPI , but a question has arisen during the new process:

How can I change shipping amount after create a payment and just before execute payment using PayPal restAPI?

Request after create payment:

{
  "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"
  }
}
    

request before execute payment:

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

PayPal response back after execute payment:

{
  "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"
    }
  ]
}

回答1:


You can change the shipping amount after creating a payment . You need to pass shipping amount in the execute payment call and it will override the shipping that you set while creating the payment .

Request passed in while creating the payment :

{
  "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"
          }
        ]
      }
    }
  ]
}

While executing the payment :

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"
          }
        ]
      }
    }
  ]
}

Response :

{
  "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"
    }
  ]
}

As you can see , I have passed the new shipping amount while executing the payment and it will be final one .




回答2:


It doesn't look like REST supports the Express Checkout Callback API, which is used to update shipping and tax totals within Express Checkout. It's not surprising since REST is aimed at mobile developers and they wouldn't necessarily want the extra bandwidth spent.



来源:https://stackoverflow.com/questions/26350802/how-can-i-change-shipping-amount-before-execute-payment-using-paypal-restapi

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!