我已经使用Magento2 CE 2.2.0-dev为以下安装了全新安装,并且还保留了默认的“ Luma”主题。
关于诸如MiGS,Braintree,PayPal之类的外部支付方式(网关),Magento 开箱即用地支持这些网关,但没有为它们提供API,您可以将它们与其他“ Checkout” API一起使用。
因此,如果您打算使用Magento的API构建结帐应用/页面,则需要使用其SDK / API手动将其与这些服务集成,幸运的是,您可以通过检查Magento如何将这些服务与已构建的应用集成来学习很多东西集成。
要了解这一点,我必须配置Braintree,因为它是最简单的:
- 在https://www.braintreepayments.com/sandbox上创建沙箱帐户
- 进入Magento管理区。
- 商店>配置>销售>付款方式> Braintree>配置。
- 确保“环境”为“沙箱”,然后输入“商家ID”,“公共密钥”和“私人密钥”。
- 保存配置。
- 您可能需要重新索引和/或刷新缓存。
将产品添加到购物车并继续进行结帐后,在最后一步中,选择Braintree付款方式,然后单击“下订单”按钮后,您会注意到以下AJAX请求:
- 向Braintree API发出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()
执行您定义的方法,并允许您同时指定state
和status
。