如何将解析客户链接到Stripe客户

时间:2015-09-02 15:41:56

标签: parse-platform stripe-payments

我正在使用Stripe和Parse云服务为卡充电。充电都很好,但我不知道哪个用户购买了。我的应用程序要求用户通过Parse用户登录进行购买。

我想知道 1.如何使用解析云代码(JS)创建Stripe客户。 2.如何将Stripe客户链接到当前登录到我的应用程序的客户(例如,解析时的[PFUser currentUser])。

现在我有一个vc添加信用卡

[[STPAPIClient sharedClient] createTokenWithCard:stripeCard
                                      completion:^(STPToken *token, NSError *error) {
                                          if (error) {
                                              [self handleStripeError:error];
                                          } else {
                                              NSString *myVal = token.tokenId;
                                              NSLog(@"%@",token.tokenId);
                                              [PFCloud callFunctionInBackground:@"createBackendChargeWithToken" withParameters:@{@"token":myVal}
                                                                          block:^(NSString *result, NSError *error) {
                                                                              if (!error) {
                                                                                  NSLog(@"Success: from Cloud Code Res: %@",result);
                                                                                  self.pay.enabled = YES;
                                                                              }
                                                                              else
                                                                              {
                                                                                  NSLog(@"Error: from Cloud Code: %@",error);
                                                                                  self.pay.enabled = YES;
                                                                              }

                                                                          }];
                                                                        }
                                      }];

我的main.js如下:

Parse.Cloud.define("createBackendChargeWithToken", function(request, response){
var stripeToken = request.params.token;
    var charge = Stripe.Charges.create({
    amount:1000,
    currency:"usd",
    card: stripeToken,
},{
    success: function(httpResponse){
    response.success("Purchase made!");
    },
    error: function(httpResponse){
    response.error("no good");
    }
})
});

1 个答案:

答案 0 :(得分:1)

首先,在云代码中初始化Stripe模块:

var Stripe = require('stripe');
var STRIPE_SECRET_KEY = '[your secret key]';
var STRIPE_API_BASE_URL = 'api.stripe.com/v1'; //this is used for making http requests for parts of the Stripe API that aren't covered in parse's stripe module
Stripe.initialize( STRIPE_SECRET_KEY );

我在客户端创建了一个卡片令牌,并将其传递给我的云代码功能,因此我永远不会发送敏感数据。云代码功能非常简单:

Parse.Cloud.define("StripeRegisterUser", function(request, response)
{   
    Stripe.Customers.create({
        card: request.params.stripeToken // the token id should be sent from the client
        },{
            success: function(customer) {
                console.log(customer.id);
                response.success(customer.id); 
            },
            error: function(httpResponse) {
                console.log(httpResponse);
                response.error("Uh oh, something went wrong"+httpResponse);
            }
        });
});

我实际上将customer.id(我将其作为我的回复传递回我的客户端)存储到用户对象,但是我的客户端代码上存储了该对象。您可以将该代码添加到此云功能中。 request.user将是调用此云代码功能的用户。

Stripe模块没有完整的Stripe API,因此我使用该基本URL根据Stripe的API文档中的curl示例创建自定义http请求。

获取用户的卡片数据需要httpRequest,因为Stripe API不包含以下方法:

Parse.Cloud.define("StripeUserCards", function(request, response)
{   
    Parse.Cloud.httpRequest({
        method:"GET",

        url: "https://" + STRIPE_SECRET_KEY + ':@' + STRIPE_API_BASE_URL + "/customers/" + request.params.customer_id + "/cards",

        success: function(cards) {
            response.success(cards["data"]);
        },
        error: function(httpResponse) {
            response.error('Request failed with response code ' + httpResponse.status);
        }
    });
});

您必须弄清楚如何自己解析返回的数据。它的类型" id"在obj-c。

Parse中的Stripe.Charges.create方法需要客户ID和卡ID。在客户端使用该用户卡信息允许用户选择他们想要使用的卡,将卡ID发送到创建费用的方法,并传递该卡ID以及附加到用户对象的客户ID 。

我花了很多钱帮我处理这些事情,所以我不能给你更具体的帮助。