1

I'm having some trouble making a POST request with Nodejs. I can make the request with curl, but when I try and to do the same thing in Nodejs, I just get junk data back. I'm calling a Walmart service.

This is what my curl request looks like. This works fine.

curl -d "grant_type=client_credentials&client_id= WALMART_CLIENT_ID&client_secret= WALMART_CLIENT_SECRET" -X POST https://developer.api.walmart.com/api-proxy/service/identity/oauth/v1/token

This is an example of my code in Nodejs. I'm just getting junk data back from Walmart.

const https = require('https');
const qs = require('querystring');

const data = {
    grant_type: "client_credentials",
    client_id: WALMART_CLIENT_ID,
    client_secret: WALMART_CLIENT_SECRET,
};

const options = {
    hostname: "developer.api.walmart.com", 
    path: "/api-proxy/service/identity/oauth/v1/token", 
    method: "POST"
};

const request = https.request(options, result => {

    var chunks = [];
    result.on('data', data => {
        chunks.push(data);
    });

    result.on('end', () => {
        var body = chunks.join("");
        console.log(body);
    });
    
    request.on('error', error => {
        reject(error);
    });        
});

request.write(qs.stringify(data));
request.end();  

The code works fine if I do a test POST request here. I'm not sure what I'm missing, or what curl is doing to have the Walmart request work.

const options = {
    hostname: "reqbin.com",
    path: "/echo/post/json",
    method: "POST"
};

const data = {};
Berry Blue
  • 15,330
  • 18
  • 62
  • 113

1 Answers1

1

Except Catalog Pricing And Availability Snapshot and Catalog Store Locator API, all other APIs are GET calls not POST Please verify which catalog API you are consuming and which HTTP method you are using

Request to follow below 2 steps to consumer any catalog API

  1. First step, client would use api proxy service OAuth API to get the auth token using wm_consumer.id, client_id, client_secret.
  2. Second step would be to call price and availability deltas API with relevant wm_consumer.id and auth token, i.e using the API token received from OAuth API, a call is made to the price and availability deltas API along with relevant wm_consumer.id Please find the attachements for reference

Regards, Firdos IOSupport

IOSupport
  • 11
  • 1
  • 1
    Thank you for your reply! The documentations says the OAuth Token is a post request. This is the one I'm having trouble. https://walmart.io/docs/opd/oauthtoken – Berry Blue Apr 04 '22 at 11:57
  • 1
    So it appears that these services are sending back compressed data `'content-encoding': 'gzip'`. Is there a way to turn this off or any code examples on how to handle decompressing the data in Nodejs? – Berry Blue Apr 04 '22 at 14:48