Magento2 Rest API订单流程


13

我正在对magento网站进行REST API调用以下订单。以下是我的通话顺序。

  1. 创建购物车 rest/V1/guest-carts/
  2. 取得购物车 rest/V1/guest-carts/bae0af147b83f1561f66cc4e3c97916e
  3. 将产品添加到购物车 rest/V1/guest-carts/24/items
  4. 添加帐单信息,设置付款方式和下订单 rest/V1/guest-carts/24/payment-information

在此序列中,订单的订单状态为“待处理”。我想知道如果涉及任何付款网关(例如PayPal)来处理付款和生成发票,如何通过api捕获付款。

上面的流程中是否缺少用于捕获付款的任何api。

Answers:


11

我已经使用Magento2 CE 2.2.0-dev为以下安装了全新安装,并且还保留了默认的“ Luma”主题。

关于诸如MiGSBraintreePayPal之类的外部支付方式(网关),Magento 开箱用地支持这些网关,但没有为它们提供API,您可以将它们与其他“ Checkout” API一起使用。

因此,如果您打算使用Magento的API构建结帐应用/页面,则需要使用其SDK / API手动将其与这些服务集成,幸运的是,您可以通过检查Magento如何将这些服务与已构建的应用集成来学习很多东西集成。

要了解这一点,我必须配置Braintree,因为它是最简单的:

  1. https://www.braintreepayments.com/sandbox上创建沙箱帐户
  2. 进入Magento管理区。
  3. 商店>配置>销售>付款方式> Braintree>配置。
  4. 确保“环境”为“沙箱”,然后输入“商家ID”,“公共密钥”和“私人密钥”。
  5. 保存配置。
  6. 您可能需要重新索引和/或刷新缓存。

将产品添加到购物车并继续进行结帐后,在最后一步中,选择Braintree付款方式,然后单击“下订单”按钮后,您会注意到以下AJAX请求:

  1. 向Braintree API发出2个请求以验证卡,执行交易并以交易状态做出响应。
  2. 对Magento API的请求guest-carts/cartId/payment-information具有通常的主体,如Magento API文档中所述。

之后,当最后一个请求以包含订单的JSON响应时,该过程将按预期继续进行,并重定向到成功页面 entity_id

在此处输入图片说明

这确认了对外部服务(在我们的示例中为Braintree)的调用是由检出页面执行的,而不是由Magento内部执行的,因此,如果要开发自己的检出页面/应用程序,则需要执行相同的操作。

作为用于控制订单状态,我挖较深的,结果发现,使用付款方法,如米格,Braintree的,或PayPal,产生了具有状态的命令processing,而不是通常pending,我怀疑这可以是一个付款方法配置或观察者,但它似乎是配置,这里有更多详细信息。

类别:Magento \ Sales \ Model \ Order \ Payment

方法:Place()

有一个条件可以检查方法是否Initialization需要if ($methodInstance->isInitializeNeeded()),如果是这种情况,将initialize()执行您定义的方法,并允许您同时指定statestatus


您可以共享付款信息api的有效负载吗?
blakcaps

1
{“ cartId”:“ a98697cba964d6ba0d3b64d78a31df33”,“ billingAddress”:{“ countryId”:“ EG”,“ regionId”:null,“ region”:“”,“ street”:[“ street”,“”],“公司“:”我的公司“,”电话“:” 12346987“,”邮政编码“:” 12345“,”城市“:”城市“,”名字“:” f名“,”姓氏“:” l名“,” saveInAddressBook“:null},” paymentMethod“:{” method“:” braintree“,” additional_data“:{” payment_method_nonce“:” ef27df81-7c29-4a74-9049-15de33f1f49f“}},” email“:” email @ example .com“}
Mahmoud Tantawy

感谢您的有效载荷。我想知道如何生成“ payment_method_nonce”。
blakcaps 16/09/20

并不是很清楚,但是我认为通过来回检查请求,可以很容易地发现现时(如果它确实起现时的作用)。
Mahmoud Tantawy

1
Braintree似乎很容易通过REST API进行集成。但是如何集成外部重定向支付网关(如Papal或Ingenico)?
弗朗克·卡尼尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.