将 PayPal REST API 与 Firebase 函数 (XMLHttpRequests) 结合使用

Nic*_*ang 5 javascript paypal xmlhttprequest paypal-rest-sdk google-cloud-functions

其实我已经解决了这个问题,但是我花了一段时间才做到这一点,所以我决定花点时间写下这篇文章来帮助其他可能遇到同样问题的人。

我开始尝试通过 XMLHttpRequest 对象将 PayPal REST API 与 Firebase Functions 结合使用。根据PayPal 文档,这是我的代码(使用 XMLHttpRequest 对象模拟 cURL 命令):

const XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;

// 1b. Point towards PayPal servers
const paypalOAuthAPI = 'https://api.sandbox.paypal.com/' +
    'v1/oauth2/token/';
const paypalAuthAPI = 'https://api.sandbox.paypal.com/' +
    'v2/payments/authorizations/';

// 1c. Get an access token from the PayPal API
const client = 'your-really-long-client-string-token';
const secret = 'your-really-long-client-secret-string-token';
const basicAuthString = client + ':' + secret;
const basicAuth = Base64.encode(basicAuthString);

const auth = new XMLHttpRequest();

auth.onload = () => {
    console.log('Recieved auth response:', auth);
    console.log('Recieved auth status:', auth.status);
    console.log('Recieved auth responseText:', auth.responseText);
};

auth.open('POST', paypalOAuthAPI, true);
auth.setRequestHeader('Accept', 'application/json');
auth.setRequestHeader('Accept-Language', 'en_US');
auth.setRequestHeader('Authorization', 'Basic ' + basicAuth);
return auth.send('grant_type=client_credentials');
Run Code Online (Sandbox Code Playgroud)

这就是修复(我遗漏了 cURL 添加的几个标头):

auth.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
auth.setRequestHeader('Content-Length', '29');
Run Code Online (Sandbox Code Playgroud)

现在你就拥有了!我希望这对遇到同样问题的人有所帮助。