37

我想测试贝宝订阅 IPN,既是在创建订阅时收到的,也是在下一次付款时发送的(例如,如果订阅是每月 x 美元,则每月发送)。

但是,我不希望等待一个月或一天才能收到第二个 IPN。有没有办法使用贝宝或他们的沙箱更快地发送 IPN,例如每小时发送一次?

在文档中,它说您只能指定年、月、日和周作为订阅期。

4

5 回答 5

57

PayPal 的开发人员支持和文档让他们感到尴尬。但这种特殊的限制并不像乍看起来那样令人衰弱。

对于测试,请将您的定期付款定义为提供免费试用。当您创建新订阅时,您的服务器将快速连续收到两条 IPN 消息,一条用于创建订阅,第二条用于申请付款。这基本上就是您需要测试的全部内容。

如果您有免费试用,您将收到基本相同的消息,只是它们之间有一个试用期。:)

第一条消息(“创建订阅”)看起来像这样。注意“txn_type”——这是消除两条消息歧义的关键信息:

{
  "txn_type"=>"subscr_signup",
  "subscr_id"=>"unique_id",
  "verify_sign"=>"random_gibberish",

  "item_number"=>"your_subscription_name"
  "subscr_date"=>"14:32:23 Feb 15, 2010 PST",
  "btn_id"=>"1111111",
  "item_name"=>"Your Subscription Description",
  "recurring"=>"1",
  "period1"=>"1 M",

  # This example is from a "free trial" IPN notification-- if you don't have a 
  # free trial defined, there will only be 'period1' fields, and they'll
  # have the data that appears here in the 'period3' fields.
  "amount1"=>"0.00",
  "mc_amount1"=>"0.00",
  "period3"=>"1 M",
  "amount3"=>"34.95",
  "mc_amount3"=>"34.95",
  "mc_currency"=>"USD",

  "payer_status"=>"verified",
  "payer_id"=>"payer_unique_id",
  "first_name"=>"Test",
  "last_name"=>"User",
  "payer_email"=>"test_xxxx@example.com",
  "residence_country"=>"US",

  "business"=>"seller_xxxxxxx@example.com",
  "receiver_email"=>"seller_xxxxxxx@example.com",

  "reattempt"=>"1",

  "charset"=>"windows-1252","notify_version"=>"2.9","test_ipn"=>"1",
}

在这种情况下,第二条消息更有趣。这基本上与您稍后在应用定期付款时收到的消息完全相同。它看起来像这样:

{
  "txn_type"=>"subscr_payment",
  "subscr_id"=>"unique_id",
  "verify_sign"=>"random_gibberish",

  "txn_id"=>"payment_unique_id",
  "payment_status"=>"Completed",
  "payment_date"=>"12:45:33 Feb 16, 2010 PST",

  "item_number"=>"your_subscription_name"
  "subscr_date"=>"14:32:23 Feb 15, 2010 PST",
  "custom"=>"data-you-sent-in-a-custom-field",

  "id"=>"1",
  "payment_gross"=>"34.95",
  "mc_currency"=>"USD",
  "payment_type"=>"instant",
  "payment_fee"=>"1.31",
  "payer_status"=>"verified",
  "mc_fee"=>"1.31",
  "mc_gross"=>"34.95",
  "btn_id"=>"1111111",

  "payer_id"=>"payer_unique_id",
  "first_name"=>"Test",
  "last_name"=>"User",
  "payer_email"=>"test_xxxx@example.com",
  "residence_country"=>"US",

  "receiver_id"=>"your_merchant_id",
  "business"=>"seller_xxxxxxx@example.com",
  "receiver_email"=>"seller_xxxxxxx@example.com",

  "protection_eligibility"=>"Ineligible",
  "transaction_subject"=>"",
  "charset"=>"windows-1252","notify_version"=>"2.9","test_ipn"=>"1",
}

因此,您无需等待一天即可完成几乎所有的测试。当您认为您已经确定了它时,您将在第二天收到大量订阅 IPN 消息。

此外,这里是 PayPal 文档的链接,以供进一步参考。

于 2010-02-22T20:59:24.467 回答
8

