1

在https://github.com/ph/magento-moneris的帮助下,我设法在 Magento 中创建了一个 Moneris 支付网关,我现在正在使用 Moneris Development 站点对其进行测试。

我有几个问题,我很困惑,不知道如何继续。

  • 有没有办法可以在代码中的某个位置将“仅授权”设置为“授权和捕获”,以便在下订单时同时执行捕获?

  • 还有一种方法可以在下订单的同时开具发票,并将发票邮件发送给客户 n 店主。

  • 例如:单击“下订单”时,会检查并验证客户的卡详细信息。如果他们没问题,那么付款会同时在商家的帐户中被捕获,并且发票电子邮件会发送给客户和店主。

如果卡的详细信息不正确,则在前端向客户显示适当的消息,并将该订单保持为待处理状态,并提供适当的理由供店主查看。

我现在拥有的代码是用于_authorizen 个_capture函数的。它们是否需要修改或需要创建新功能。

    public function authorize(Varien_Object $payment, $amount)
    {
     $error = false;
     // check for payment
    if($amount > 0) {
$payment->setAmount($amount);
// Map magento keys to moneris way
$order = $payment->getOrder();
$billing = $order->getBillingAddress();
$avsTemplate = array('avs_zipcode' => $order->getBillingAddress()->getPostcode(), 'avs_street_number' => $order->getBillingAddress()->getStreet(1),'', 'avs_street_name' => $order->getBillingAddress()->getStreet(2),'');
$mpgAvsInfo = new mpgAvsInfo($avsTemplate);
$cvdTemplate = array('cvd_value' => $payment->getCcCid(),'cvd_indicator' => 1);

$mpgCvdInfo = new mpgCvdInfo($cvdTemplate);
$transaction = $this->_build($payment, self::TRANSACTION_PREAUTH);
$transaction->setAvsInfo($mpgAvsInfo);
$transaction->setCvdInfo($mpgCvdInfo);  
$response = $this->_send($transaction);
$payment->setCcApproval($response->getReceiptId())
         ->setLastTransId($response->getReceiptId())
         ->setCcTransId($response->getTxnNumber())
         ->setCcAvsStatus($response->getAuthCode())
         ->setCcCidStatus($response->getResponseCode());        
if($response->getResponseCode() > 0 && $response->getResponseCode() <= self::ERROR_CODE_LIMIT) 
{
    $payment->setStatus(self::STATUS_APPROVED);
    $message = 'AVS Response: ' . Mage::helper('paygate')->__($this->_errors[$response->getAvsResultCode()]);
    $message .= '<br>CVD Response: ' . Mage::helper('paygate')->__($this->_errors[$response->getCvdResultCode()]);
    Mage::getSingleton('core/session')->addSuccess($message);
} 
else if($response->getResponseCode() > self::ERROR_CODE_LIMIT && $response->getResponseCode() < self::ERROR_CODE_UPPER_LIMIT)
{
    $error = Mage::helper('paygate')->__($this->_errors[$response->getResponseCode()]);
} 
else 
{
    $error = Mage::helper('paygate')->__('Incomplete transaction.');
}
}
else
{
$error = Mage::helper('paygate')->__('Invalid amount for authorization.');
} 
 if ($error !== false)
 Mage::throwException($error);
  return $this;
} 

  /**
  * Capture the authorized transaction for a specific order
  * @var Variant_Object $payment
  * @var Float $amount
  */
   public function capture(Varien_Object $payment, $amount) {
   $error = false;
   // check for payment
if ($amount <= 0) 
{
     Mage::throwException(Mage::helper('paygate')->__('Invalid amount for capture.'));
    }
if($amount > 0)
{
    $payment->setAmount($amount);
    // Map magento keys to moneris way
    $transaction = $this->_build($payment, self::TRANSACTION_COMPLETION);
    $response = $this->_send($transaction);

    if($response->getResponseCode() > 0 && $response->getResponseCode() <= self::ERROR_CODE_LIMIT)
    {
        $payment->setStatus(self::STATUS_SUCCESS);
        $message = 'AVS Response: ' . Mage::helper('paygate')->__($this->_errors[$response->getAvsResultCode()]);
        $message .= '<br>CVD Response: ' . Mage::helper('paygate')->__($this->_errors[$response->getCvdResultCode()]);
        Mage::getSingleton('core/session')->addSuccess($message);
    }
    else if($response->getResponseCode() > self::ERROR_CODE_LIMIT && $response->getResponseCode() < self::ERROR_CODE_UPPER_LIMIT) 
    {
        $error = Mage::helper('paygate')->__($this->_errors[$response->getResponseCode()]);
    }
    else 
    {
        $error = Mage::helper('paygate')->__('Incomplete transaction.');
    }
} 
else
{
    $error = Mage::helper('paygate')->__('Invalid amount for capture.');
}


// we've got something bad here.
if ($error !== false)
Mage::throwException($error);

return $this;

  }

随意在任何地方纠正我或建议一种更好的方法来做我想做的事情。

最后,我期待在 Magento 中构建一个基本的 Moneris 支付网关,如果卡的详细信息正确,它会授权 n 捕获金额,并在点击“下订单”的同时将发票邮件发送给客户 n 店主'。

如果卡详细信息有误,则向客户显示适当的消息,并将其保持为待处理,并提供待付款的正确理由,以供店主查看。

4

0 回答 0