Stripe:我如何知道卡是不是是 3d 安全卡以及如何收费

Posted

技术标签:

【中文标题】Stripe:我如何知道卡是不是是 3d 安全卡以及如何收费【英文标题】:Stripe: How do i know whether card is 3d secure and how to charge itStripe:我如何知道卡是否是 3d 安全卡以及如何收费 【发布时间】:2017-10-19 07:20:06 【问题描述】:

我是 Stripe Pay 的新手。我正在寻找一种方法来对添加到客户卡的卡(任何卡)进行收费。但我无法区分 3d 安全卡。以下是我正在尝试的代码:

创建卡片令牌:

     Map<String, Object> customerParams = new HashMap<String, Object>();
        Map<String, Object> tokenParams = new HashMap<String, Object>();
        Map<String, Object> cardParams = new HashMap<String, Object>();
        cardParams.put("number", "4000000000003063");
        cardParams.put("exp_month", 5);
        cardParams.put("exp_year", 2018);
        cardParams.put("cvc", "314");
        tokenParams.put("card", cardParams);
Token token=Token.create(tokenParams);

向客户添加令牌:

Customer customer=Customer.retrieve("cus_Token");
      customerParams.put("source", token.getId());
      Card card=(Card)customer.getSources().create(customerParams);

如果这张卡支持 3d 安全支付,现在我该如何进行收费。

我正在尝试关联卡并进行如下收费:

 Map<String, Object> params = new HashMap<String, Object>();
    params.put("amount", 1000);
    params.put("currency", "usd");
    params.put("description", "Testing payments");
  params.put("source","src_token");
  params.put("customer", "cus_Token");
  Charge charge = Charge.create(params);
  System.out.println(charge.getId());

提前谢谢..

【问题讨论】:

【参考方案1】:

可以在此处找到使用 Stripe 创建 3D 安全支付的文档:https://stripe.com/docs/sources/three-d-secure。它包括 Java 示例。

请注意,这使用了新的sources API,因此您根本不会使用令牌。相反,您将创建(可重复使用的)card sources,然后使用这些卡源创建(一次性使用)3D Secure sources。

【讨论】:

【参考方案2】:

您可以使用卡的source 的card.three_d_secure 属性检查 3D 安全验证支持。

An initial reusable source for a card which requires a 3D Secure verification。 它有card.three_d_securerequired。 [Stripe] An initial reusable source for a card with an optional 3D Secure verification。 它有card.three_d_secure:optional

Stripe API 文档 → «3D Secure Card Payments with Sources» → «Step 2: Determine if the card supports or requires 3D Secure»:

3D Secure 的行为和支持可能因卡网络和类型而异。对于不受支持的卡,请改为执行regular card payment。

但是,一些发卡机构要求使用 3D Secure 来降低欺诈风险,拒绝所有不使用此流程的收费。因此,您可以最好地处理这些不同的情况,在继续 3D 安全过程之前检查卡源的 card.three_d_secure 属性值。

required:需要 3D 安全。必须完成该过程才能成功收费。 optional:3D 安全是可选的。该过程不是必需的,但可以执行以帮助减少欺诈的可能性。 not_supported:此卡不支持 3D Secure。请改用普通卡付款。

来自我的 Stripe integration with Magento 2 的 3D 安全支持检测代码(在 php 中): https://github.com/mage2pro/stripe/blob/2.4.6/Init/Action.php#L70-L151

【讨论】:

【参考方案3】:

我发现了一种未记录的方法来确定卡是否为 three_d_secure 而不使用条带元素 javascript

当您根据文档创建卡源时,将属性“type”设置为“card”,检查“three_d_secure”键的“typeData”哈希,该键返回与条带元素卡相同的信息。

这适用于 java 客户端版本 5.38.0。不知道其他版本。

【讨论】:

以上是关于Stripe:我如何知道卡是不是是 3d 安全卡以及如何收费的主要内容,如果未能解决你的问题,请参考以下文章

关闭选项卡以关注上一个选项卡而不是第一个选项卡时如何更改 dojo 内容选项卡焦点?

Stripe - 支付订单错误:无法向没有活动卡的客户收费

stripe.confirmCardPayment 不是函数

扫描 Android SD 卡以获取新文件

保存卡以备将来付款时使用 Stripe 3D Secure

使用 PaymentIntent 进行 Stripe 3d 安全支付