Принятие мер по отмену повторяющегося профиля

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

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

Источник: https://www.x.com/developers/paypal/documentation-tools/api/getRecurringPaymentsProfileDetails-api-operation-nvp

Другие советы

Как Магенто 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 Для знания, что текущий статус «приостановлен».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top