如何将 Stripe 客户 ID 发送到 Parse

How to send Stripe customer ID to Parse

我已经使用这个函数通过 Parse 创建了 Stripe 客户:

Parse.Cloud.define("customer", function(request, response){
stripe.customers.create({
    email: request.params.useremail
}, function(err, customer) {
    if(err){
            console.log(err);
            response.error(err);
    } 
    else{
            console.log(customer);
            response.success(customer);
    });
});

但是,我希望能够将创建的客户 ID 发送到当前用户数据下的 Parse 作为 "cusToken",与 "email"、[=17= 的方式相同] 和诸如此类的东西存储在用户 class.

有两个假设可以简化此代码,第一个是进行调用的客户端始终代表其登录用户而不是其他用户进行调用。第二个是 stripe create 回答了一个承诺。假设:

Parse.Cloud.define("customer", function(request, response) {
    var user = request.user;
    stripeCreateP({ email: user.email }).then(function(customer) {
        user.set("someUserProperty", customer.someStripeProperty);  // as an example
        return user.save();
    }).then(function(result) {
        console.log(customer);
        response.success(customer); 
    }, function(err) {
        console.log(err);
        response.error(err);
    });
});

如果条带 api 没有 return 解析 Promise,您可以 "promisify" 如下所示...

function stripeCreateP(params) {
    var p = new Parse.Promise();
    stripe.customers.create(params, function(err, customer) {
        if (err) {
            p.resolve(customer);
        } else {
            p.reject(err);
        }
    });
    return p;
}

...并使用电子邮件参数对象调用它...

stripeCreateP({ email: user.email }).then( ...

如果您的应用程序为客户端登录用户以外的用户调用此方法,那么您将需要像在 OP 中一样在 request.params 中传递用户电子邮件,此外,您还需要在代码中授予自己保存当前用户以外的用户的权限,然后您可以在保存之前加上 useMasterKey。请参阅文档。