我正在开发一款使用Stripe处理付款的iOS应用。我们正在从一个使用两个单独收费进行初始购买的系统转移到一个系统,该系统使用一次性收费,该收费始于用户账户,然后在设置提示时被捕获。这是Stripe在我们询问如何使用一次充电时向我们推荐的系统,但也验证了该卡可以处理指定金额的费用。
对于我们的后端,我们使用Parse.com来跟踪我们的订单,因此我们使用Stripe与Parse.com的Cloud Code集成作为我们的服务器。我们的主要问题是Parse.com似乎并不能完全支持Stripe的大部分功能(即捕获费用)。经过一番搜索,我发现http POST请求是与Stripe.js交互并实际捕获费用的最佳选择。但是,由于Parse.com在尝试创建未捕获的电荷时,我发现Code 141错误(收到未知参数:捕获),因此我无法获得相当远的距离。 Parse.com的Stripe API建议您可以通过Stripe.Charges.create设置所有参数,但它不会接受捕获的作为有效参数。
要针对此问题的任何其他人进行抽象,如何使用 Parse.com Stripe API创建将参数捕获设置为false的费用?
我在下面发布了一些我的Cloud Code,它应该定义一种方法来创建尚未捕获的费用。这个方法给我的错误是捕获的不是一个有效的参数。
/**
* Create Hold on Card
* Required:
* orderCostInCents -- in cents ex. $10.24 = 1024
* customer -- cus_11EXEXEXEXEXEX
* description -- order.objectId to link it with order item.
*/
Parse.Cloud.define("holdAccount", function(request, response) {
//response.success("Not Charged");
var Stripe = require("stripe");
Stripe.initialize(kStripePrivateKey);
Stripe.Charges.create({
amount : request.params.orderCostInCents,
currency : "usd",
customer : request.params.customer,
captured : false,
description : request.params.description
},{
success: function(httpResponse) {
console.log(httpResponse);
response.success(httpResponse);
},
error: function(httpResponse) {
console.log(httpResponse.message);
response.error("Failed to create charge");
}
});
});
我相信我可以按照https://www.parse.com/questions/stripe-payment-capture-method-not-available设置的指南创建费用后构建http(POST)请求。对于我的问题,本指南可能对其他任何人都非常有帮助!
最好,谢谢你的帮助!
编辑:我意识到我没有发布我们正在使用的Cloud Code版本。它是1.2.19。
答案 0 :(得分:2)
好吧,在我盯着屏幕看了几个小时之后,我当然觉得自己就像一个doofus!捕获了我正在使用的参数,其中正确的参数应为捕获。我只需删除" d"就能解决我的问题。创建充电时从参数名称开始。
糟糕!我仍然愿意通过评论对http请求提出建议,但是如果我遇到问题,我将自己测试这些问题并发布一个单独的线程,因为这个问题与这个问题相关,因而是偏离主题。
对于每个人加入,答案是如果您将参数捕获替换为捕获
,上述代码将完美运行
编辑:对于其他感兴趣的人,此问题的后续内容是关于实际通过Parse Cloud Code上的http请求进行捕获。经过大量搜索和反复试验后,以下方法可行。这里最难的部分是弄清楚如何格式化URL,因为这是我第一次涉足http请求。如果您需要链接参数,只需添加"& {parameter-name} = {parameter-value}"
//kStripePrivateKey is your stripe private key
//Must pass in chargeID = stripe charge id and
//orderCostInCents = capture amount in cents as parameters
var captureURL = "https://"+ kStripePrivateKey +
":@api.stripe.com/v1/charges/"+
request.params.chargeID+
"/capture?amount="+request.params.orderCostInCents;
Parse.Cloud.httpRequest({
url: captureURL,
method: 'POST',
success: function(httpResponse) {
// Handle any success actions here
response.success(httpResponse);
}, error: function(httpResponse) {
response.error(httpResponse);
}
});