Testing Disputes and Refunds in Facebook Payments - facebook

We're very close to launching our app and we want to test the dispute/refund process. We've made several successful test payments however we're hesitant to dispute them. Will our app get flagged? What is the best way to test the dispute/refund process?

They've listed all the documents for it here:
https://developers.facebook.com/docs/howtos/payments/disputesrefunds/
I'm sure if you put in the dispute reason "This is a test for the developer: please ignore" or something or contacted Facebook and asked them they'd find a way. There is though, at present, no public method of testing dispute handling.

While you cannot test the flow end to end, you can test the integration with your backend by manually executing a POST request to /PAYMENT_ID/refunds with an app access token and the amount to be refunded (could be total or partial). There is no need to start a dispute through FB to be able to refund it from your app.
If a dispute justifies a refund, you can award one using the transactions's ID and making a post to the /PAYMENT_ID/refunds with an ~app access token~ and the amount to be refunded [...] The dispute status will automatically be set to resolved with the refunded_in_cash reason.
A payment doesn't necessarily have to be disputed by the consumer for you to be able to refund it. If a user contacts you directly, you can issue a refund for the payment as long as the refundable_amount is greater than the amount you're trying to refund. This functionality is also helpful when you are testing your app.
Source: https://developers.facebook.com/docs/games_payments/fulfillment/disputes

Related

API errors out if I try to look up an order or payment that is completed. How can I get a definitive status of a payment?

I have the following flow with Paypal:
I create a payment with intent "order", and I redirect the user to Paypal's website.
Once the user returns, I execute the payment.
Then, I authorize the order.
At this point, I can still look up the payment or the order and I get expected result.
Finally, I capture the order.
After I capture the order, I can't lookup the payment with /v1/payments/payment/PAY-XYZ or retrieve the order with /v1/payments/orders/O-ABC. I get a 500 Internal Service Error.
Before you tell me to send debug id to Paypal because I stumbled upon their bug: I tried, but they are not responding. I had them on the phone, sent support requests, etc. I got no reply from them, so I have to turn to community.
After capture, I can still lookup a payment by listing payment resources. Since I store paypal's create time, I send a GET request that looks like:
/v1/payments/payment?start_time=2016-06-21T09:08:56Z&end_time=2016-06-21T09:08:58Z
Sure enough, I can get the payment object back, but that looks awfully hacky to me.
The reason why I need the entire payment object is because I need a definitive information about the status of the payment. E.g. I can stumble upon a network error when I send a capture request and I won't get capture ID, so I can't check what's going on. Or I can miss a webhook event (for any reason, e.g. bug in my code), and the payment can become refunded without me knowing, so it would be ver nice to be able to fetch a payment.
I noticed the REST API documentation here https://developer.paypal.com/docs/api/payments/#payment_get says that I should use that endpoint for incomplete payments, but I don't understand why I can't check the order, or why list payment resources works, but fetching a single payment doesn't.
Retrieving the payment used to work though, so I could look up related_resources of transactions of the response (like I can do now with listing all payments by date).
My question is: what is the recommended way to get the definitive information about a payment?
Also, if someone from Paypal is reading this, here are some debug_id's so you can perhaps look into it: 3ffa3007a7561 (result of https://api.sandbox.paypal.com/v1/payments/orders/O-3PA36862ST053572T) or 85576d66784cd (response from https://api.sandbox.paypal.com/v1/payments/payment/PAY-7N237030X85089344K5UQIKI)
This happens on both sandbox and live.
Thanks,
Dejan

Paypal App is "Conditionally Approved".What is the timeline to get it approved?

I have created and submitted a Paypal application ( using the classic API). The application is in a conditionally approved state. Paypal reached out and asked additional questions which I responded back with details. The application does not use the Paypal API to make payments. It only reads transactions related data and shows useful reports and insights for users. The API permissions requested are
1.Obtain transaction specific information.
2.Obtain your paypal account balance
3.Search your transaction specific information.
4.Search your transactions for items that match specific criteria and display the results
I was able to get a live app id and also have the API username, password and API signature. However since our app uses Paypal oauth, the permissions part doesn't work . My guess is this is because the app is conditionally approved. Is this the right assumption? Also what is the typical timeline for an app to get approved? My Paypal account from which I created and submitted the app is a verified account. I have sent messages from within my developer portal to support but I haven't heard anything back.
So far we have been working with a sandbox account. The live application I created is in a different account than the sandbox account. I am not sure if this is an issue.Would be great if someone who has been through the process can confirm.
Unfortunately there is not really a "typical" time frame for app approvals as too many factors go into the approval process. The best thing would be to call in to PayPal to inquire on the status.

