I'm trying to test PayPal payments. I have created PayPal test accounts, one of them have only 1 USD.
But when I'm trying to buy something with this user - payment is successfull. How do I test case when client have not enough funds ?
From my experience, in sandbox you cannot. I had the same issue, and could not find a solution to it.
If you are using IPN, there is an IPN generator on paypals sandbox where you can generate IPN messages. But that doesn't cover every scenario (for example you cannot generate any recurring payment related IPNs). As far as I know (let me know if I'm wrong) that's the best you can get.
Related
I am trying to test PayPal payments that are authorised at a later date, examples being Pay on Delivery or a Bank Transfer.
I have created a new sandbox account with no credit/debit cards and £0 in the PayPal balance but when I come to make a payment I have to add a card.
I have set up a bank account and agreed the mandate so I must have something set up wrong somewhere because these type of payments happen in LIVE and we have an issue with the IPN message that comes X number of days later once the payment has cleared so I am trying to reproduce this to investigate.
Have you tried using the IPN Tester? (here after you log into your Sandbox account) https://developer.paypal.com/developer/ipnSimulator/ .
All sorts of conditions that you can test your 'listener' process against there.
I try to establish recurring payment from CiviCRM, using Website Payments Pro mode.
The positive testing works perfectly, I see the created payment profile, I get the IPN notifications, it's perfect.
I enabled negative testing at the profile, I tried two methods to trigger the negative case - when the initial payment fails:
PayPal recurring payments negative testing (https://developer.paypal.com/docs/classic/lifecycle/sb_error-conditions/ - with the amount of 106.10 $)
With IPN error code: https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNTesting/ - 31.22
In both cases, the payment completed successfully.
I contacted the paypal support and their best answer was this:
" You can test it with close expiry date. Usually when the expiry date almost come, PayPal will sent notification to the buyer to change credit card. But if the buyers just ignore the notification, it will lead to failed transaction. "
Even if it works, it's unacceptable, that I might have to wait 1 month to see the result. Paypal does not allow to set already expired card for the recurring payment profile.
Do you see an efficient way to test negative outcome? Maybe with IPN simulator? But how can I be sure that Send Paypal Recurring Payments commands with IPN Simulator contains the proper messages that PayPal uses today for my type of account?
Here is how to proceed: forget the sandbox, it is just not mature enough. Use the production/live paypal account, lower the recurring fee to 0.5$, launch the recurring payment from Civicrm, wait for the initial payment, you have the successful case, then ask your bank to set the POS limit to 0$, then the next recurring payment will fail. This is a totally robust way to test negative case. Do not forget to set your IPN first (https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNSetup/). Do you have any better method?
The following method works for recurring payments with Express Checkout, might as well work for Payments Pro:
Login to https://www.sandbox.paypal.com using your buyer's test PayPal account.
Replace the contents of the street address Line-1 of the buyer's test credit card, with CCREJECT-REFUSED.
Execute a typical Express Checkout payment flow against the Sandbox test environment using the same buyer account and with the same credit
card that you just modified.
This method is described on a page in the bottom of a locked filing cabinet stuck in a disused lavatory with a sign on the door saying 'Beware of the Leopard' helpfully titled How To Recover from Funding Failure Error Code 10486 in Express Checkout
I'm looking forward to use PayPal Express Checkout for Digital Goods. I'm using PayPal Business account.
When I was demonstrating in Sandbox, I was getting
We are unable to complete your request at this time. Please try again
later paypal digital goods. We apologize for the inconvenience.
When I verified my PayPal sandbox account it works fine.
Now, for live version I want to use unverified PayPal account, since I'm not ready to be verified yet. I have a plan to be verified in future but not now. But I really need to integrate PayPal payment opt asap. Please let me know if there is any way to accomplish that.
No you must be verified by paypal in order to use a business account. There are many ways to verify and it should be a simple process taking no more then 2 days.
I'm trying to use paypal ipn on my website. I am using sandbox to debug it...
I noticed sometimes I get values on payment_status like pending ...
My question is, do I get a response again from paypal ipn when this payment becomes complete?
Yes you do. That is the reason why you should implement logic in your code to cope for multiple messages relating to the same transaction.
From paypal site: https://cms.paypal.com/es/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_testing_SBOverview
"The PayPal Sandbox is a self-contained environment within which you can prototype and test PayPal features and APIs. The PayPal Sandbox is an almost identical copy of the live PayPal website"
Comparison table in the link above does mention some scenarios like Fraud detection are not enabled in sandbox.
Other than these, it should be safer to assume that features of live are same in sandbox ( like receiving IPN after status change from pending to complete etc).
My website allows user to buy stuffs, and the payments will be splitted between a few people (generally 1/4 people).
So far, the processus I use is to receive the payment into one account, and then use the Paypal Adaptive Payment API to send this received payment to all the people, based on their percentage.
The problem with this solution is that the "reception paypal account" will have a lot of input/output money and will be the Achille's talon of my e-commerce (if this account is suspended, my commerce is down).
My question is quite simple: is there a way to do this automatically?
I found that if the buyer have a Paypal account, then I could directly use the Paypal API to dispatch it's payment (based on his paypal email) to the people, and that is perfect, but the problem is : what happens if the buyer doesn't have a paypal account and want to pay with, say, a credit card?
Thanks for your help!
Ok, the solution is quite simple in fact but need a complete change :
I had to forget about Web checkout and use Paypal API, do a PAY request with a Chained Payment (defining multiple receivers, with one (me) setted at primary: true). In that request, set the ipnNotificationUrl to be notified of the evolution of payments and that's it!
The response from paypal, if correct, will contain a paykey.
Then, you have to redirect the buyer to :
https://www.paypal.com/webscr?cmd=_ap-payment&paykey={PAYKEY_HERE}
or
https://www.sandbox.paypal.com/webscr?cmd=_ap-payment&paykey={PAYKEY_HERE}
Then, to be kept updated, all you have to do is send a request to Paypal containing the paykey to know the paymentdetails !
That's it !
I'll answer my question on that, looking into the Paypal Adaptive Payment API, we can see a dedicated section "Guest Payments".
It seems it's possible, but it requires all the people that will receive the money to have a Business Account or Premium account!
Well I'll add a second answer because it's more complete and slightly different from the first one.
The best way to do it quite simply is to use the Express Checkout API (SetExpressCheckout, GetExpressCheckoutDetails, DoExpressCheckoutPayment).
By using it instead of the basic "checkout" bouton with an IPN behind, it is possible to define more than one recipient that will receive the money : the parallel payment.
It's that easy!
(Now I have to rewrite all my code to implement it, yayh!)