且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

无法在 magento 2 rest 中使用贝宝下订单

更新时间:2023-11-30 10:53:34

Paypal Express 付款方式不支持在线捕获.无法通过 Magento API 接口获得像 Checkout 那样的完整订单创建流程.无法更改订单状态和处理付款.作为解决方法,请尝试以下操作:

  1. 创建自定义付款方式
  2. 仅启用 REST API(不在网站结帐页面上)
  3. 在使用rest api进行付款时,请使用此方法(使用android/ios SDK成功付款后)
  4. 下单后发送交易id(PAY-xxxxx)通过paypal sdk支付返回以保存交易.(告诉你的服务器端tio实现这个调用).

我正在写一篇关于这一步的完整文章.完成后我会通知你.

I am developing an e-commerce mobiloe application using magento 2 rest apis only.This is the flow for making the REST API calls for order placement.

1.Create a cart

api -->{{url}}/index.php/rest/V1/carts/mine

This api will return a unique cart id

2.Add products to cart

api --> {{url}}/index.php/rest/V1/carts/mine/items

body ->

{
 "cart_item": {
     "quote_id": cartId,
     "sku": skuName,
     "qty": 1
     }
}

3. Estimate Shipping Methods

url --> {{url}}/index.php/rest/V1/carts/mine/estimate-shipping-methods

body ->

{
    "address": {
        "region": "Trivandrum",
        "region_id": 12,
        "region_code": "CA",
        "country_id": "IN",
        "street": [
            "Amstor house",
            "Eramam"
        ],
        "telephone": "5656565454",
        "postcode": "670390",
        "city": "Kazhakuttam",
        "firstname": "Peter",
        "lastname": "K",
        "same_as_billing": 0,
        "save_in_address_book": 0
    }

}

This will return all possible shipping methods based on shipping address.In my case the result is

[
  {
    "carrier_code": "freeshipping",
    "method_code": "freeshipping",
    "carrier_title": "Free Shipping",
    "method_title": "Free",
    "amount": 0,
    "base_amount": 0,
    "available": true,
    "error_message": "",
    "price_excl_tax": 0,
    "price_incl_tax": 0
  }
]

4)Save shipping information

url --> {{url}}/index.php/rest/V1/carts/mine/shipping-information

body data ->

{
    "addressInformation": {
        "shipping_address": {

            "region": "Trivandrum",
            "region_id": 12,
            "region_code": "CA",
            "country_id": "IN",
            "street": [
                "Amstor house",
                "Eramam"
            ],
            "telephone": "5656565454",
            "postcode": "670390",
            "city": "Kazhakuttam",
            "firstname": "Peter",
            "lastname": "K",

        },
        "billing_address": {
            "region": "Trivandrum",
            "region_id": 12,
            "region_code": "CA",
            "country_id": "IN",
            "street": [
                "Amstor house",
                "Eramam"
            ],
            "telephone": "5656565454",
            "postcode": "670390",
            "city": "Kazhakuttam",
            "firstname": "Peter",
            "lastname": "K",
        },
        "shipping_method_code": "freeshipping",
        "shipping_carrier_code": "freeshipping"


    }
}

This will return all possible payment methods. Here i am using paypal_express for payment.

5. Payment using paypal plugin

Here i will pay the amount using paypal cordova plugin.Also configured the IPN [{{url}}/paypal/ipn/]in paypal account

This api will return the following data,

{
   "client": {
       "environment": "sandbox",
       "paypal_sdk_version": "2.14.4",
       "platform": "Android",
       "product_name": "PayPal-Android-SDK"
   },
   "response": {
       "create_time": "2016-11-19T05:25:46Z",
       "id": "PAY-5VS11410F5341972MLAX6ETA",
       "intent": "sale",
       "state": "approved"
   },
   "response_type": "payment"
}

5.Save payment and place order

url --> {{url}}/index.php/rest/V1/carts/mine/payment-information

data ->

{
    "cartId": 3,
    "billingAddress‌​": {
        "region": "Trivandrum",
        "region_id": 12,
        "region_code": "CA",
        "country_id": "IN",
        "street": [
            "Amstor house",
            "Eramam"
        ],
        "telephone": "5656565454",
        "postcode": "670390",
        "city": "Kazhakuttam",
        "firstname": "Peter",
        "lastname": "K"
    },
    "paymentMethod": {
        "method": "paypal_express"

    }
}

But this api will returning

{
  "message": "PayPal gateway has rejected request. Invalid token (#10410: Invalid token)."
}

Is there any api missing in the above flow for capturing payments.Please help me.

Paypal Express payment method doesn't support online capturing. There is no way to get a full order creation flow like on Checkout via Magento API interface. It is impossible to change the order state and process payments. As a workaround try the following:

  1. Create a custom payment method
  2. Enable for REST API only(Not on website checkout page)
  3. While making payment using rest api use this method (after successful payment using you android/ios SDK)
  4. After placing the order make send transaction id(PAY-xxxxx) return by paypal sdk payment to save trasaction.(tell your server side tio implement this call).

I am writting a complete atrticle regarding this step by step. I will let you know when it is done.