Related
PayPal button can have drop down menu, like:
Option 1 - $5
Option 2 - $10
Option 3 - $15
When I'm processing payment by IDN, how will I get which option user chosen? I'm not sure if I can do it only based on paid price, since tax/fees/currency could change. Does PayPal somehow pass chosen value?
{"address_city":"San Jose","address_country":"United States","address_country_code":"US","address_name":"John Smith","address_state":"CA","address_status":"confirmed","address_street":"123 any street","address_zip":"95131","business":"seller#paypalsandbox.com","custom":"xyz123","first_name":"John","invoice":"abc1234","item_name":"something","item_number":"AK-1234","last_name":"Smith","mc_currency":"USD","mc_fee":"0.44","mc_gross":"12.34","mc_gross_1":"9.34","notify_version":"2.1","payer_email":"buyer#paypalsandbox.com","payer_id":"TESTBUYERID01","payer_status":"verified","payment_date":"13:07:48 Feb 11, 2020 PST","payment_status":"Pending","payment_type":"instant","quantity":"1","receiver_email":"seller#paypalsandbox.com","receiver_id":"seller#paypalsandbox.com","residence_country":"US","shipping":"3.04","tax":"2.02","test_ipn":"1","txn_id":"561648507","txn_type":"web_accept","verify_sign":"AzMNkTxgBvm9UMEVF6xwI2k3UvAsAl6Uv1oAXhmEDejTPin9MM39F2Td"}
PayPal does. Why don't you create an actual sandbox button with a dropdown menu at https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_button-designer&button_type=buynow and test with it, so you can look at the IPN of an actual such button?
You will need to log in to a sandbox business account at www.sandbox.paypal.com first , if you want the IPN to be sent to the one in that account's profile URL. Alternatively, in the button's advanced variable's you can set notify_url= to your IPN listener.
Because of some reason, I lost a PayPal IPN data log. Does PayPal have an option to resend the ipn data or what can I do? Is it possible at all?
Yes, as long as it's been less than 28 days since the IPN was generated. Log in to your PayPal account; then, depending on what your account layout is, do one of the following:
(Most business accounts in the live environment) Click on Profile >> Profile and settings >> My selling tools. Find Instant payment notifications and click the Update link directly to the right of it. Then, find the link that says IPN History page and click on it.
(Older Website Payments Pro accounts) Click on Profile, then click Instant Payment Notification preferences (under the Selling preferences heading). Find the link that says IPN History page and click on it.
(Most business accounts in the sandbox, some business accounts in the live environment) Go to History >> IPN History.
This will bring you to a page that will let you search for any IPNs that were generated for your account within the last 28 days. Once you find the IPN in question, click the checkbox to the left of it, then click "Resend Selected".
A couple of things to note:
PayPal will only resend the IPNs to the same endpoint they were originally sent to. If you screwed up the URL, too bad.
The IPN may not be sent instantly. The resend request is placed into a queue (like all other IPNs) and processed later. In most cases, you should see the IPN sent within a few seconds to a few minutes.
I've been running a 'Buy Now' button on my website for several months now, and a couple weeks back I observed a purchase that had went through where no IPN was sent to my website from PayPal. Later purchases that day succeeded.
Observations
PayPal had sent me an email notification that the purchase was successful, it also recorded this transaction in my account's payment log. This is normal.
The IPN History had no record of any IPN entries for that transaction; there is no record of PayPal attempting to contact my website to notify it of the IPN. This is not normal.
I have not modified the 'Buy Now' whatsoever in the past six months, and there is only one 'Buy Now' button connected to PayPal. Furthermore, this was the only payment that day that had failed to show up in the IPN History.
I've read (I forget the article) that this isn't all that uncommon (happens a few times a year for popular sellers). I don't know, however, what the solution is. I contacted PayPal support a week ago, and they have not gotten back to me.
I find that if the purchaser uses Credit Card option to pay, and they go through the payment page, the very last page has another button. Some purchasers don't click that very last button. The result is that the payment happens, but the IPN to your notify_url does not trigger.
This problem does not happen if the purchaser uses their paypal account to purchase.
I am looking for a solution to this.
Sometimes IPN can be delayed for various reasons, but it will usually post at some point.
I know just last week (or maybe the week before) the IPN servers were down so there were literally millions of IPN's that were qued up in the system and took a long time for them to get all caught up.
Usually, though, IPN works great and is pretty much real-time.
We are using the "Website Payments Standard" method and now we would like to set a timeout (30 minutes) on our customer payments. In other words the customer must complete the payment registration within 30 minutes, otherwise he must do the process all over again.
My issue is that I canĀ“t find and variables in the API that fit my needs.
Does anyone have a solution for this issue?
see: https://www.x.com/developers/paypal/forums/adaptive-payments-api/cancel-or-timeout-payment
At this time, there is not a way to cancel a paykey and a timeout value cannot be specified. The default timeout value for PayPal is 5 minutes (after being inactive) however a paykey is good for 3 hours. So if the user were to copy the redirect url (before logging in), that url (with paykey) would be good for 3 hours.
So...there is no solution :(
If you switch to Website Payments Pro, you could have more control over this (where final payment is taken on your site, not Paypal's), but there isn't a way with Standard because they leave your site and if they return, it's only after they have paid..
Just to be simple, you cannot have a timeout in Standard mode but you can have it in Pro mode.
I'd like to test paypal subscription IPNs, both the ones received when a subscription is created, and the ones sent later with the next payment (such as monthly if the subscription is $x per month).
However I'd prefer not to wait a month or a day to receive the second IPN. Is there a way to have an IPN sent quicker, such as hourly, using paypal or their sandbox?
On the documentation it says you can only specify years, months, days, and weeks as the subscription period.
PayPal's developer support and documentation is an embarrassment to them. But this particular limitation isn't as debilitating as it seems at first blush.
For testing, define your recurring payment to not have a free trial. When you create a new subscription, your server will receive two IPN messages in quick succession, one to create the subscription and the second to apply a payment. That's basically all you need to test.
If you have a free trial, you'll get basically the same pair of messages, just with a trial period between them. :)
The first message ("create subscription") will look something like this. Note the 'txn_type' -- that's the key bit of information for disambiguating the two messages:
{
"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",
}
The second message is the more interesting one in this case. It will essentially be the exact same message you'll get later when the recurring payment is applied. It looks something like this:
{
"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",
}
So you can do almost all of your testing without waiting a day. By the time you think you've got it nailed down, you'll be receiving lots of subscription IPN messages the next day.
In addition, here is a link to PayPal's documentation for further reference.
It's possible to resend test IPNs, so you should only need to 'buy' one subscription for testing.
Once you've bought one subscription, here's what to do:
Log into your PayPal sandbox seller account.
Select 'Profile' => 'My Selling Preferences'.
Select 'Instant Payment Notification Preferences' from the third column.
Confirm that IPN is enabled and that the URL is correct.
Click the link to the IPN History page.
Scroll down, tick one or more IPNs and click 'Resend'.
After you confirm, the selected IPN(s) will now be resent to the URL you have specified. You can repeat an unlimited number of times with the same IPN(s).
The excellent answer by #dondo covers the rest.
It used to be that the period specified in days would be treated by the test server as minutes so you'd be called every 3 minutes when specified 'd3'. I think they removed this and I'm not aware of any replacement feature to test subscriptions.
Hey I just wanted to throw a shout out to Neil because that is exactly what I was looking for and I don't have enough reputation to reply or upvote..
Believe it or not paypal still doesn't make it easy to do subscription testing with ipn files :/
So, just because I didn't see it on here and the OP kind of sounded like they were under the impression to only expect two possible responses from papal --
if anyone else is having issues, here are some other txn_type that hit my ipn while doing testing:
//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
that last one hit my ipn this morning against every last one of my test subscribers. when I was looking up what that meant, I found that the following are also possible to get:
recurring_payment_profile_created
recurring_payment_profile_cancel
recurring_payment_profile_modify
recurring_payment
recurring_payment_skipped
recurring_payment_failed
I don't know what I did to get that because subscriptions and recurring payments are technically different in PayPal's eyes (subscriptions can possibly never terminate but recurring payments have a cap on the total payments someone can make for any "subscription") but their documentation isn't always straight forward, either, so I dunno. That I'm still working on figuring out as this was a subscription button generated by a sandbox merchant account but whatever.
Happy headaches :)
UPDATE:
I figured out my problem just now - so just so it sounds like I know what I'm doing I'll explain...
I think paypal's subscription sandbox environment is slowly dying. I noticed the other day when I'm messing around in sandbox.paypal.com that I get "Fatal Failure" a lot of times. Refreshing the page seems to correct this most times, although sometimes i have to refresh a few times for the screen to come back.
I am getting the same response from them hitting my IPN file, which explains why every subscription I had got suspended today. Thanks to Neil I was able to resend the IPN response and I captured it into a text file (lol) and then I hit the ipn file reading in the response and throw it back at paypal (its really more complicated than that I'm just making it sound easy).
In any case by refreshing the page I can initiate the paypal handshake more or less on demand and when I do, it's 50/50 - sometimes I get VERIFIED, and sometimes I get Fatal Failure - just like when I try to do much of anything in their sandbox site (Fatal Failure).
Below is an example of part of a failed response I get from them... I get a 200 so I believe hitting their server isn't the issue with connectivity, but I am starting to see a pattern with "Fatal Failure" here and this points to more their end than mine
HTTP/1.1 200 OK
Date: Tue, 29 Sep 2015 02:41:00 GMT
Server: Apache
Fatal Failure
you can also manually create IPN from their sandbox:
https://developer.paypal.com/cgi-bin/devscr?cmd=_ipn-link-session