0

Magento サイトに 30 日以上経過した注文がいくつかあるため、authorize.net 事前認証の有効期限が切れています。注文をキャンセルしようとすると、事前承認無効を送信しようとしますが、元のトランザクションが存在しないため失敗します。この無効手順を手動で無効にして、この状態で注文をキャンセルする方法はありますか?

4

3 に答える 3

1

見てみる@

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

支払いモジュールのデバッグをオンにし$result->getResponseCode()て、期限切れのトランザクションの結果を確認します。結果(コード/エラーコード)が何であるかを把握したら、模倣する新しい「ケース」を作成できますcase self::RESPONSE_CODE_APPROVED:

また、@ $this->_isTransactionExpired($realAuthTransactionId) を見て、期限切れのトランザクションをキャッチしない理由を確認してください。

protected function _voidCardTransaction($payment, $card)
{
    $authTransactionId = $card->getLastTransId();
    $authTransaction = $payment->getTransaction($authTransactionId);
    $realAuthTransactionId = $authTransaction->getAdditionalInformation($this->_realTransactionIdKey);

    $payment->setAnetTransType(self::REQUEST_TYPE_VOID);
    $payment->setXTransId($realAuthTransactionId);

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

    switch ($result->getResponseCode()) {
        case self::RESPONSE_CODE_APPROVED:
            if ($result->getResponseReasonCode() == self::RESPONSE_REASON_CODE_APPROVED) {
                $voidTransactionId = $result->getTransactionId() . '-void';
                $card->setLastTransId($voidTransactionId);
                return $this->_addTransaction(
                    $payment,
                    $voidTransactionId,
                    Mage_Sales_Model_Order_Payment_Transaction::TYPE_VOID,
                    array(
                        'is_transaction_closed' => 1,
                        'should_close_parent_transaction' => 1,
                        'parent_transaction_id' => $authTransactionId
                    ),
                    array($this->_realTransactionIdKey => $result->getTransactionId()),
                    Mage::helper('paygate')->getTransactionMessage(
                        $payment, self::REQUEST_TYPE_VOID, $result->getTransactionId(), $card
                    )
                );
            }
            $exceptionMessage = $this->_wrapGatewayError($result->getResponseReasonText());
            break;
        case self::RESPONSE_CODE_DECLINED:
        case self::RESPONSE_CODE_ERROR:
        if ($result->getResponseReasonCode() == self::RESPONSE_REASON_CODE_NOT_FOUND
            && $this->_isTransactionExpired($realAuthTransactionId)
        ) {
          .....


public function canVoid(Varien_Object $payment)
{
    if ($this->_isGatewayActionsLocked($this->getInfoInstance())) {
        return false;
    }
    return $this->_isPreauthorizeCapture($this->getInfoInstance());
}
于 2013-02-14T00:09:33.050 に答える