How to authorise paypal credit card payment with REST API?

nickornotto1
Contributor
Contributor

I am doing RESTful integration of PayPal in C#. My account is in the UK.

 

I am trying to create a payment with credit card as a payment_method.

 

So far I have the angular config and am successfully creating and get authorization response with state "authorized" in my api Create method:

createdPayment = payment.Create(apiContext);

return createdPayment;

and then:

 

Authorization authorization = payment.transactions[0].related_resources[0].authorization;

the authorization state is authorized.

 

but I'm getting the response in console:

 

ppxo_no_token_passed_to_payment 
Object { timestamp: 1531389390897, windowID: "8b6e6d498f", pageID: "60540ae7ab", prev_corr_ids: "", referer: "localhost:63109", host: "localhost:63109", path: "/order", env: "production", country: "US", lang: "en", … }

(btw not sure it says env: production if I'm using the sandbox?)

 

and:

No value passed to payment

The payment then shows in my sandbox business account as Unclaimed. So how do I claim it?

 

And when I click the confirmation link from payment object (which is eg. https://api.sandbox.paypal.com/v1/payments/payment/PAY-6RD0371739881292ULNDSPRA) I'm getting json:

 

name    "AUTHENTICATION_FAILURE"
message "Authentication failed due to invalid authentication credentials or a missing Authorization header."
links   
0   
href    "https://developer.paypal.com/docs/api/overview/#error"
rel "information_link"

So the payment effectively failed.

 

I went to the provided ref link: https://developer.paypal.com/docs/api/overview/#error and found out that Access token-related issues often cause authentication errors but I'm getting a Bearer token after successfully creating the payment.

 

The question is what I'm supposed to do with the Bearer token if anything? what to return in my payment method in button config? what to pass to config's onAuthorize method if anything? And how to authorise the payment successfully?

 

I tried to look for solution through paypal api and didn't find anything to answer my question so far.

 

My angular config:

paypalConfig = {
    env: 'sandbox',
    client: {
        sandbox: 'my sandbox key'
    },
    commit: true,
    payment: (data: any, actions: any) => {
        // 2. Make a request to your server
        var url = '/paypal/create/';

        return actions.request.post(url)
            .then(function (res: any) {
                    // What HERE?
                    return res.id; // if I return payment id then I get redirected to paypal.com where it obviously says the transation is invalid because I'm doing the process in sandbox not live env
            });
    },
    onAuthorize: (data: any, actions: any) => {
        // WHAT HERE??
        // normally I'd do a request to paypal with paymentid and payerid (https://developer.paypal.com/docs/checkout/how-to/server-integration/#1-set-up-your-client-to-call-your-server) but in case of credit_card payment I don't get those
    }
};

My Create method is based on the CreatePayment provided here - the only difference is that I use payment_method = "credit_card" (instead of paypal) and I return Payment object back to angular instead of redirecting to approval url.

 

Btw onAuthorize method is required by button config. Normally with paypal funds I would send paymentId and payerId back to paypal for authorising the payment but in case of credit card method I get the payment already authorised within payment function. The only problem is it fails.

Login to Me Too
0 REPLIES 0

Haven't Found your Answer?

It happens. Hit the "Login to Ask the community" button to create a question for the PayPal community.