cordova 无法使用贝宝在magento 2休息下订单

os8fio9y  于 2022-11-15  发布在  其他
关注(0)|答案(4)|浏览(161)

我正在开发一个电子商务移动应用程序,只使用magento 2 restapis。这是一个调用REST API来下单的流程。

一月一日

API --〉{{url}}/index.php/rest/V1/carts/mine
此API将返回唯一的购物车标识

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

一个月六个月一次

网址--〉{{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付款。

一米九一米

这里我将支付金额使用paypal cordova plugin。还配置了在贝宝帐户的IPN [{{url}}/paypal/ipn/]
此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"
}

一个月一个月

网址--〉{{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?请帮助我。

11dmarpk

11dmarpk1#

Paypal Express付款方式不支持在线捕获。无法通过Magento API接口获得完整的订单创建流程,如结账。无法更改订单状态和处理付款。作为解决方法,请尝试以下操作:
1.创建自定义付款方式
1.仅为REST API启用(不在网站 checkout 页面上)
1.使用rest api进行支付时使用此方法(成功支付后使用您的android/ios SDK)
1.下订单后,发送交易ID(PAY-xxxxx),通过贝宝SDK支付返回,以保存交易。(告诉您的服务器端,执行此调用)。
我正在一步一步地写一篇关于这件事的完整的文章。当它完成的时候我会让你知道的。

mznpcxlj

mznpcxlj2#

通过PayPal Rest API下单

对于通过Paypal休息API的地方订单,你需要一个活跃的购物车与航运和帐单地址
默认情况下,我们需要遵循一些设置来下订单
·步骤1.创建一个空购物车
·步骤2.将产品添加到购物车
·步骤3.设置送货地址
·步骤4.设置账单地址
·步骤5.设置交付方式
·第六步:申请优惠券(如果有)
·步骤7.设置付款方式
·第8步:下单
步骤6之后,遵循以下API
我们需要调用下面的API一个接一个的下订单与贝宝

创建Paypal Express令牌

  • 网址:{您的网站网址}/rest/default/V1/paypalapi/createpaypalexpressstoken
  • 方法:POST
  • 在听者(如果是客户)中为访客用户设置承载令牌,无需设置
  • 内容类型:JSON格式
  • 正文对于访客用户:
{ 
   "cart_id":"5QWFYZdyccucvgD2QMLDCp5fhjmaH2xg",
   "cancel_url":"cancel_url",
   "return_url":"return_url" 
}
  • 客户用户正文:
{ 
     "cart_id": 22, 
     "cancel_url": "cancel_url", 
     "return_url": "return_url" 
 }
  • 您将得到这样的响应:
[ 
       { 
          "code": 200, 
          "token": "EC-4MD50688YD296870K",
          "paypal_urls":{ 
               "start": "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-4MD50688YD296870K&useraction=commit",
                "edit": "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&useraction=continue&token=EC-4MD50688YD296870K" 
           } 
       }]

说明

  • 您需要将客户重定向到{起始URL },付款后,PayPal将使用重定向URL中的两个参数“payer_id”和“token”重定向用户。您需要在以下API中调用这两个值

在购物车上设置付款方式

网址:{您的网站网址}/rest/default/V1/paypalapi/setpaymentmethodoncart

  • 方法:POST
  • 在听者(如果是客户)中为访客用户设置不记名令牌

需要设置它

  • 内容类型:JSON格式
  • 正文对于访客用户:
{ 
   "cart_id": "5QWFYZdyccucvgD2QMLDCp5fhjmaH2xg", 
   "payer_id": "9T3GV67ZSL378", 
   "token": "EC-4MD50688YD296870K", 
   "payment_method": "paypal_express" 
}
  • 客户用户正文:
{
     "cart_id": 22, 
     "payer_id": "9T3GV67ZSL378",
     "token": "EC-4MD50688YD296870K", 
     "payment_method": "paypal_express", 
     "customer_id": 141 
}
  • 您将得到这样的响应:

[
{【编码】:200,【选择_支付_方式】:{【编码】:“paypal_快递”,【标题】:“PayPal快速结账”} } ]

下单

网址:{您的网站网址}/rest/default/V1/paypalapi/placeorder

  • 方法:POST
  • 在听者(如果是客户)中为访客用户设置承载令牌,无需设置
  • 内容类型:JSON格式
  • 正文对于访客用户:

{“购物车标识”:“5QWFYZdycucvgD2QMLDCp5fhjmaH2xg”}

  • 客户用户正文:

{“购物车标识”:22、“客户标识”:一百四十一章}

  • 您将得到这样的响应:

[ {【货号】:200个【订货_数量】:000000142 } ]的规定

以下是Paypal Rest API模块的链接

https://github.com/santosh-gaggle/paypal-rest-api

t9aqgxwy

t9aqgxwy3#

以防有人还在寻找解决方案。
在我回答这个问题的时候,你将需要创建一个Magento 2模块来处理付款ID.
在您收到来自示例Paypal Android SDK的响应后。
下面是您可以发送到Magento端点的JSON格式:

  • 对于已登录用户:PUT /V1/手推车/地雷/订单
  • 对于客人:PUT /V1/客人购物车/:购物车ID/订单

参考:http://devdocs.magento.com/swagger
“paypal_express_payment_payload”只是一个自定义属性,用于保存以前来自Android SDK的paypal支付响应。

{
    "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模块中实现拦截器:

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

我的公司或个人\我的模块\插件\贝宝\模型\Express.php

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

abithluo

abithluo4#

如果您使用下面的命令来运行post查询,请用curl请求替换runPostQuery。这将向magento 2传递一个已经成功的令牌。

$payment['paymentMethod'] = ['method' =>'paypal_express',
               'additional_data' => array (
                   'paypal_express_checkout_token' => $request->query->get('token'),
                   'paypal_express_checkout_redirect_required' => false,
                   'paypal_express_checkout_payer_id' => $request->query->get('PayerID')
               )];

           $completedPayment = $this->runPostQuery('carts/mine/payment-information', $headers, json_encode($payment));

您需要创建一个插件来添加最后一个交易ID到支付中,请参见上面的评论,但是上面的payment-information有效负载将允许您在Paypal\Model\Express. php中获得past _placeOrder函数
paypal_express_checkout_token是从贝宝传递回浏览器的令牌,与PayerId相同,这允许检查付款,它将返回成功,不需要重定向,但不是付款参考,只是操作令牌。

相关问题