Cross Convert Currency in Sandbox PayPal out-of-date - paypal

I use Sandbox PayPal now in order to test payments.
So, I am trying to use ConvertCurrencyRequest and it returns very-very old data.
Is it a bug of sandbox?
curl -H "X-PAYPAL-SECURITY-USERID: <MYDATA>" -H "X-PAYPAL-SECURITY-PASSWORD: <MYDATA>" -H "X-PAYPAL-SECURITY-SIGNATURE: <MYDATA>" -H "X-PAYPAL-APPLICATION-ID: APP-80W284485P519543T" -H "X-PAYPAL-SANDBOX-EMAIL-ADDRESS: <MYDATA>" -H "X-PAYPAL-REQUEST-DATA-FORMAT: JSON" -H "X-PAYPAL-RESPONSE-DATA-FORMAT: JSON" -X POST -d '{"requestEnvelope" : {"detailLevel" : "ReturnAll","errorLanguage": "en_US"},"baseAmountList": [{ "currency" : { "code" : "USD", "amount" : "1" } }],"convertToCurrencyList": [{ "currencyCode" : "RUB" }]}' https://svcs.sandbox.paypal.com/AdaptivePayments/ConvertCurrency
This url returns
{"responseEnvelope":...,"estimatedAmountTable":{"currencyConversionList":[{"baseAmount":{"code":"USD","amount":"1"},"currencyList":{"currency":[{"code":"RUB","amount":"31.63"}]}}]}}
but,russian ruble costs about 50-66 RUB per USD at least 10 monthes.And more than 40 from Sept2014.Is this normal for Sandbox PayPal?

Yes, the database of currencies was frozen when created to reduce the amount of network resources required for the sandbox requirements. Sandbox environment is designed to test the implementation. After you see that the implementation works, switch to live credentials and you will get up-to-date information.

Related

PayPal Onboard sellers before payment

I am trying to create an application that enables sellers to create a PayPal account which then my platform will use their PayPal details to payout them whenever a pucharse is made via the application. I checked the documentation for creating a seller onboarding sign-up link but I couldn't able to figure out how to use this in the NodeJS environment.
curl -v -X POST https://api-m.sandbox.paypal.com/v2/customer/partner-referrals \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <Access-Token>" \
-d '{
"tracking_id": "<Tracking-ID>",
"operations": [
{
"operation": "API_INTEGRATION",
"api_integration_preference": {
"rest_api_integration": {
"integration_method": "PAYPAL",
"integration_type": "THIRD_PARTY",
"third_party_details": {
"features": [
"PAYMENT",
"REFUND"
]
}
}
}
}
],
"products": [
"EXPRESS_CHECKOUT"
],
"legal_consents": [
{
"type": "SHARE_DATA_CONSENT",
"granted": true
}
]
}'
There is no SDK for such APIs, but you could use the code (for other APIs) in Checkout-NodeJS-SDK as a starting point and use it to create your own HTTPS calls for this API you want to integrate, based on that curl sample.
Alternatively, use one of the many HTTPS request libraries available for NodeJS, such as axios or got, to implement the request of that curl sample. You will need to implement an Oauth2 request first to get an Access Token with the clientid/secret.

PayPal Subscription Revise Error UNPROCESSABLE_ENTITY

To revise a paypal subscription I use the following curl translated to php:
curl -v -X POST https://api-m.sandbox.paypal.com/v1/billing/subscriptions/I-BW452GLLEP1G/revise
-H "Content-Type: application/json" \
-H "Authorization: Bearer <Access-Token>" \
-d '{
"plan_id": "P-5ML4271244454362WXNWU5NQ"
}'
I replaced the plan-id and subscription id with variables. But I receive the following error:
{
"name":"UNPROCESSABLE_ENTITY",
"message":"The requested action could not be performed, semantically incorrect, or failed business validation.",
"debug_id":"1620f0049dfd6",
"details":[
{
"issue":"PAYMENT_IN_PROGRESS",
"description":"Payment for the subscription is in progress."
}
],
"links":[
{
"href":"https://developer.paypal.com/docs/api/v1/billing/subscriptions#UNPROCESSABLE_ENTITY",
"rel":"information_link",
"method":"GET"
}
]
}
I can't explain why this isn't working.
Could this be it?
The error "PAYMENT_IN_PROGRESS" is returned if you attempt to revise the billing details for a subscription within 24 hours of the next scheduled billing.
As the profile you referenced "_____________" has a daily billing cycle, you won't be able to revise the billing details for this subscription. Instead, you would need to cancel the existing subscription and create a new one with the relevant billing details which you wish to use.

PayPal Refund API Operation getting error 520002

