我正在使用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");
}
})
});
答案 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 。
我花了很多钱帮我处理这些事情,所以我不能给你更具体的帮助。