Quelles sont mes options pour ramener des remboursements en ligne après la mise à niveau?

magento.stackexchange https://magento.stackexchange.com/questions/332

  •  16-10-2019
  •  | 
  •  

Question

Quand un magasin obtient amélioré passé Magento 1.5, il peut perdre la capacité de ligne des remboursements en raison de la modification suivante Mage_Adminhtml_Block_Sales_Order_Creditmemo_Create_Items

if ($this->getCreditmemo()->canRefund()) {
    if ($this->getCreditmemo()->getInvoice()) {

vs. nouveau

if ($this->getCreditmemo()->canRefund()) {
    if ($this->getCreditmemo()->getInvoice() && $this->getCreditmemo()->getInvoice()->getTransactionId()) {

Malheureusement, pas beaucoup de méthodes de paiement a vu ce changement à venir, et donc ne pas le présent transaction_id sur la facture.

Certains mode de paiement ont maintenant mis en œuvre la sauvegarde du transaction_id en utilisant / prioritaire

Mage_Payment_Model_Method_Abstract

public function processInvoice($invoice, $payment)
{
    $invoice->setTransactionId($payment->getLastTransId());
    return $this;
}

y compris propre implémentation de Magento pour Authorize.net

/**
 * 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;
}

Cependant le commentaire dans le seul endroit processInvoice est appelé Mage_Sales_Model_Order_Payment

$this->getMethodInstance()->processInvoice($invoice, $this); // should be deprecated

me fait penser ce n'est pas la meilleure approche.

  • Quelle est la meilleure façon de mettre en œuvre la sauvegarde du transaction_id sur la facture dans votre mode de paiement?
  • Quelles sont les bonnes options pour traiter les factures existantes?
Était-ce utile?

La solution

Réglage transaction correctement Id

En ce qui concerne les factures de cartographie. Depuis Magento 1.4 obtient les transactions introduites, il définit numéro de transaction automatiquement lorsque la facture est créée par des méthodes de capture() ou registerCaptureNotification() de l'entité de paiement de la commande. Il suffit de regarder dans _addTransaction() de classe Mage_Sales_Model_Order_Payment. Donc, vous devriez vraiment pas se soucier de la définition de cette transaction ids manuellement. Aussi, vous pouvez vous confondre par la méthode $this->getTransactionId() appel, mais il est nécessaire ne pas vraiment être fixé par vous, car Magento génère numéro de transaction interne en appelant _generateTransactionId() dans la capture ou l'enregistrement de la notification de capture.

Magento 1.4

Toutes les mises à jour depuis Magento 1.4.x sont sûrs, car cette logique était toujours là, étant donné que l'introduction d'une entité de transaction de paiement de la commande. Toutes les versions Magento avant 1.4 est un enorme douleur évolutivité, même Authorize.Net noyau (vérifier ma réponse sur le SO: https://stackoverflow.com/questions/14207721/why-isnt-payment-method-information-available-in-orders-after- la mise à niveau-de-ma / 14270191 # 14270191 ). Si vous utilisez cette méthode pour la mise en identifiant de transaction sur la facture, que vous devriez être en sécurité avec elle, puisque ce numéro de transaction est généré automatiquement par Magento si vous supprimez appel et votre valeur initiale processInvoice() que vous avez défini est obtient conservé aussi bien pour anciennes transactions.

Conclusion

Bien sûr, je peux me tromper à ce cas, car il n'a pas été testé de cette manière, serait donc génial de le mettre en place et tester avant de se fonder sur ma réponse. Au moins non de mes extensions de paiement a été en utilisant cette méthode de processInvoice() et des remboursements a été correctement traitée par Magento avec mes creditmemos.

UPDATE

En ce qui concerne l'information de transaction pour votre mode de paiement, vous devez faire appel $this->getInfoInstance()->setTransactionId('your_txn_id') dans votre authorize() ou, si elle est le paiement direct sans autorisation, transaction méthode capture() explicitement, à laisser Magento créer enregistrement de transaction pour vous. Pour les anciens enregistrements suivent ma réponse sur le SO.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top