Javascript 将cURL转换为Parse.Cloud.httpRequest

Javascript 将cURL转换为Parse.Cloud.httpRequest,javascript,parse-platform,parse-cloud-code,Javascript,Parse Platform,Parse Cloud Code,因此,我即将完成Stripe Connect与解析云代码和Django web应用程序的集成 目前,Parse还没有实现Stripe模块方法来生成给定访问令牌和客户id的令牌。所以我需要自己做这件事 我运行StripeAPI提供的cURL命令来查看示例响应,如下所示 curl https://api.stripe.com/v1/tokens \ -u theaccesstoken: \ -d customer=customersid 所以我得到了回应,一切都很顺利。但我现在正试图在

因此,我即将完成Stripe Connect与解析云代码和Django web应用程序的集成

目前,Parse还没有实现Stripe模块方法来生成给定访问令牌和客户id的令牌。所以我需要自己做这件事

我运行StripeAPI提供的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;
}
响应返回“创建带条带的令牌失败”。错误:[对象]'消息来自:

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吗?

您可以使用curl命令和-v选项来确定它是如何发送请求的。它似乎使用HTTP基本身份验证

因此,您需要创建一个带有base64编码的授权标头,类似于代码中的以下内容:

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

更典型的形式是返回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服务对格式良好的调用的要求有关,但这至少会发出调用并返回对结果的承诺。

因此,我解决了这个问题,并希望在提出此问题之前能够回顾发布的答案。但是嘿!它是有效的:)

下面是我如何生成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;
}

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

不幸的是,在解析云代码时不能使用
btoa
——这正是我来这里要解决的问题:)