2016-12-15 72 views
3

我正在开发一个电子商务mobiloe应用程序,仅使用magento 2 rest apis。这是使REST API调用订单放置的流程。无法在magento 2 rest中使用paypal进行下单

1.Create a cart

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

该API将返回唯一车ID

2.Add products to cart

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

体 - >

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

3. Estimate Shipping Methods

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

体 - >

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

} 

这将返回根据送货地址的所有可能的运输方式在我的情况下,结果是

[ 
    { 
    "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}}/index.php/rest/V1/carts/mine/shipping-information

体数据 - >

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


    } 
} 

这将返回所有可能的付款方式。在这里,我使用paypal_express付款。

5. Payment using paypal plugin

在这里,我将支付使用paypal cordova plugin量。还配置了IPN [{{URL}} /贝宝/ IPN /]在PayPal帐户

此API将返回以下数据,

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

数据 - >

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

    } 
} 

但是这个API将返回

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

是否有任何API中捕获payments.Please帮我上述流程失踪。

+0

肯定的是,我有同样的问题。 – Manish

+0

贝宝将在收到付款后发送IPN。您应该使用它来下订单...否则,您的客户可能会尝试通过逆向工程来欺骗付款。 –

回答

1

贝宝快递支付方式不支持在线拍摄。无法通过Magento API界面获得完整的订单创建流程,如通过Checkout进行。改变订单状态和处理付款是不可能的。作为一种解决方法请尝试以下操作:

  1. 创建(网站结帐页面上没有)的自定义付款方式
  2. 启用REST API只
  3. 在使用REST API使用使用此方法(付款成功后支付费用你的android/ios SDK)
  4. 下订单后发送交易ID(PAY-xxxxx)返回贝宝sdk付款保存trasaction。(告诉你的服务器端tio实现这个调用)。

我正在一步一步写完整的评论。完成后我会通知你。

+0

嗨曼尼什关于你的文章的任何消息? – awavi

+0

你可以在这里找到:http://www.ipragmatech.com/validate-payment-paypal-magento-rest-api/ – Manish

+0

谢谢!你有一个github回购代码可以使用吗? – awavi

0

万一有人仍在寻找解决方案。

在我回答这个问题时,您需要创建一个Magento 2模块来处理付款ID。

收到来自示例Paypal android SDK的响应。

以下是你可以发送到Magento的端点的JSON格式:

  • 为登录用户:PUT/V1 /车/我的/为了
  • 来宾:PUT/V1 /客推车/ :cartId /订单

参考:http://devdocs.magento.com/swagger

的“paypal_express_payment_payload”仅仅是一个自定义属性先前持有支付宝付款响应˚F rom android SDK。

{ 
    "paymentMethod": { 
     "method": "paypal_express", 
     "additional_data": { 
      "paypal_express_payment_payload": "{\"create_time\":\"2017-06-15T23:13:52Z\",\"id\":\"PAY-2LB41725NU654612TLFBRIUQ\",\"intent\":\"sale\",\"state\":\"approved\"}" 
     } 
    } 
} 

要处理 “paypal_express_payment_payload” 的数据,您可以将您的Magento 2模块中实现一个拦截器:

迪。XML

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> 
    <type name="Magento\Paypal\Model\Express"> 
     <plugin name="mymodule_magento_paypal_model_express_plugin" 
       type="Mycompanyorpersonal\Mymodule\Plugin\Paypal\Model\Express" 
       sortOrder="99999" 
       disabled="false" /> 
    </type> 
</config> 

Mycompanyorpersonal \ Mymodule中\插件\宝\型号\ Express.php

你可以在我的以下要点找到完整的PHP代码:https://gist.github.com/feelinc/de817030e00adc7ff7001de1807c1835