I am trying to write in bash the code the partial refund paypal transaction. This is the guide I am following https://developer.paypal.com/docs/classic/api/adaptive-payments/Refund_API_Operation/ but I'm receiving a 520002 error message. In previous request I've seen that it's needed to specify receiverList.receiver(0).email but it's still not working.
This is what my request look like:
curl -s --insecure
-H "X-PAYPAL-SECURITY-USERID: api_username"
-H "X-PAYPAL-SECURITY-PASSWORD: api_password"
-H "X-PAYPAL-SECURITY-SIGNATURE: api_signature"
-H "X-PAYPAL-REQUEST-DATA-FORMAT: NV"
-H "X-PAYPAL-RESPONSE-DATA-FORMAT: NV"
-H "X-PAYPAL-APPLICATION-ID: your_app_id "
https://svcs.sandbox.paypal.com/AdaptivePayments/Refund -d
"requestEnvelope.errorLanguage=en_US
&requestEnvelope.detailLevel=ReturnAll
&transactionId=xxxxxxxxxx
&receiverList.receiver(0).email=xxxxxxxx
&currencyCode=EUR
&receiverList.receiver(0).amount=44.00"
Anybody knows how to solve it?
I think you're using the wrong API for this.
Your endpoint goes to the Adaptive Payments API which is used for very specific business case and is very complicated to implement.
If you want to make a simple refund from a payment made with PayPal Express Checkout or PayPal Standard you should use the RefundTransaction API call.
https://developer.paypal.com/docs/classic/express-checkout/ht_basicRefund-curl-etc/
You CURL call should be like this:
Endpoint URL: https://api-3t.sandbox.paypal.com/nvp
HTTP method: POST
POST data:
USER=merchant_user_name
&PWD=merchant_password
&SIGNATURE=merchant_signature
&METHOD=RefundTransaction
&VERSION=94
&TRANSACTIONID=transaction_ID #ID of the transaction for which the refund is made
&REFUNDTYPE=Full #Specifies a full refund; a partial refund requires more input fields

PayPal Invoicing API error ID 580001

The example call in the PayPal Invoicing API documentation is returning an error?
Request
curl -s --insecure -H "X-PAYPAL-SECURITY-USERID: caller_1312486258_biz_api1.gmail.com" -H "X-PAYPAL-SECURITY-PASSWORD: 1312486294" -H "X-PAYPAL-SECURITY-SIGNATURE: AbtI7HV1xB428VygBUcIhARzxch4AL65.T18CTeylixNNxDZUu0iO87e" -H "X-PAYPAL-REQUEST-DATA-FORMAT: JSON" -H "X-PAYPAL-RESPONSE-DATA-FORMAT: JSON" -H "X-PAYPAL-APPLICATION-ID:APP-80W284485P519543T" https://svcs.sandbox.paypal.com/Invoice/CreateAndSendInvoice -d {\"requestEnvelope\":{\"errorLanguage\":\"en_US\"},\"invoice\":{\"merchantEmail\":\"caller_1335455804_biz#x.com\",\"payerEmail\":\"sender_1335455648_per#x.com\",\"currencyCode\":\"USD\",\"paymentTerms\":\"DueOnReceipt\",\"itemList\":{\"item\":[{\"name\":\"BananaPlant\",\"quantity\":\"1\",\"unitPrice\":\"38.95\"},{\"name\":\"PeachTree\",\"quantity\":\"2\",\"unitPrice\":\"14.95\"}]}}}
Response
{"responseEnvelope":{"timestamp":"2013-08-22T23:58:47.340-07:00","ack":"Failure","correlationId":"4838886d6636b","build":"7236486"},"error":[{"errorId":"580001","domain":"PLATFORM","subdomain":"Application","severity":"Error","category":"Application","message":"Invalid request: {0}"}]}
Try wrapping the payload in the -d switch within "". Running the curl snippet with the -v switch as-is will show you that the payload gets truncated and hence the "Invalid request" error.
Also, you will see a "Invalid token" error when the merchantEmail in the request is not the same as the API caller. If you need to generate invoices on behalf of a third party (in which case the API caller and merchantEmail are naturally different), you must obtain third party permissions and attach a X-PAYPAL-AUTHORIZATION header to your request.

INTERNAL_SERVICE_ERROR PayPal REST API https://api.paypal.com/v1/payments/payment

Using "LIVE" credentials, I'm getting an INTERNAL_SERVICE_ERROR accepting a credit card payment, using this resource: https://api.paypal.com/v1/payments/payment. Same error happens on the web and via cURL. NOTE: This does not happen in SANDBOX only LIVE. See steps to recreate below. For this post, I had to add a space in "http s" as I cannot submit more than 2 links.
Get an OAuth token (substitute username/password in LIVE_USER_ID:LIVE_PASSWORD
curl http s://api.paypal.com/v1/oauth2/token -H "Accept: application/json" -H "Accept-Language: en_US" -u "LIVE_USER_ID:LIVE_PASSWORD" -d "grant_type=client_credentials"
No problem getting a token using LIVE credentials. Add the token to the following request to the resource:
curl -v http s://api.paypal.com/v1/payments/payment \
-H "Content-Type:application/json" \
-H "Authorization:Bearer YK.GUHkGhBAQgGgGkilvHoL7DdE9SVq.IDl-mRwAZeM" \
-d '{
"intent": "sale",
"payer": {
"payment_method": "credit_card",
"funding_instruments": [
{
"credit_card": {
"number": "5500005555555559",
"type": "mastercard",
"expire_month": 12,
"expire_year": 2018,
"cvv2": 111,
"first_name": "Joe",
"last_name": "Shopper"
}
}
]
},
"transactions": [
{
"amount": {
"total": "0.01",
"currency": "USD"
},
"description": "This is the payment transaction description."
}
]
}'
"name":"INTERNAL_SERVICE_ERROR","message":"An internal service error has occurred","information_link":"http_s://developer.paypal.com/webapps/developer/docs/api/#INTERNAL_SERVICE_ERROR","debug_id":"525bfb7a6382a"}johnruffin:~ johnruffin$
Thoughts???
Thanks for bringing this issue to our attention. I've opened an internal bug with the payments rest api development team. From the debug id provided I see that the credit card is being refused. In the future the error message from this scenario will fall under this error condition: https://developer.paypal.com/webapps/developer/docs/api/#CREDIT_CARD_REFUSED
Please try a another/valid credit card to verify.
Looks like the URL is not well formed. It's https and not http s as provided above.
Tried the calls now, it works fine. Please check and confirm.