Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I test paypal api's from localhost

Tags:

UPDATE 1:

According to this tutorial on Using PayPal's Instant Payment Notification with PHP, PayPal cannot access locally hosted websites unless certain router ports are opened. Is this because the website is about IPN or is this true for all PayPal APIs?

ORIGINAL QUESTION:

On my laptop, I have a LAMP environment setup, when I use the http://localhost to create website before going live.

For a new project, I need to use the PayPal APIs. Will I be able to use the localhost to test the PayPal APIs if I connect my laptop to the internet? Or will I have to upload my website to a LAMP host elsewhere?

You're probably thinking, what a stupid question, just try it to see if it works. I have tried it and it's not working and I wanted to rule out this question before going onto the next step.

like image 493
oshirowanen Avatar asked Apr 01 '11 08:04

oshirowanen


People also ask

How do I test a PayPal transaction?

To begin your test payment, fill out the form with the Personal test email listed in your PayPal Developer account. After you submit the form, you'll be redirected to PayPal's site. Here, you'll need to log in using the same Personal test email you entered in the form as well as the password you created for it earlier.


2 Answers

If you want to debug your IPN code, you'll need to make your server publicly available in some way. This is so PayPal can asynchronously post back to your server at a later time after you've submitted your request. Usually this is pretty quick I think (within 15 seconds) but it could be longer.

One easy way I've found to make a development server available publicly is to use a tunneling solution from this list, like boringproxy. This allows you to continue to develop in your IDE like normal, running your code in debug mode. When PayPal posts back to your endpoint, you can debug it right there in your IDE. These services wrap this up for you, so it's very easy to do without any technical know how.

From my understanding, this is done using a "reverse SSH tunnel" which allows your site to be made public by proxying it through a server that's already publicly available. Note that before you do this, you have to consider that not just PayPal can hit your site once it's made public, but anyone can, so please take that into consideration first.

Also, if you've got your own public facing domain and don't mind playing around in a terminal with SSH, you can supposedly do something like this shell script (copied from this gist)

# Usage: show <local-port> <subdomain> function show() {     DOMAIN=".yourdomain.com"     REMOTE="$2$DOMAIN"     ssh -tR 1080:127.0.0.1:$1 vps "sudo ssh -Nl \$USER -L $REMOTE:80:127.0.0.1:1080 localhost" } 

To get this to work as above, you'd need to put the following in your ~/.ssh/config file:

Host vps     HostName <server address>     User <server username> 

If you don't want to (or can't) do this, then the following will work:

SERVERUSER="<server username>" ssh -l $SERVERUSER -tR 1080:127.0.0.1:$1 <server address> "sudo ssh -Nl \$SERVERUSER -L $REMOTE:80:127.0.0.1:1080 localhost" 
like image 166
Brad Parks Avatar answered Nov 06 '22 04:11

Brad Parks


One simple solution is described in the official developers page of PayPal:

developer.paypal.com - Local IPN Testing

The trick consists on writing a small HTML file with this content:

<form target="_new" method="post" action="https://www.YourDomain.com/Path/YourIPNHandler.php">    <!-- start example variables: -->    <input type="hidden" name="SomePayPalVar" value="SomeValue1"/>  <input type="hidden" name="SomeOtherPPVar" value="SomeValue2"/>        <!-- /end example variables -->    <input type="submit"/>  	  </form>

To get the real results you need to copy all of the IPN variables which PayPal sends. These real variables can be found into the PayPal account, under IPN History:

IPNs History

You need to click on the relative Message ID and then copy the "IPN Message" content (it will be something like mc_gross=27.00&invoice=Test-1&protection_eligibility=Ineligible&...) which must be converted into HTML hidden input fields. For example:

<input type="hidden" name="mc_gross" value="27.00"/>  <input type="hidden" name="invoice" value="Test-1"/>  <input type="hidden" name="protection_eligibility" value="Ineligible"/>    ....

After setting up all of these variables and changing the action URL, you can open the file with a browser and then submit this form.

like image 44
Mauro Mascia Avatar answered Nov 06 '22 05:11

Mauro Mascia