将 cURL 转换为 Parse.Cloud.httpRequest

Converting cURL to Parse.Cloud.httpRequest

所以我即将完成 Stripe Connect 与 Parse Cloud Code 和 Django 网络应用程序的集成。

目前,Parse 尚未实现 Stripe 模块方法来生成给定访问令牌和客户 ID 的令牌。所以我需要自己做这个。

我运行 Stripe API 提供的cURL 命令给你看一个示例响应,这里是,

curl https://api.stripe.com/v1/tokens \
   -u theaccesstoken: \
   -d customer=customersid

所以我得到了回应,一切都很顺利。但我现在正试图在 Parse.Cloud.httpRequest.

中模仿这种行为

这是我生成命令的尝试:

var retrieveToken = function(url, accessToken, customerId) {
    var promise = new Parse.Promise();
    Parse.Cloud.httpRequest({
        method: 'POST',
        header : {'access_token' : accessToken},
        url: url, 
        body : {'customer':customerId},
        success: function(httpResponse) {
            promise.resolve(httpResponse);
        },
        error: function(httpResponse) {
            promise.reject(httpResponse);
        }
    });
    return promise;
}

回复returns'Creating token with stripe failed. Error: [object Object]'消息来自:

return retrieveToken(tokenURL, accessToken, customerId).then(null, function(error) {
    console.log('Creating token with stripe failed. Error: ' + error);
    return Parse.Promise.error('An error has occurred. Your credit card was not charged.');
});

我的问题通常是生成 httpRequest。有人对如何创建正确的 httpRequest 有任何想法吗?

您可以使用带有 -v 选项的 curl 命令来查明它是如何发出请求的。好像用的是HTTP基本认证。

所以你需要创建一个 Authorization header,使用 base64 编码,在你的代码中是这样的:

header : { "Authorization" : "Basic "+btoa(accessToken+":") }

更典型的形式是 return 由 http 请求创建的承诺。

var retrieveToken = function(url, accessToken, customerId) {
    var params = { method: 'POST',
                   header : {'access_token' : accessToken},
                   url: url,
                   body : {'customer':customerId} };
    // return the promise that is created (and fulfilled) by the httpRequest
    return Parse.Cloud.httpRequest(params);
}

return retrieveToken(tokenURL, accessToken, customerId).then(function(result) {
    console.log('success ' + JSON.stringify(result));
}, function(error) {
    console.log('Creating token with stripe failed. Error: ' + error.message);
    return Parse.Promise.error('An error has occurred. Your credit card was not charged.');
});

可能还有一些其他问题与 Web 服务对格式正确的调用的要求有关,但这至少会进行调用并且 return 对结果的承诺。

所以我解决了这个问题,希望我能在提出这个问题之前回顾一下发布的答案。但是,嘿!它有效:)...

下面是我生成 httpRequest 的方式:

var customerId = currentUser.get('stripeCustomerId');
var accessToken = vendor.get('stripeAccessToken');
var tokenURL = 'https://'+accessToken+':@api.stripe.com/v1/tokens';
return retrieveToken(tokenURL, customerId).then(null, function(error) {
    console.log('Creating token with stripe failed. Error: ' + error);
    return Parse.Promise.error('An error has occurred. Your credit card was not charged.');
});

retrieveToken 方法是:

var retrieveToken = function(url, customerId) {
    var promise = new Parse.Promise();
    Parse.Cloud.httpRequest({
        method: 'POST',
        url: url, 
        header: 'content-type: application/json',
        body: {'customer' : customerId},
        success: function(httpResponse) {
            promise.resolve(httpResponse);
        },
        error: function(error) {
            promise.error(error);
        }
    });
    return promise;
}

我将访问令牌添加为 header,但显然,这种方式有效(将其添加到条带地址之前)。不确定它有多安全,希望得到反馈!那是我最不需要的事情就是因不安全地发送敏感数据或其他原因而被起诉。