accept payment on vaulted cards - paypal

I have created a paypal business account and I want to vault credit cards to accept payments using paypal v.zero library. I have tested everything using a sandbox account but did not work using my paypal business account. I keep getting the following error
{
"creditCardVerification": null,
"transaction": null,
"subscription": null,
"errors":{
"allDeepValidationErrors":[
{"attribute": "payment_method_token", "code": "TRANSACTION_PAYMENT_METHOD_TOKEN_CARD_TYPE_IS_NOT_ACCEPTED", "message": "Payment instrument type is not accepted by this merchant account."…},
{"attribute": "merchant_account_id", "code": "TRANSACTION_PAYMENT_INSTRUMENT_NOT_SUPPORTED_BY_MERCHANT_ACCOUNT", "message": "Merchant account does not support payment instrument."…}
],
"allValidationErrors":[]
},
"parameters":{
"transaction[type]": "sale",
"transaction[payment_method_token]": "xxxxxx",
"transaction[amount]": "1"
},
"message": "Payment instrument type is not accepted by this merchant account.\nMerchant account does not support payment instrument.",
"target": null,
"success": false
}

error in "transaction[amount]": "1" you have pass currency with amount
use "transaction[amount]": {"value":"1.0", "currency":"USD"}

Related

Why the data of paypal webhook notify, event_type and resource.status do not match

I simplified the data structure received from paypal callback, why event_type is PAYMENT.CAPTURE.COMPLETED but resource.status is PENDING
{
"id": "xxxx",
"event_version": "1.0",
"create_time": "2022-05-30T06:17:22.994Z",
"resource_type": "capture",
"resource_version": "2.0",
"event_type": "PAYMENT.CAPTURE.COMPLETED",
// ...
"resource": {
"id": "xxxx",
"status": "PENDING",
"status_details": {
"reason": "PENDING_REVIEW"
}
// ...
},
}
Captured PayPal payments can be under review for many reasons. If the webhook's details aren't enough for you, examine the payment in www.paypal.com and/or have one of the account owners contact PayPal's support.

How Can I make multiple payments in paypal?

