Search code examples
c#restpaypalexpress-checkout

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


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


Solution

  • 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 .