Рекуррентные платежи PayPal

Я использую класс Lionite PayPal для обработки регулярных платежей PayPal, но не кажется, получает пользовательскую переменную, которую я установил, через IPN.

Вот как я прохожу экспресс-кассу:

$item = array(
    'subscription_description' => 'Monthly ' . $plan['title'] . ' subscription',
    'cost' => $plan['price'],
);
$options = array(
    'return' => $this->base . 'action/subscription/', // Confirmation URL
    'cancel' => $this->base . 'action/cancel/', // Cancellation URL
    'cost' => $plan['price'],
    'item_cost' => $plan['price'],
    'custom' => 999 //config('user:id')
);

$result = $this->paypal->getCheckoutUrl($options, $item);

if (is_string($result)) {
    //Redirection URL generated successfully! redirecting to Paypal
    header('Location: ' . $result);
}

если они завершат покупку, они будут перенаправлены на мою страницу подписки, где я создаю профиль подписки: $date = date('c', strtotime('+1 month')); //начнем в следующем месяце

$profile = array(
    'period' => 'Month', // Subscription Period
    'frequency' => 1, // Frequency x period equals 1 billing cycle (up to 1 year)
    'total_cycles' => 12, // End profile after 1 year (12 cycles)
    // Regular subscription amount
    'start_date' => $date, // Profile start date
    'currency' => 'USD' // Payment currency
);

//select user info
$user = $this->Db->selectOne(array('id' => config('user:id')), 'users');

//get user's plan
$plan = $this->Db->selectOne(array('id' => $user['plan']), 'plans');

$profile['cost'] = $profile['init_amount'] = $plan['price'];
$profile['desc'] = 'Monthly ' . $plan['title'] . ' subscription';

$profileId = $this->paypal->createRecurringProfile($profile);

После этого я получаю IPN с типом txn_type recurring_payment_profile_created, но пользовательская переменная отсутствует. Есть идеи? Как я должен отслеживать, кто из моих пользователей подписался на подписку?

Изменить: сообщение IPN

Array
(
    [payment_cycle] => Monthly
    [txn_type] => recurring_payment_profile_created
    [last_name] => Bernotas
    [initial_payment_status] => Completed
    [next_payment_date] => 03:00:00 Mar 28, 2013 PDT
    [residence_country] => GB
    [initial_payment_amount] => 0.01
    [currency_code] => USD
    [time_created] => 08:52:45 Feb 28, 2013 PST
    [verify_sign] => xxxx
    [period_type] =>  Regular
    [payer_status] => verified
    [tax] => 0.00
    [payer_email] => xxxx
    [first_name] => Ignas
    [receiver_email] => xxxx
    [payer_id] => xxxx
    [product_type] => 1
    [initial_payment_txn_id] => xxxx
    [shipping] => 0.00
    [amount_per_cycle] => 0.01
    [profile_status] => Active
    [charset] => windows-1252
    [notify_version] => 3.7
    [amount] => 0.01
    [outstanding_balance] => 0.00
    [recurring_payment_id] => xxxxx
    [product_name] => Monthly Basic subscription
    [ipn_track_id] => xxx
)

Спасибо


person Ignas    schedule 28.02.2013    source источник
comment
К вашему сведению, ваша ссылка на страницу Lionlite не работает. Если я открою его из SO, он вернет меня в SO, а если я открою его в новой вкладке, он вернет меня на их главную страницу.   -  person h2ooooooo    schedule 28.02.2013


Ответы (1)


Код, который у вас есть, кажется правильным. Я также проверил это с регулярными платежами в своей системе, и пользовательская переменная, похоже, не отправляется обратно в IPN. Я бы предложил открыть тикет с PayPal MTS на www.paypal.com/mts для возможной ошибки с этим. Таким образом, открыв тикет, вы также получите уведомление, как только проблема будет решена.

person PP_MTS_Chad    schedule 28.02.2013
comment
Я ненавижу пейпал. Я действительно ненавижу это .. Спасибо за совет. Надеялся, что я просто что-то упустил.. - person Ignas; 28.02.2013
comment
Что, если бы я использовал идентификатор профиля, полученный на странице подписки, в качестве токена для привязки платежей пользователям? Это вызовет проблемы? - person Ignas; 01.03.2013
comment
Есть и другие переменные, которые вы можете использовать, но которые могут не использоваться. Я могу сразу подумать о DESC или BUSINESS. Вы можете передать свою информацию в одну из этих переменных, а затем использовать ее соответствующим образом, как только она будет возвращена на ваш сайт. - person PP_MTS_Chad; 01.03.2013
comment
Но разве это не будет видно пользователю? Я думаю, что это должен быть идентификатор профиля, который мне нужно использовать - person Ignas; 01.03.2013
comment
Чтобы решить эту проблему, я просто сохраняю идентификатор профиля, когда пользователи перенаправляются обратно на мою страницу успеха, а затем при вызовах IPN я сопоставляю его. Спасибо за помощь. Придется отправить вопрос в PayPal, когда у меня будет больше времени. - person Ignas; 01.03.2013