アップグレード後にオンライン払い戻しを取り戻すための私のオプションは何ですか?
-
16-10-2019 - |
質問
ストアがMagento 1.5を過ぎてアップグレードされると、次の変更によりオンライン払い戻しの能力が失われる可能性がありますmage_adminhtml_block_sales_order_creditmemo_create_items
if ($this->getCreditmemo()->canRefund()) {
if ($this->getCreditmemo()->getInvoice()) {
vs. new
if ($this->getCreditmemo()->canRefund()) {
if ($this->getCreditmemo()->getInvoice() && $this->getCreditmemo()->getInvoice()->getTransactionId()) {
残念ながら、この変更が発生するのを見た支払い方法はあまりないため、請求書にトランザクション_IDが存在しませんでした。
現在、一部の支払い方法により、Transaction_IDの節約が実装されました。
mage_payment_model_method_abstract
public function processInvoice($invoice, $payment)
{
$invoice->setTransactionId($payment->getLastTransId());
return $this;
}
authorize.netのためのMagento独自の実装を含む
/**
* Mock capture transaction id in invoice
*
* @param Mage_Sales_Model_Order_Invoice $invoice
* @param Mage_Sales_Model_Order_Payment $payment
* @return Mage_Payment_Model_Method_Abstract
*/
public function processInvoice($invoice, $payment)
{
$invoice->setTransactionId(1);
return $this;
}
ただし、ProcessInvoiceのみのコメントはmage_sales_model_order_paymentと呼ばれます
$this->getMethodInstance()->processInvoice($invoice, $this); // should be deprecated
これが最良のアプローチではないと思うようになります。
- 支払い方法の請求書にトランザクション_IDの保存を実装する最良の方法は何ですか?
- レガシーの請求書に対処するための良いオプションは何ですか?
解決
トランザクションIDを正しく設定します
マッピング請求書については。 Magento 1.4はトランザクションが導入されるため、請求書が作成されたときにトランザクションIDを自動的に設定します capture()
また registerCaptureNotification()
注文支払いエンティティの方法。調べてください _addTransaction()
の Mage_Sales_Model_Order_Payment
クラス。したがって、実際にこのトランザクションIDを手動で設定することを気にしてはなりません。また、混乱することもできます $this->getTransactionId()
メソッドコールですが、Magentoは電話をかけることで内部的にトランザクションIDを生成するため、実際にはあなたが設定する必要はありません _generateTransactionId()
キャプチャ通知のキャプチャまたは登録。
Magento 1.4
Magento 1.4.x以降のすべてのアップグレードは安全です。このロジックは常にそこにあったため、注文支払い取引エンティティの導入からです。 1.4以前のすべてのMagentoバージョンは、この大きなアップグレード性の痛みを抱えていました。 https://stackoverflow.com/questions/14207721/why-isnt-payment-method-information-abailable-in-orders-after-ma/14270191#14270191)。請求書にトランザクションIDを設定するためにこの方法を使用していた場合、このトランザクションIDは削除するとMagentoによって自動的に生成されるため、安全である必要があります processInvoice()
設定した元の値は、古いトランザクションの場合も保存されます。
結論
もちろん、この場合は間違っている可能性があります。これは、このようにテストされていないため、私の答えに頼る前にセットアップしてテストするのは素晴らしいことです。少なくとも私の支払い延長はこれを使用していました processInvoice()
方法と払い戻しは、MagentoがMy CreditMemosで正しく処理しました。
アップデート
支払い方法のトランザクション情報については、 $this->getInfoInstance()->setTransactionId('your_txn_id')
あなたを呼んでください authorize()
または、許可なしに直接支払いの場合、 capture()
メソッドトランザクションを明示的に、Magentoがあなたのためにトランザクションレコードを作成できるようにします。古いレコードについては、私の答えに従ってください。