Agire su un profilo ricorrente annullata
-
16-10-2019 - |
Domanda
Utilizzando il valore predefinito Magento ricorrente profili, è possibile, tramite Manifestazione / Observer o un lavoro cron per determinare quali profili sono stati annullati o sospesi e prendere qualche azione successiva, come l'aggiornamento di un gruppo di clienti, su quelli scaduti / cambiato profili?
Soluzione
Uso della collezione pagamenti ricorrenti, iterare su di loro ed emettere richieste all'API Paypal per ottenere informazioni sul loro stato:
<?php
$collection = Mage::getModel('sales/recurring_profile')->getCollection();
foreach($collection as $profile){
$profile->fetchUpdate();
if($profile->hasDataChanges()){
//display changes, including status
print_r($profile);
}
}
Questo alla fine si fa strada al modello paypal/api_nvp
che chiama callGetRecurringPaymentsProfileDetails
-. Ottenere informazioni dal API sullo stato del profilo
Se si voleva aggiornare Magento con questi dettagli, in hasDataChanges
blocco if, chiamata save
sul profilo:
$profile->save();
Altri suggerimenti
Come di Magento v1.9.1.0
Copia questo file:
magento/app/code/core/Mage/Payment/Model/Recurring/Profile.php
Per qui:
magento/app/code/local/Mage/Payment/Model/Recurring/Profile.php
Quindi modificare la nuova copia e aggiungere il seguente, dopo le dichiarazioni di costanti (attorno alla riga 52):
/**
* Prefix of model events names
*
* @var string
*/
protected $_eventPrefix = 'recurring_profile';
Ora è possibile osservare l'evento recurring_profile_save_commit_after
, e aggiungere del codice osservatore in questo modo:
/**
* Listen to recurring payment profile changes
* @param Varien_Event_Observer $observer
* @return Custom_Model_Observer
*/
public function processSubscriptionChange($observer)
{
$data = $observer->getEvent()->getObject()->getData();
$customer_id = $data['customer_id'];
$status = $data['state'];
$sku = $data['order_item_info']['sku'];
Mage::log('UPDATED RECURRING PAYMENT PROFILE: '.$customer_id. " - ". $sku ." = ".$status, null, 'events.log', true);
return $this;
}
Magento non implementa l'aggiornamento di stato dei profili sul lato Magento ricorrenti dopo l'aggiornamento di stato (annullare, riattivare o sospendere) sul lato Paypal. squadra Magento potrebbe ha attuarla tramite richieste IPN, ma non ce l'ha fatta - hanno implementato solo la creazione automatica di ordine. Ma lo stato di profilo può essere aggiornato sul lato Magento manualmente con pulsante "Get Update" a pagina profilo nel backend o frontend.
Quando Magento è Aggiornamento dello stato del profilo su Magento-lato si Salva modello profilo con nuovi dati e inviare i seguenti model_save_after
evento perché Mage_Sales_Model_Recurring_Profile
si estende da Mage_Core_Model_Abstract
.
È possibile confrontare $this->origData('status')
con $this->getData('status')
da oggetto in osservatore per la conoscenza su come cambiare dello stato dopo il salvataggio del modello e confrontarlo con $this->getData('status')
Mage_Sales_Model_Recurring_Profile::STATE_SUSPENDED
di conoscenza che lo stato attuale viene 'sospesa'.