Magento(麦进斗) 线上购物支付流

来源:互联网 发布:怎么退出windows media 编辑:程序博客网 时间:2024/06/06 08:50

互联网前、实体和实体的信用卡交易是两个阶段的过程。

在出售的时候,当商人了消费者的信用卡购买他们会滑过一个销售点设备将信用卡的中央办公室打电话,问“这张卡片授权给这个网络,这个特定的消费者可用的信用额度足以允许购买”。

如果购买是被接受的(而不是拒绝),则被认为是被授权的。消费者将会购买他们的产品,而销售点系统/现金出纳机将会注意到交易是经过授权的。一天结束的时候,或在本周结束前,在其他一些预定的定期,或当业主决定戒酒,商人会尽管他们所有的授权收入和发送另一个请求中央办公室捕捉授权交易的基金。把钱花在商人的账户上是一笔钱。

这仍然是大多数网关使用的模型,也是Magento公司为其支付模块实现的域模型。

事情应该运行的方式是,当使用者到达像Magento这样的系统的最终结帐步骤时,Magento会向网关的API发出授权请求。如果事务成功,则该订单将被接收到系统中,并且存储了来自授权请求的唯一ID。接下来,当消费者的商品发货时,商店的所有者使用Magento管理员来创建发票。这个发票的创建发出一个捕获请求(使用从授权请求返回的存储id)。这就是这些方法调用在Magento中发出的地方。

然而,事情变得棘手了,因为每个支付网关都对这些概念进行了不同的解释,每个商家都解释他们的“直到我们装运”的责任不同。除了上面描述的场景之外,支付模块还有一个系统配置值,称为支付操作。这可以被设置为仅授权,它将实现上面描述的流。它还可以被设置为授权和捕获,当订单被放置时,它将授权和捕获支付。这确实更让人摸不着头脑,因为尽管方法被调用授权和捕获,捕获当前版本的线上购物只会问题请求当设置在这种模式下(至少为Authorize.net),和Authorize.net,在内部,离开捕获请求在授权而不是捕获状态的一天。Magento如何处理订单、支付和发票是代码库的一个方面,它从版本到版本都有很大的变化。

因此,Magento支付模块系统背后的理念是保护您不受集群F-——这是编程支付网关逻辑。在您的授权方法中,您实现了对支付网关的授权API的调用(或者执行您想要在此时发生的任何检查和逻辑)。该方法通过一个支付对象和一个金额。如果你让你的请求成为你的逻辑,并且确定它是无效的,你就会抛出一个异常Mage:throwException(“…”);这告诉Magento,授权失败了,它将采取相应的行动(显示一条错误消息,等等)。否则,您将在付款对象上设置数据成员并发出一条return $this;

数据成员是您在捕获支付时需要的东西。这就给我们带来了支付模块的capture方法。这个方法也会发送一个支付对象和一个金额。在此方法中,您将发出捕获请求。付款对象将有cc_trans_id数据成员$payment->getCcTransId()

这将允许你对你的网关进行捕获。这是您负责在authorize中保存的数据成员之一。同样,如果您的代码决定捕获失败,则抛出一个异常。否则,你return $this。

授权网支付模块有很好的例子说明这是怎么做的。

app/code/core/Mage/Paygate/Model/Authorizenet.php

例如,考虑capture方法的这一部分

public function capture(Varien_Object$payment, $amount)

{

   if ($payment->getCcTransId()) {

       $payment->setAnetTransType(self::REQUEST_TYPE_PRIOR_AUTH_CAPTURE);

    }else {

       $payment->setAnetTransType(self::REQUEST_TYPE_AUTH_CAPTURE);

   }  

 

   $payment->setAmount($amount);

   $request= $this->_buildRequest($payment);

   $result = $this->_postRequest($request);

   //...

这里捕获方法是检查支付是否有一个cc_trans_id。根据结果,它将anet_trans_type设置为:

self:REQUEST_TYPE_PRIOR_AUTH_CAPTURE

self:REQUEST_TYPE_AUTH_CAPTURE

然后API请求对象使用这个值来发送API调用

1捕捉pre-authorized事务

2立即捕获