在最近的工作中,我接触到了多种国外支付平台,尤其是 Stripe。本文将分享我对 Stripe 平台的初步认识,主要基于其文档内容,后续会在实际使用中不断完善。
Stripe 是一个基于 API 的便捷支付渠道,提供多种支付功能和产品。
截至 2019 年 4 月 7 日,Stripe 已支持 32 个国家的使用。虽然有资料提到支持 25 个国家,但实际情况更为广泛。需要注意的是,中国大陆尚未被支持,因此若想在中国使用 Stripe,需拥有一个支持国家的银行账号。中国企业可以通过 Stripe Atlas 创建美国银行账号。
根据朋友的使用经验,PayPal 的开发难度较大,隐藏费用高于预期,且新账号不支持信用卡支付。相比之下,Square 的开发相对简单,但其 SDK 仅支持较低版本的安卓系统,限制了使用。
总体来看,Stripe 的开发简单,支持多种支付方式(如支付宝和微信支付),适合创业团队使用;而 Square 更适合线下支付,PayPal 则更适合大型企业。
整个支付流程相对简单,主要分为以下步骤:
客户端将用户输入的信用卡信息发送到 Stripe 服务器。
Stripe 服务器校验信息,返回 token。
客户端将 token 和订单信息发送到服务器。
服务器计算订单金额并请求 Stripe 扣费。
Stripe 返回交易结果给服务器。
服务器将交易结果返回给客户端。
Stripe 提供了足够的测试账号,方便我们进行各种测试。
在后台获取支付 token 后,设置 capture 为 true,Stripe 将直接进行收款。
java
// 设置你的密钥
Stripe.apiKey = "sk_test_yoursecretkey";
// 获取支付 token
String token = request.getParameter("stripeToken");
Map<String, Object> params = new HashMap<>();
params.put("amount", 999);
params.put("currency", "usd");
params.put("description", "Example charge");
params.put("source", token);
Charge charge = Charge.create(params);
每个 token 只能使用一次,且会很快失效。
Stripe 支持分步骤支付,先进行授权,稍后再结算。授权有效期为七天,未及时收费将被取消。
Stripe 可以设置每笔账单的邮件接收,方便用户查看。
java
params.put("receipt_email", "jenny.rosen@example.com");
Stripe 支持将 Metadata 添加到支付请求中,便于管理支付信息。
支付过程中可能会出现失败情况,建议对每种失败类型进行处理。失败原因可能包括:
支付被发卡单位拒绝(如信息错误、信用卡过期等)。
Stripe 安全屏蔽。
无效的 API 调用。
如果 Stripe 屏蔽了合法支付,可以在 Dashboard 中标记该卡为安全。
可以通过处理 API 错误和使用 webhooks 监听事件来自动处理支付结果。
在交易过程中,需注意如何处理交易纠纷和防范欺诈。处理纠纷时,需提供有效证据,具体信息可在 Stripe Dashboard 中查看。
收集尽可能多的支付信息(如客户姓名、邮箱、CVC、账单地址等)。
使用校验检查,确保信息的准确性。
可以使用以下代码监控退款事件:
java
Map<String, Object> params = new HashMap<>();
params.put("charge", stripeToken);
params.put("amount", 1000);
Refund refund = Refund.create(params);
在实现支付时,需关注 Stripe 平台的精度,默认使用最小单位。
确保系统能够访问 Stripe 服务器,以便正常调用接口和接收支付回调。
通过 webhooks 监控支付的触发事件。
Stripe 支持多种支付方式,包括支付宝、微信支付和比特币支付。
利用 Card 和 Customer 功能,方便管理支付和提升用户体验。
Stripe 提供账单功能,支持周期性收费。
除非获得 PCI 认证,否则请勿在数据库中保存用户的信用卡信息。
根据苹果公司的规定,出售数字内容需使用应用内购买,而实物商品则可使用 Stripe 等其他支付方案。