可以重新发送测试 IPN,因此您只需“购买”一个订阅即可进行测试。购买一份订阅后,请执行以下操作:

  1. 登录您的 PayPal 沙盒卖家账户。
  2. 选择“个人资料”=>“我的销售偏好”。
  3. 从第三列中选择“即时付款通知首选项”。
  4. 确认 IPN 已启用且 URL 正确。
  5. 单击指向IPN 历史记录页面的链接。
  6. 向下滚动,勾选一个或多个 IPN,然后单击“重新发送”。

确认后,所选的 IPN 现在将重新发送到您指定的 URL。您可以使用相同的 IPN 重复无限次。

@dondo 的出色回答涵盖了其余部分。

于 2014-09-25T18:34:06.643 回答
7

过去,以天为单位指定的时间段将被测试服务器视为分钟,因此在指定“d3”时每 3 分钟调用一次。我认为他们删除了这个,我不知道有任何替代功能来测试订阅。

于 2009-09-01T20:26:19.253 回答
6

嘿,我只是想向尼尔大喊一声,因为这正是我想要的,而且我没有足够的声誉来回复或投票......

信不信由你,paypal 仍然无法轻松地使用 ipn 文件进行订阅测试:/

所以,只是因为我没有在这里看到它,而且 OP 听起来像是他们的印象是只期待教皇的两种可能的回应——

如果其他人有问题,这里有一些其他的 txn_type 在测试时碰到了我的 ipn:

//when paypal subscription profile is created for the subscriber
subscr_signup 

//payment made for a given billing cycle
subscr_payment 

//when subscription fails
subscr_failed 

//user cancels subscription - not
subscr_cancel 

//end of term - paypal is "done" with that subscriber 
subscr_eot 

//why I was looking for this thread to begin with lol
recurring_payment_suspended_due_to_max_failed_payment

今天早上,最后一个在我的 ipn 上与我的最后一个测试订阅者对抗。当我查找这意味着什么时,我发现也可以获得以下内容:

recurring_payment_profile_created

recurring_payment_profile_cancel

recurring_payment_profile_modify

recurring_payment

recurring_payment_skipped

recurring_payment_failed

我不知道我做了什么,因为订阅和定期付款在 PayPal 眼中在技术上是不同的(订阅可能永远不会终止,但定期付款对某人可以为任何“订阅”支付的总付款有上限)但是他们的文件也不总是直截了当,所以我不知道。我仍在努力弄清楚,因为这是由沙盒商家帐户生成的订阅按钮,但无论如何。

快乐的头痛:)

更新:我刚刚发现了我的问题 - 所以听起来我知道我在做什么我会解释......

我认为贝宝的订阅沙盒环境正在慢慢消亡。前几天,当我在 sandbox.paypal.com 上乱搞时,我注意到我多次收到“致命失败”。大多数时候刷新页面似乎可以纠正这个问题,尽管有时我必须刷新几次才能恢复屏幕。

他们在访问我的 IPN 文件时得到了相同的响应,这解释了为什么我今天暂停的每个订阅。感谢尼尔,我能够重新发送 IPN 响应并将其捕获到一个文本文件中(大声笑),然后我点击响应中读取的 ipn 文件并将其扔回贝宝(它真的比我更复杂只是让它听起来很容易)。

无论如何,通过刷新页面,我可以根据需要或多或少地启动贝宝握手,当我这样做时,它是 50/50 - 有时我得到验证,有时我得到致命失败 - 就像我尝试做很多事情一样在他们的沙盒站点中(致命故障)。

下面是我从他们那里得到的部分失败响应的示例......我得到了 200,所以我相信击中他们的服务器不是连接问题,但我开始在这里看到“致命故障”的模式和这比我的更能说明他们的结局

HTTP/1.1 200 OK 
Date: Tue, 29 Sep 2015 02:41:00 GMT 
Server: Apache 

Fatal Failure 
于 2015-09-29T02:03:20.907 回答
0

您还可以从他们的沙箱手动创建 IPN:

https://developer.paypal.com/cgi-bin/devscr?cmd=_ipn-link-session

于 2013-02-12T23:45:53.547 回答