Paypal Sandbox IPN always fails - grails

I'm developing a grails app using http://grails.org/plugin/paypal plugin.
I've followed all instructions, configured my app to work with a dyndns (no-ip).
I can access my app from outside my network.
All the payment is correct, if I click on the "back to test's store" link it returns to my site.
The problem is that no IPN are sent to my IPN handler.
In the IPN history I can see all transactions in error state, but no http response code is shown.
It retries 8 times each message.
Notification URL is correct.
What else can I try?

I answer myself,
looks like paypal does not send IPN posts to URL with ports other than 80 or 443

Take a look at the troubleshooting steps I posted here. These may help.

Related

Redirect command requests to another service

I have a not yet published app change in Slack which modifies the command service endpoint to another domain.
I tested that, it is possible to send back a 307 with a redirect URL and Slack API will follow that redirect.
I would like to be sure that redirect to another domain is also possible for live apps. So what works for an in-development app it will work for a live app.
Could any of you confirm that or send me a link to the documentation? I searched the documentation already, but did not find any entry about it.
Thanks!
We contacted Slack on their partner channel and they verified that:
"Our docs explicitly say we respect 301 and 302."
But we made a test and it accepts 307 as well.
(I can't share a link to their response as it was written inside Slack slack-platform workspace)

PayPal not redirecting to the IPN notify_url in an MVC system

I am using IPN to receive payment notifications in an MVC system I'm working on. After verifying certain bits and pieces, I proceed to update the database with the "subscription" and "payment details" for the particular user. I am using "notify_url" to redirect back to the system and initiate the PaymentNotification method. This was working correctly up until a few days ago, when it all of a sudden just stopped working. First I thought that the database was not being updated due to an issue within the method itself, but then I noticed that the PaymentNotification (IPN) method was not being hit at all.
Some notes:
A test from the paypal developer's page seemed to redirect correctly
into the IPN. Calling the link directly from the browser hits the method also, so it seems to be externally accessible.
I am using NGROK to make the localhost look like it's
running from a live domain. It does not work with either HTTP or
HTTPS. I am also testing on a hosted environment, with sandbox configuration, within an HTTP domain, and it is not working either.
I am debugging the hidden values in the validation form, right
before redirecting to Paypal and all the values, including:
notify_url are correctly populated. This was working but suddenly
stopped.
Some questions:
What could be the reason? Why would it work all throughout the development
stages but suddenly stop working? Of course, I can't afford to have
this stop working on the live environment!
Is this perhaps an issue
with the sandbox environment? Is IPN safe for Live systems? Can someone talk from experience?
Or
is there perhaps a better option I can look into?
I read this article, which
discusses verifying/activating the email address of the sandbox
account. Can anyone indicate what that might be? And whether the same
email addresses being used could have been working but suddenly
stopped? Do they need to be real emails? As the ones that I was using (and were also working) are not tied to real paypal accounts.
As suggested in the comment, even just for testing Paypal in Sandbox mode, since September 2016, TLS 1.2 is required for PayPal IPN processing. In my case, changing the Sandbox testing business and personal emails to real / valid emails, solved my issue with regards to testing locally using NGROK as a secure tunnel to Local host. More so, this should not be a problem when I actually use the HTTPS certificate.

PayPal Advanced Validation

I have been trying to validate that when the silent post comes into my application it is validated that it is indeed from Paypal. I have tried both in the following link.
PayPal Payments Advanced -- Validate Parameters Sent to Confirm and Cancel Pages
Neither seems to work. When i try to pass a token it just does not send. If I do it manually it works but it seems the regular params sent with Paypal "override it".
I tried using NVP/SOAP and Rest API and neither of them work either.
I JUST need a simple way that will WORK to know that the silent post I am receiving is Paypal and a valid transaction 100%. A secure token would seem to work great but no cigar so far.
Application is in Ruby on Rails.
If this is still not working for you, you might want to check on the URL from which you receive the silent post
URL: notify.paypal.com (Payflow Silent Post)
IP address: 173.0.81.65
Here is a pro module documentation from broadleafcommerce.com
http://www.broadleafcommerce.com/docs/paypal-payflowpro/current/paypal-payflow-pro-environment-setup
Found something similar here
How do you verify that the notification to the Silent Post URL is indeed from PayPal Payflow and not a hacker?

rails paypal checkout page not showing

I have to integrate simple paypal into my app.
I am using following url as tutorial.
paypal tutorial link
before directing to paypal page I print its url in logs, which is
https://www.sandbox.paypal.com/cgi-bin/webscr?amount=12&cmd=_xclick&invoice=19&item_name=testing&item_number=19&personal=omairr.azam-facilitator%40gmail.com&quantity=1&return=http%3A%2F%2Four_ngrok_url%23%3CUser%3A0x0000010a4e1528%3E&upload=1
But when I am redirected to paypal sandbox, the url that i see in my browser is
https://www.paypal.com/myaccount/home
and I cannot see checkout form that will take credentials from buyer and show details about transaction.
NOTE: I am on localhost at this stage and have not deployed my app
Please help me in this, Thanks.
I think this is due to your return url, which may be improperly set. It seems to be appending a User instance to your ngrok url. Changing the url to something else takes me to: https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_flow&SESSION=GcW-vpSKb2wALSTAyNuU29ltNqKyVjVwIuNy3mqgKDM_Df2abfo9PWP6KXm&dispatch=50a222a57771920b6a3d7b606239e4d529b525e0b7e69bf0224adecfb0124e9b61f737ba21b08198163eee001d8a5bd337af8e5197b2a388 where I was informed that there's a problem with your email

Grails PayPal plugin response notification

I have been trying to integrate PayPal payment with a test application I am developing. If successful, I am thinking of leveraging this on my other projects.
So far, I have been able to add the plugin, configure it for Test environment and able to complete a transaction end to end. However, I have a small issue that I want some help or clarification about. Please follow the series of images below for more details:
Button on merchant application (grails application)
Payment page on PayPal test site
Here is the paypal confirmation page for transaction:
After making the payment above, I got a successful message on paypal test site. But when I check the logs and database, there is no notification sent to the grails application at this stage. The payment transaction is still in PENDING state:
Now, when I click on the "Return to merchant" link on the paypal confirmation page, then I redirected to my grails application with a SUCCESS message:
So, the PayPal "SUCCESS" response is sent to the grails/merchant application only after the user hits that link "Return to merchant site". In real life, the users might not want to return to the merchant site everytime. Seeing the confirmation message on PayPal site, they might assume that the transaction is done and may be PayPal does the payment too. But, how do we let the merchant site i.e the grails application know that the PayPal has already shown the user a confirmation message? So that, the user doesn't have to return to merchant site after seeing the Successful message?
UPDATE:
I have tried the IPN simulator upon your advice. I am not quite sure and able to understand how I can send an IPN message to my localhost application. When I tried giving my localhost or 127.0.0.1 on the IPN simulator configuration on my sandbox account, it throws error saying unable to reach the server. I am sure many developers must have tried this using local development machine, but unable to find any resource which gives the steps to use IPN simulator or IPN sandbox response for a localhost development instancE.
You cannot rely on PDT
you have to use IPN
where PayPal send a notification to a page on your website where you have to authenticate, verify several possible issues and save the transaction details
See here fore more info
IPN
Not sure if it written at that link, but you have also to enable such function from your Paypal account indicating the target page on your website.

Resources