Принятие мер по отмену повторяющегося профиля
-
16-10-2019 - |
Вопрос
Используя рецидивирующие профили Magento Magento, возможно ли, что через Event/Observer или задание Cron, чтобы определить, какие профили были отменены или приостановлены, и предпринять некоторые последующие действия, такие как обновление группы клиентов, на этих истекших/измененных профилях?
Решение
Используя повторяющиеся платежные сборы, переверните их и выпустите запросы в API PayPal, чтобы получить информацию о их статусе:
<?php
$collection = Mage::getModel('sales/recurring_profile')->getCollection();
foreach($collection as $profile){
$profile->fetchUpdate();
if($profile->hasDataChanges()){
//display changes, including status
print_r($profile);
}
}
Это в конечном итоге пробивается к paypal/api_nvp
модель, которая вызывает callGetRecurringPaymentsProfileDetails
- Получение деталей от API о состоянии профиля.
Если вы хотите обновить Magento с этими деталями, в hasDataChanges
Если блокировать, позвоните save
в профиле:
$profile->save();
Другие советы
Как Магенто v1.9.1.0
Скопируйте этот файл:
magento/app/code/core/Mage/Payment/Model/Recurring/Profile.php
Сюда:
magento/app/code/local/Mage/Payment/Model/Recurring/Profile.php
Затем отредактируйте новую копию и добавьте следующее после постоянных объявлений (вокруг строки 52):
/**
* Prefix of model events names
*
* @var string
*/
protected $_eventPrefix = 'recurring_profile';
Теперь вы можете наблюдать recurring_profile_save_commit_after
событие и добавьте немного кода наблюдателя как это:
/**
* 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 не внедряет обновление статуса повторяющихся профилей на стороне Magento после обновления статуса (отмена, реактивация или приостановка) на стороне PayPal. Команда Magento могла реализовать его с помощью запросов IPN, но не сделала это - они реализовали только автоматическое создание заказа. Но статус профиля может быть обновлен на стороне Magento вручную с кнопкой «Получить обновление» на странице профиля на бэкэнд или на фронте.
Когда Magento обновляет статус профиля на Magento-Side, он сохраняет модель профиля с новыми данными и отправляет следующее событие model_save_after
потому что Mage_Sales_Model_Recurring_Profile
простирается от Mage_Core_Model_Abstract
.
Вы можете сравнить $this->origData('status')
с $this->getData('status')
от объекта в наблюдателе для знаний об изменении статуса после сохранения модели и сравнения $this->getData('status')
с Mage_Sales_Model_Recurring_Profile::STATE_SUSPENDED
Для знания, что текущий статус «приостановлен».