cancel
Showing results for 
Search instead for 
Did you mean: 

Who Me Too'd this topic

Create Payment rejects my request made with transactions and item_list

calirails
Contributor
Contributor

I am using the client-side (Javascript) Paypal integration within a Vue.js app. I was able to successfully create and receive a completed payment following this Paypal component guide here. However, I need to be able to pass the detailed line items so that (1) my customers know exactly what they are tendering payment for at all stages of the checkout and so that (2) my merchant has access to their history of what was purchased with each Paypal transaction. 

 

I am currently getting this error but my data suggests appears to be what is required per my understanding of this Paypal create payment API reference here. The error I get from my Chrome Developer Tools is this:

Uncaught Error: Error: Request to post https://www.sandbox.paypal.com/v1/payments/payment failed with 400 error. Correlation id: 6cdb868c81733, 6cdb868c81733

{
"name": "VALIDATION_ERROR",
"details": [
{
"field": "transactions.amount",
"issue": "Currency amount must be non-negative number, may optionally contain exactly 2 decimal places separated by '.', optional thousands separator ',', limited to 7 digits before the decimal point and currency which is a valid ISO Currency Code"
}
],
"message": "Invalid request - see details",
"information_link": "https://developer.paypal.com/docs/api/payments/#errors",
"debug_id": "6cdb868c81733"
}

at XMLHttpRequest.<anonymous> (https://www.paypalobjects.com/api/checkout.4.0.223.js:14044:39)

 

In terms of code, my Paypal button is configured as follows:

<Paypal env='sandbox'
                                currency='USD'
                                v-bind:client='paypalCredentials'
                                v-bind:button-style='paypalStyle'
                                v-on:payment-cancelled='onPaypalPaymentCancelled'
                                v-on:payment-authorized='onPaypalPaymentAuthorized'
                                v-on:payment-completed='onPaypalPaymentCompleted'
                                v-bind:transactions='paypalTransactionRequest()'>
                            </Paypal>
 
The paypaly button uses the v-bind:transations='' syntax to call a method in my javascript component that returns this JSON payload via JSON.stringify(). I had originally just passed back the object rather than JSON payload. Both methods fail. I noticed the curl example indicates that the price field values are also strings. Is that intended and required?
{
"intent": "sale",
"payer": {
"payment_method": "paypal"
},
"transactions": [
{
"description": "Starwicker Checkout",
"amount": {
"currency": "USD",
"total": 19.94,
"details": {
"subtotal": 15.94,
"tax": 2.01,
"shipping": 1.99
}
},
"item_list": {
"items": [
{
"sku": "DTF060",
"name": "Mars",
"description": "Starwicker Mars",
"quantity": 1,
"price": 15.94,
"tax": 2.01
}
]
}
}
]
}
 
 
Login to Me Too
Who Me Too'd this topic