カスタム支払いモジュールを使用していますが、カスタム支払いゲートウェイから失敗したトランザクションの応答を受け取ったら、
注文を「pending_payment」状態/ステータスで保存し、注文メールを送信しないでください。
請求書を作成/処理したり、請求書の電子メールを送信したりしたくありません。
また、顧客を失敗ページまたはチェックアウト/カートページにリダイレクトしたいのですが、支払いの詳細が間違っているというメッセージが上部に表示されているので、もう一度やり直してください.
支払いゲートウェイから「失敗」の応答を受け取ったら、注文を pending_payment ステータスに保存し、新しい注文メールの送信を停止することができますが、請求を停止することはできません。送り出さ。
カスタム支払いモジュールのイベントでオブザーバーを呼び出していsales_order_place_after
ます。これは、注文を請求し、トランザクションが成功したときに請求書の電子メールを送信します。
そのファイルも編集する必要があるかどうか(app/code/local/Mage/Paymentmodule/Model/Observer.php)、または私の app/code/local/Mage/Paymentmodule/Model/PaymentMethod.php だけで十分かどうかはわかりません。
PaymentMethod.php
public function capture(Varien_Object $payment, $amount)
{
$error = false;
// check for payment
if($amount > 0)
{
$payment->setAmount($amount);
$order = $payment->getOrder();
if($payment->getTxnNumber() == "")
{
$transaction = $this->_build($payment, self::TRANSACTION_PREAUTH);
$authResponse = $this->_send($transaction);
if($authResponse->getResponseCode() > 0 && $authResponse->getResponseCode() <= self::ERROR_CODE_LIMIT)
{
$payment->setCcApproval($authResponse->getReceiptId())
->setLastTransId($authResponse->getReceiptId())
->setCcTransId($authResponse->getTxnNumber()) ->setCcCidStatus($this->getCvdDescription($authResponse->getCvdResultCode()));
}
else if($authResponse->getResponseCode() > self::ERROR_CODE_LIMIT && $authResponse->getResponseCode() < self::ERROR_CODE_UPPER_LIMIT)
{
$order->setState(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, 'pending_payment', '', false)->save();
$order->setCanSendNewEmailFlag(false);
$order->setCanInvoiceFlag(false);
}
else
{
$order->setState(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, 'pending_payment', '', false)->save();
$order->setCanSendNewEmailFlag(false);
$order->setCanInvoiceFlag(false);
}
}
$check = $this->checkCvdResponse($authResponse->getCvdResultCode());
if($check == true)
{
$order->setState(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, 'pending_payment', '', false)->save();
$order->setCanSendNewEmailFlag(false);
$order->setCanInvoiceFlag(false);
}
else
{
$transaction_completion = $this->_build($payment, self::TRANSACTION_COMPLETION);
$response = $this->_send($transaction_completion);
if($response->getResponseCode() > 0 && $response->getResponseCode() <= self::ERROR_CODE_LIMIT)
{
$payment->setStatus(self::STATUS_SUCCESS);
$payment->setCcApproval($response->getReceiptId())
->setLastTransId($response->getReferenceNum())
->setCcTransId($response->getTxnNumber())
->setCcAvsStatus($this->getAvsDescription($authResponse->getAvsResultCode()))
->setCcCidStatus($this->getCvdDescription($authResponse->getCvdResultCode()));
}
else if($response->getResponseCode() > self::ERROR_CODE_LIMIT && $response->getResponseCode() < self::ERROR_CODE_UPPER_LIMIT)
{
$order->setState(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, 'pending_payment', '', false)->save();
$order->setCanSendNewEmailFlag(false);
$order->setCanInvoiceFlag(false);
}
else
{
$order->setState(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, 'pending_payment', '', false) ->save();
$order->setCanSendNewEmailFlag(false);
$order->setCanInvoiceFlag(false);
}
}
}
else
{
$error = Mage::helper('paygate')->__('Invalid amount for authorization.');
}
if ($error !== false)
Mage::throwException($error);
return $this;
}
Observer.php
public function implementOrderStatus($event)
{
$order = $event->getEvent()->getOrder();
if ($this->_getPaymentMethod($order) == 'custompaymentmodule')
{
if($order->getState() == 'pending_payment')
{
$order->setCanSendNewEmailFlag(false);
$order->setCanInvoiceFlag(false);
}
if ($order->canInvoice())
$this->_processOrderStatus($order);
}
return $this;
}
pending_payment 状態を保存して請求書発行を停止し、適切なメッセージでカート ページにリダイレクトするにはどうすればよいでしょうか。
ビットのいずれかを解決するための助けをいただければ幸いです。ありがとう