I try to use PayPal payments API to provide parrallel payments to the multiple merchants in the single checkout. I want use this on marketplace and I want to make payments from one buyer to several sellers without intermediate account, How Can I do this?
I considered the payouts (https://developer.paypal.com/docs/payouts/integrate/api-integration/#prerequisites), but I can use this way only on my paypal account
"items": [
{
"recipient_type": "EMAIL",
"amount": {
"value": "9.87",
"currency": "USD"
},
"note": "Thanks for your patronage!",
"sender_item_id": "201403140001",
"receiver": "receiver2#example.com"
},
{
"recipient_type": "EMAIL",
"amount": {
"value": "9.85",
"currency": "USD"
},
"note": "Thanks for your patronage!",
"sender_item_id": "201403140001",
"receiver": "receiver#example.com"
}
I want send post like this, for one customer on my website and several seller.

Paypal subscription with no shipping address

I'm developing a digital subscription model using Paypal's rest API. I'm following https://developer.paypal.com/docs/subscriptions/ as well as referencing the API doc for more details.
I'm having difficulty figuring out how to omit the shipping address requirement entirely. When the customer is on paypal's subscription approval page (on paypal.com), shipping address selection is always shown. I've already tried not entering shipping_address as well as omitting the tax charge_model. Neither of these change anything on the approval page. Companies like Netflix, Hulu, and all other sites I've checked don't require a shipping address when the customer is on the approval page. Any ideas?
Within the subscription payload, just set the shipping option to NO_SHIPPING like so:
"shipping_preference": "NO_SHIPPING"
Here's an example of a complete payload:
subscriptionBodyPayload = {
"plan_id": `${subscriptionId}`,
"start_time": `${startDate}`,
"subscriber": {
"name": {
"given_name": `${first_name}`,
},
"email_address": `${userEmail}`
},
"application_context": {
"brand_name": "SerpWorx",
"locale": "en-US",
"shipping_preference": "NO_SHIPPING",
"user_action": "SUBSCRIBE_NOW",
"payment_method": {
"payer_selected": "PAYPAL",
"payee_preferred": "IMMEDIATE_PAYMENT_REQUIRED"
},
"return_url": "https://example.com/success/",
"cancel_url": "https://example.com/checkout/"
}

Paypal Batch Payout behavior on item error

With the batch payout API for Paypal, if I send a request with multiple items and there is an error with one of them, will the ones without an error still go through? Or will they all fail?
For example, if I sent a payload of:
{
"sender_batch_header": {
"sender_batch_id": "batch_8",
"email_subject": "You have a payment"
},
"items": [
{
"recipient_type": "EMAIL",
"amount": {
"value": 1.0,
"currency": "USD"
},
"receiver": "test_user#example.com",
"note": "Thank you.",
"sender_item_id": "item_1"
},
{
"recipient_type": "EMAIL",
"amount": {
"value": 1.0,
"currency": "USD"
},
"receiver": "bad_email_address",
"note": "Thank you.",
"sender_item_id": "item_1"
}]
}
Will the payout to test_user#example.com go through since the other item has an invalid email address?
Thanks
If you use
"receiver": "bad_email_address",
PayPal will throw out error as "bad_email_address" is not in email format, the whole payout can't go through, no money sent out.
If you use
"receiver": "bad_email_address#email.com",
The email address is not existed, but it's email format, the whole payment will go through, existed PayPal receiver will get the money, this un-existed email transaction will in Unclaimed status. If someone register this email address, then this person will get the money.

Paypal REST AVS/CV2 codes

I'm using PayPal REST API via rest-api-sdk-java and would like to ask whether it is possible to get AVS/CVV match results in the response (or error object).
I did couple of tests (with sandbox and negative testing turned on) according to https://developer.paypal.com/docs/classic/lifecycle/sb_error-conditions/ (parts "Testing AVS errors" and "Testing CVV code"):
Payment request with billing address street "123 AVS_A Street" results in INTERNAL_SERVICE_ERROR:
{
"name": "INTERNAL_SERVICE_ERROR",
"debug_id": "baf56174e98c8",
"message": "An internal service error has occurred",
"information_link": "https://developer.paypal.com/webapps/developer/docs/api/#INTERNAL_SERVICE_ERROR"
}
The same payment request with billing address street "123 AVS_M Street" results in successful sale.
Is INTERNAL_SERVICE_ERROR expected error in such scenario (AVS_A) ? Is there any way how to get "raw AVS code" instead of INTERNAL_SERVICE_ERROR or CREDIT_CARD_REJECTED?
My request payload:
{
"intent": "sale",
"payer": {
"payment_method": "credit_card",
"funding_instruments": [
{
"credit_card": {
"number": "4446283280247004",
"type": "visa",
"expire_month": 11,
"expire_year": 2018,
"cvv2": "888",
"first_name": "Susan",
"last_name": "Wagner",
"billing_address": {
"line1": "123 AVS_A Street",
"line2": "Billing Address Line 2",
"city": "London",
"country_code": "GB",
"postal_code": "W1T 2BU",
"state": "",
"phone": "12345"
}
}
}
]
},
"transactions": [
{
"amount": {
"currency": "GBP",
"total": "3.55",
"details": {
"shipping": "0.00",
"subtotal": "3.55",
"tax": "0.00"
}
},
"description": "T-Shirt XYZ"
}
]
}
And one more question: Is it possible to use advanced Fraud Management Filters on Sandbox environment? I'm using Pro test account but still can't use the filters (nothing happens when I click "upgrade now" button):
https://www.sandbox.paypal.com/uk/cgi-bin/webscr?cmd=_rc-manage
looking at the debug id, the test did work - sort of -
Internal Sandbox API Error is 10555 - Filter Decline
--> https://developer.paypal.com/webapps/developer/docs/classic/api/errorcodes/
The transaction was declined because of a merchant risk filter for AVS. Specifically, the merchant has set the filter to decline transactions when the AVS returns a partial match.
So you've likely enabled the AVS fraud management filter on the sandbox account.
Obviously, there should be a proper error message and not just an internal service error, but it looks like the error hasn't been mapped yet.
Will follow up with the PP Devs to report & fix it ;)
As for AVS / CVV response within REST - there doesn't seem to be a way to retrieve the AVS/CVV response of the issuing bank just yet.