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?

È stato utile?

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();

Fonte: https: // www. x.com/developers/paypal/documentation-tools/api/getrecurringpaymentsprofiledetails-api-operation-nvp

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'.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top