Tetapkan status pesanan khusus untuk pembayaran Standar Pembayaran Situs Web PayPal yang lengkap?

9

Kami menggunakan Magento EE 1.13.0.2 dengan metode pembayaran Standar Pembayaran Situs Web PayPal . Sayangnya tidak mungkin untuk menetapkan status pesanan untuk pesanan PayPal berbayar di back-end.

Kita perlu mengatur status pesanan khusus ketika pesanan telah berhasil dibayar (dan tidak sebagian). Tutorial untuk mengubah status pesanan PayPal tampaknya sudah ketinggalan zaman, hack yang salah atau jelek.

Dari apa yang saya kumpulkan:

  • pembaruan pembayaran akan ditangani oleh PayPal IPN.
  • Ada metode yang Mage_Paypal_Model_Ipn::_registerPaymentCapture()bertanggung jawab untuk "Memproses pembayaran yang diselesaikan (baik penuh atau sebagian)".
  • Dalam Mage_Paypal_Model_Ipn::_registerTransaction()permintaan dari PayPal dianalisis dan status pembayaran dibandingkan dengan Mage_Paypal_Model_Info::PAYMENTSTATUS_COMPLETED.

Sejujurnya saya tidak yakin apa yang harus dilakukan dengan informasi ini. Saya dapat menulis ulang Mage_Paypal_Model_Ipn::_registerTransaction()dan menambahkan kode saya:

// paid
case Mage_Paypal_Model_Info::PAYMENTSTATUS_COMPLETED:
    $this->_registerPaymentCapture(true);
    // my code here
    break;

Tentu saja pengamat acara (mis. Untuk salah satu acara atau acara acara negara) akan jauh lebih baik tetapi saya tidak yakin apakah ada cara yang dapat diandalkan 100% untuk menangkap peristiwa satu kali itu ketika pesanan dibayar sepenuhnya melalui PayPal .

Ada ide?

Memperbarui

Kami memilih untuk mengubah aliran status pesanan kami dan tidak perlu mengubah status lagi. Saya akan membiarkan pertanyaan terbuka untuk beberapa waktu jika seseorang ingin menjawabnya.

Matthias Zeis
sumber

Jawaban:

2

Masalah besar adalah, bahkan tidak ada satu peristiwa pun dalam seluruh alur kerja paypal.

Jadi ada dua opsi:

Tulis ulang salah satu model Paypal ini

Seperti yang Anda katakan, cukup tulis ulang modelnya, ubah perilaku dan semuanya berfungsi seperti yang diharapkan - semoga atau ...

Hubungkan ke sales_order_save_before

Kemudian Anda memeriksa jenis pembayaran, yang harus \Mage_Paypal_Model_Standard::$_codedengan:

protected $_code  = Mage_Paypal_Model_Config::METHOD_WPS;

\Mage_Paypal_Model_Config
-> const METHOD_WPS         = 'paypal_standard';

Dan kemudian, ketika status diubah ke yang tidak Anda inginkan, ubah ke yang Anda inginkan.

Fabian Blechschmidt
sumber
Terima kasih Fabian, saya kira kami tidak akan mendapatkan solusi yang lebih baik di Magento 1.x. :-)
Matthias Zeis
0

Saya berakhir dengan solusi lain. Setelah berjuang dengan masalah ini selama beberapa jam, saya menyadari bahwa dalam kasus khusus saya, tidak masalah jika hanya pesanan PayPal yang mendapatkan status tertentu (ini untuk koneksi ERP, yang mencari pesanan dalam status tertentu).

PayPal tidak menetapkan status pesanan. Itu hanya menangkap pembayaran. Magento mengatur status pesanan ke Pemrosesan (lihat Mage_Sales_Model_Order_Payment::registerCaptureNotification()) dan mengatur status ke status default di dalam status itu.

Yang harus saya lakukan adalah mengubah status default dalam status Memproses ke status yang saya butuhkan melalui antarmuka admin ( Sistem » Status Pesanan ).

Semoga ini bisa membantu seseorang!

Mark van der Sanden
sumber