Parse.com Stripe:创建未捕获的费用

Posted

技术标签:

【中文标题】Parse.com Stripe:创建未捕获的费用【英文标题】:Parse.com Stripe: Creating a charge that is not captured 【发布时间】:2014-12-30 23:08:19 【问题描述】:

我正在开发一个使用 Stripe 处理付款的 ios 应用。我们正在从对初始购买和小费使用两项单独费用的系统转变为使用单一费用的系统,该费用从用户帐户的保留开始,然后在设置小费时被捕获。这是 Stripe 在我们询问如何处理单笔费用时向我们推荐的系统,同时还要验证该卡是否可以处理指定金额的费用。

对于我们的后端,我们使用 Parse.com 来跟踪我们的订单,因此我们使用 Stripe 与 Parse.com 的云代码的集成作为我们的服务器。我们的主要问题是 Parse.com 似乎并不完全支持 Stripe 的大部分功能(即捕获费用)。经过一番搜索,我发现 http POST 请求是与 Stripe.js 交互并实际捕获费用的最佳选择。但是,我还没有走那么远,因为当我尝试创建未捕获的费用时,Parse.com 给了我一个 Code 141 错误(收到的未知参数:捕获)。 Parse.com 的 Stripe API 建议您可以通过他们的 Stripe.Charges.create 设置所有参数,但它不会接受 captured 作为有效参数。

要为其他有此问题的人抽象,我如何使用 Parse.com Stripe API 创建将参数 captured 设置为 false 的费用?

我在下面发布了一些云代码,这些代码应该定义一种方法来创建尚未捕获的费用。这种方法给了我捕获的错误不是有效参数。

/**
 * 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。

【问题讨论】:

【参考方案1】:

好吧,在我长时间盯着屏幕休息之后,我确实觉得自己像个傻瓜!我使用的参数被捕获,正确的参数应该是capture。我可以通过在创建费用时简单地从参数名称中删除“d”来解决我的问题。

哎呀!我仍然愿意接受关于通过 cmets 的 http 请求的建议,但是如果我在那里遇到问题,我会自己测试这些问题并发布一个单独的线程,因为该问题与这个问题无关,因此是题外话。

对于每个加入的人来说,答案是如果您将参数 captured 替换为 capture

,上述代码可以完美运行

编辑:对于其他感兴趣的人,这个问题的后续内容是关于通过 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);
    
);

【讨论】:

以上是关于Parse.com Stripe:创建未捕获的费用的主要内容,如果未能解决你的问题,请参考以下文章

使用 stripe.js 在条带中创建源后,stripeResponseHandler 函数未调用

“未捕获的类型错误:在 angularJS/NodeJS 中使用条带支付方法 Stripe.charges.create() 时无法读取未定义的属性‘创建’”

获取与 Stripe 结帐会话关联的费用 ID

Parse.com 云代码 afterSave() 错误:“未捕获尝试使用指向新的未保存对象的指针保存对象。”

Stripe 在 PHP 中创建客户和经常性费用

没有这样的令牌“some_random_token”在 rails 中发现 Stripe 错误