Paypal 定期付款
Posted
技术标签:
【中文标题】Paypal 定期付款【英文标题】:Paypal recurring payments lionite 【发布时间】:2013-02-15 02:30:52 【问题描述】:我正在使用 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 个月')); //下个月开始
$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);
之后,我收到了 txn_type 为 recurring_payment_profile_created 但自定义变量丢失的 IPN。有什么想法吗?我应该如何跟踪我的哪些用户注册了订阅?
编辑: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
)
谢谢
【问题讨论】:
仅供参考,您到 Lionlite 页面的链接无效。如果我从 SO 打开它,它会将我返回到 SO,如果我在新选项卡中打开它,它会将我返回到他们的首页。 【参考方案1】:您的代码似乎是正确的。我也在我的系统上使用定期付款对此进行了测试,并且自定义变量似乎没有在 IPN 中被发回。我建议在 www.paypal.com/mts 上使用 PayPal MTS 开一张票,以解决可能存在的错误。这样,一旦问题解决,您也可以通过开票收到通知。
【讨论】:
我讨厌贝宝。我真的很讨厌它。谢谢你的提示。希望我只是错过了一些东西.. 如果我使用订阅页面上的 profileID 作为令牌绑定付款给用户怎么办?这会导致问题吗? 您可以使用的其他变量可能未被使用。我可以想到“DESC”或“BUSINESS”。您可以在其中一个变量中传递您的信息,然后在将其返回到您的站点后相应地使用它。 但是那不会对用户可见吗?我认为它一定是我需要使用的 profileID 为了解决这个问题,我只在用户被重定向回我的成功页面时存储配置文件 ID,然后在 IPN 呼叫上匹配它。为帮助喝彩。当我有更多时间时,将不得不向贝宝提交问题。以上是关于Paypal 定期付款的主要内容,如果未能解决你的问题,请参考以下文章
Paypal:通过 Express Checkout 定期付款,无需用户拥有 paypal 帐户