Payout in Sandbox

Paypal newbie here. I am using the .net sdk to call PayPal's rest api in the Sandbox environment. I am trying to test a batch payout(Mass Payment).
Issue 1. The sandbox "facilitator" account which came pre-created has a zero balance. I cant seem to find any way to get some money in the account so that i can test payouts. If i create a new business account, i get to specify an opening balance, but when i try to do payouts using this new account, i get back a 403 forbidden response when i try to payout even though i am able to get a token successfully.
Issue 2: Using the facilitator account, i am able to submit a payout request, but its behavior seems to have changed since a couple of day ago. A few days ago, all payout request used to be DECLINED and would show up on the transactions list on the sandbox site. I assumed they were getting DECLINED because the balance was zero. Since yesterday, all payout transactions via the facilitator account stays in PENDING stage and they do not show up on the transaction list. A Payment/Get request for the payout_batch_id always returns back as pending even aftter a day, but theres no sign of those transactions on the sandbox site.
1 - Creating a fresh account and giving it an opening balance is correct, and that should work just fine for you to test MassPay. If you're getting a 403 error that sounds like a problem with your API endpoint or something. Need to see a sample of the API request/response to know more on that.
2 - Again, need to see a sample of the API request/response that you're getting to know more here. My MassPay transactions in the sandbox work just fine. Here's an example. You'll see the request and response data there, showing it was successful. Then when I go look at the separate accounts I see the money as expected.

Should I remember the payment before getting it authorized?

I get it that Paypal SDK (backed by REST API) has three steps:
Create a payment
payment = Payment({...})
payment.create()
return redirect( redirect_url( payment))
The customer pays and authorizes payment from within Paypal
Redirect to our site where we execute payment, thus transferring money
Should I store the created payments at step 1? I would thus capture all payment attempts, whether successful or not. Or can I create a payment, and not remember it until step 3? That is, record only the successful payments (within their respective Invoices). Is there any reliability or security issue or other harm if I do not store it at step 1?
I suspect not being able to roll back failures.
In Paypal terms, they are of sale intent and are meant for payment of invoices for services rendered. Card data do not touch our servers, I am deferring to Paypal on handling it.
I use paypalrestsdk, Paypal's Python SDK.
Previously, it was tricky to get the PaymentId back when PayPal redirects the page back to your server to authorize you, as there was no way to get PaymentId on 3rd step
However, now, the PaymentId is returned back as a part of the URL as shown here in 3rd step :
http://localhost/Server-SDK/PayPal-PHP-SDK/sample/payments/ExecutePayment.php?success=true&paymentId=PAY-62998961VU1587338KR3AXWQ&token=EC-4YC2489096181311L&PayerID=REABK2UGK7PLW
As you can see it has paymentId which is the Id that you need to store.
So, to answer you dont need to store anything till 3rd step.
Additional Note:
However, if you have some complicated logic/service you want to provide. E.g. send them an email reminder(if you have their emailId), to remind them if they abandoned your card, etc. However, there are many ways to do that besides using these steps.

How do I deal with PayPal customers who can't direct return

PayPal states:
Note: If you have turned on Auto
Return and have chosen to turn on
PayPal Account Optional for new users,
a new user will not be automatically
directed back to your website, but
will be given the option to return.
But if some of the customers don't get "Auto Returned", how do I handle them programmatically?
Paypal does not guarantee autoreturn especially when Paypal Account - optional setting is on.
The right way to handle the integration is with Instant Payment Notification (IPN) option. Using IPN Paypal will make POSTS to your page notifying you of payment events. The following link explains the IPN process pretty well.
To summarize, you will write code that will trap posts from Paypal and then make sure to update your billing data accordingly.
Also, IPN messages might be slightly delayed.
Create a script (cron or what) that does check for such payments at paypal perodically (e.g. every hour).
Is this what you mean?
https://www.paypal.com/cgi-bin/webscr?cmd=p/mer/express_return_summary-outside
If not, you may need to be a little more specific with your question. Like - are you using paypal pro? How are your customers checking out? etc. And now that I read the answer below mine, I wonder if you are even talking about the payment process and not something else.