最近在从事支付相关的工作,由于业务主要面向国外用户,因此接触了一些国外的支付平台。本文将分享我对 Stripe 平台的初步了解,后续会在实际使用中不断完善相关内容。
Stripe 的基本介绍与对比
什么是 Stripe?
Stripe 是一个基于 API 的支付解决方案,为开发者提供了便捷的支付渠道。其功能强大,适合创业团队和中小型企业使用。
Stripe 的使用范围
截至 2019 年 4 月,Stripe 已支持 32 个国家的用户使用(此前资料显示为 25 个国家)。然而,中国大陆暂时未被支持。如果中国企业希望使用 Stripe,可以通过 Stripe Atlas 创建一个美国银行账户。Stripe Atlas 是一个为企业提供全球业务支持的工具,具体详情可查看 Stripe Atlas 官方介绍。
与其他支付平台的对比
与 PayPal 和 Square 相比,Stripe 具有以下特点:
- PayPal:开发难度较大,隐藏费用较高,表面费率 2.99%,实际可能高达 5%。此外,新账户可能不支持信用卡支付。
- Square:开发相对简单,但 SDK 对安卓低版本支持不足,适合线下支付业务。
- Stripe:开发简单,支持多种支付方式(包括支付宝和微信支付),适合创业团队。
Stripe 的支付流程
Stripe 的支付流程简洁高效,主要包括以下步骤:
- 客户端将用户输入的信用卡信息发送至 Stripe 服务器。
- Stripe 服务器校验信息,返回一个支付令牌(token)。
- 客户端将 token 和订单信息发送至服务器。
- 服务器计算订单金额,并向 Stripe 发起扣费请求。
- Stripe 返回交易结果给服务器。
- 服务器将结果返回给客户端。
测试账号
Stripe 提供了丰富的测试账号,方便开发者在不同场景下进行测试。
一步支付与两步支付
- 一步支付:后台获取 token 后,直接进行收款。
- 两步支付:先授权支付,稍后再进行结算。授权有效期为 7 天,适合需要支付审核的场景。
java
// 一步支付示例代码
Stripe.apiKey = “sk_test_yoursecretkey”;
String token = request.getParameter(“stripeToken”);
Map
params.put(“amount”, 999);
params.put(“currency”, “usd”);
params.put(“description”, “Example charge”);
params.put(“source”, token);
Charge charge = Charge.create(params);
支付的附加功能
发送支付邮件
Stripe 支持为每笔账单发送邮件通知。
java
params.put(“receipt_email”, “[email protected]”);
设置附加信息
通过 Metadata,可以为每笔支付添加自定义信息,便于管理。
支付失败的处理
支付失败可能由以下原因导致:
- 发卡单位拒绝(如信用卡过期或使用场景受限)。
- Stripe 安全屏蔽(认为交易不安全)。
- 无效的 API 调用。
开发者可以通过 API 错误处理或 Webhooks 监听 charge.failed
事件来应对支付失败。
纠纷与防欺诈
纠纷处理
当持卡人提出争议时,Stripe 会从账户中扣除争议金额和手续费。开发者需通过 Dashboard 提交证据,证明支付有效。
防欺诈措施
- 收集更多支付信息:如客户姓名、邮箱、CVC、账单地址等。
- 使用校验检查:如 CVC 和地址验证(AVS)。
- 识别潜在欺诈:关注反常订单,如金额过大或地址修改。
退款与支付精度
退款操作
java
Map
params.put(“charge”, stripeToken);
params.put(“amount”, 1000);
Refund refund = Refund.create(params);
支付精度
- 默认使用最小单位(如美元以美分为单位)。
- 最低支付金额取决于结算货币。
- 最大支付金额为 $999,999.99。
其他功能
Webhooks 的使用
通过 Webhooks,开发者可以监控支付事件,如 charge.succeeded
或 charge.failed
。
更多支付方式
Stripe 支持多种支付方式,包括支付宝、微信支付和比特币。
账单与发票
Stripe 提供账单功能,支持周期性收费,适合会员自动续费场景。
注意事项
- 避免保存用户信用卡信息,除非具备 PCI 认证。
- 在 iOS 应用中,Stripe 可优先用于实物商品支付,规避苹果高额手续费。