skip to Main Content

i want to send a post request using node-fetch with a body payload encoded in the x-www-form. I tried this code but unfortunately it doesnt work:

paypalSignIn = function(){
var username = process.env.PAYPALID;
var password = process.env.PAYPALSECRET;
var authContent = 'Basic '+base64.encode(username + ":" + password);

fetch('https://api.sandbox.paypal.com/v1/oauth2/token', { method: 'POST',
 headers: {
       'Accept': 'application/json',
       'Accept-Language' :"en_US",
       'Authorization': authContent,
       'Content-Type': 'application/x-www-form-urlencoded'

  },
  body: 'grant_type=client_credentials' })
    .then(res => res.json()) // expecting a json response
    .then(json => console.log(json));

}
I’m not sure if this way is possible but i need to use this standard for die paypal api.
I’m getting statu code 400 with error

grant_type is null

Thx

2

Answers


  1. I don’t know if this is the only error, but at the very least you need a space between the word Basic and the encoded username/password.

    Next time you ask a question, also post what your script returned. I’m guessing it was a 401 error in this case.

    Login or Signup to reply.
  2. I used the PayPal sandbox today, here is how I managed to get my access token and a successful response (and also answering the OP’s question about sending application/x-www-form-urlencoded POST requests with data) =>

    I did it with node-fetch but the plain fetch API should work the same.

    import fetch from "node-fetch";
    
    export interface PayPalBusinessAccessTokenResponseInterface {
        access_token: string;
    }
    
    export interface PayPalClientInterface {
        getBusinessAccessToken: (
            clientId: string, 
            clientSecret: string
        ) => Promise<PayPalBusinessAccessTokenResponseInterface>
    }
    
    const paypalClient: PayPalClientInterface = {
        async getBusinessAccessToken(
            clientId: string, 
            clientSecret: string
        ): Promise<PayPalBusinessAccessTokenResponseInterface> {
            const params = new URLSearchParams();
            params.append("grant_type", "client_credentials");
            const paypalAPICall = await fetch(
                "https://api-m.sandbox.paypal.com/v1/oauth2/token", 
                {
                    method: "POST", 
                    body: params,
                    headers: {
                        "Authorization": `Basic ${Buffer.from(clientId + ":" + clientSecret).toString('base64')}`
                    }
                }
            );
            const paypalAPIRes = await paypalAPICall.json();
            return paypalAPIRes;
        }
    };
    
    export default paypalClient;
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search