最近在一个项目需要支持人民币支付,并且客户要求希望能够收完款后的结算是用美元,所以就想到了去年 Stripe 宣布已经跟支付宝达成合作意向,所以经过一番咨询跟集成,终于把 Stripe 集成进来,并且启用了支付宝收款。这篇文章介绍功能申请以及集成的完整过程。

功能申请

  1. 注册 Stripe 账号;
  2. 加入 beta 用户组,电子邮箱跟注册的 Stripe 账号保持一致;
  3. 联系 Stripe 员工
    发送邮件到 support@stripe.com,声明你需要在你的 Stripe 账号中启用 Alipay 的支付功能,并且提供你的 Stripe 账号。然后,等待回复就是,一般当天都能收到回复的。

集成

0. 时序图(可结合后边代码一起理解)

1. 引入 stripe.js 以及初始化脚本

假设支付页面上有个开始支付按钮,其 html 代码为:

html<button id='pay'>支付</button>

请在 html 代码里合适的地方(比如<body>标签的底部)加载 stripe.js:

html<script src="https://checkout.stripe.com/checkout.js"></script>

在脚本中初始化 stripe.js,并且注册支付按钮的事件监听函数:

js$(function(){var stripeHandler = StripeCheckout.configure({key: 'pk_test_xxxxxxxxxxxxxxxxxxxxx',  // 可以查看 https://dashboard.stripe.com/account/apikeysimage: 'https://placehold.it/200x200',    // 显示在支付对话框的图片,可自己指定alipay: true,                             // 启用支付宝支付token: function(token){                   // 用户填写完资料并且 Stripe 校验成功后的回调函数// 此时应该提交 token.id 到后台,比如 http://example.com/orders/1?stripeToken={token.id}}})$('#pay').click(function(){stripeHandler.open({name: 'Business Name',                  // 收款方或商家名称,比如 Beansmiledescription: "商品描述内容",              // 待支付商品的描述amount: 50 * 100,                       // 支付金额,单位是“分”opened: function(){                     // 支付对话框打开后的回调函数// Do something}});});
});

2. 通过 token 请求收款

服务器端是 Ruby on Rails 实现,所以在 Gemfile 中引入 Stripe 官方的 Ruby SDK(具体配置方法请自行查阅其 README):

ruby# Gemfile
# Stripe Ruby bindings
# https://github.com/stripe/stripe-ruby
gem "stripe", "~> 1.20.1"

然后在 Controller action 中添加处理逻辑:

ruby# app/controllers/orders_controller.rb
class OrdersController < ApplicationController# PUT /orders/:id## params:#   id: 订单的 id#   stripeToken: 客户端完成支付流程,在脚本的回调函数中会得到 `token.id`,#                将其上传到 `stripeToken` 参数,服务器端用此 token 请求收款#def payresponse = Stripe::Charge.create  amount: order.amount_in_cents,currency: 'USD',source: params[:stripeToken],description: "订单描述"order.update_attribute :state, :paidredirect_to orderrescue Stripe::InvalidRequestError => errorflash[:error] = "由于#{error.message},支付失败!"redirect_to orderend
end

3. 效果预览

其他

  1. 关于 Stripe 的沙盒机制
    Stripe 为每个账号都提供了两组 keys,一组 key 用于用于 live 环境,另一组是 test 环境,后者即是沙盒环境,而针对支付宝的沙盒,可用任意合法的邮箱账号进行测试,但验证码是固定的 123456,而身份证后 6 位是固定的 12345;
  2. 在功能申请过程中,一定要记得完成步骤3——联系 Stripe 开通 Alipay 支付功能。否则,会在支付的时候出现错误,错误信息示例为:There is no token with ID atok_xxxxxxxxxxxxxxxxxxxxxxxx
  3. 实际开发中,请结合考虑用 stripe 提供的 webhook 处理支付状态变迁;
  4. 此支付机制中,付款人可用人民币支付,但是 Stripe 会用美元跟商家(收款方)进行结算;
  5. 我总结了工作中集成过的其他几款支付网关,横向对比了各家的异同点,有兴趣的请戳:讲稿网:Payment Gateways

参考链接

  1. Stripe: Alipay 首页
  2. Stripe: Alipay FAQ
  3. Stripe: Alipay 集成文档
  4. Stripe: Checkout,这部分的文档虽然没有提交 Alipay, 但是针对 Alipay 的集成,依旧适用。

申请以及集成 Stripe 的 Alipay 支付方案相关推荐

  1. Android Study 之 6分钟妥妥集成微信以及支付宝支付

    LZ-Says:来说俩件事儿: 1.一心只为一人用,一言只为一人说~ 2.今天坐公交,末班车,车上只有司机和我,阴森森的,吓死LZ了...一路小跑!!! 前言 (浪费一分钟) 今天,不讲这个,也不讲那 ...

  2. SpringBoot 2 集成微信扫码支付

    前言 该文主要是手把手教你如何在SpringBoot 中集成微信扫码支付,以及集成的过程需要注意的问题事项.另外需要感谢 vbirdbest 关于微信支付和支付宝支付相关包博客总结.因为文中很多地方参 ...

  3. Android项目内简单集成微信和支付宝支付功能

    最近自己公司的项目需要集成微信和支付宝支付,我是个初学者,然后就开始在网上各种搜索相关Demo.最后找了一个自我感觉还不错的Demo,挺适合初学者使用的.在使用之前一定要在微信平台和蚂蚁金服申请权限, ...

  4. android支付宝支付微信支付封装,如何在Android App中集成支付宝和微信支付功能

    前言 本文主要介绍如何在 Android App 里集成支付宝和微信支付的功能,文中将实现的步骤一步步介绍的非常详细,对同样遇到这个问题的朋友相信会是一个很好的参考,下面话不多说了,来一起看看详细的介 ...

  5. 接入微信,支付宝,浦发银行的统一支付方案

    第三方支付统一接入方案 方案背景及目的 目前大部分商户平台均已接入微信,支付宝等第三放支付平台作为支付渠道,每个商户平台开发者都需要自己去接入支付API或SDK,本方案旨在提供一种相对统一的方式,为各 ...

  6. 支付宝、微信免接口支付方案

    title: 支付宝.微信免签约接口支付方案 tags: 支付宝.微信 背景 相信很多开发者或者运营者,在为网站(博彩.棋牌 )即时到账充值发愁.还在为无法申请支付宝即时到账接口而担忧. 在这里我将为 ...

  7. stripe支付_如何在Stripe上设计支付逻辑(并将其应用)

    stripe支付 Payment logic is central to any product that deals with money. After all, a well-designed p ...

  8. 在sdk中添加源文件_实用干货 | 一步一步教你在SpringBoot中集成微信刷卡支付

    一:准备工作 使用微信支付需要先开通服务号,然后还要开通微信支付,最后还要配置一些开发参数,过程比较多. 申请服务号(企业) 开通微信支付 开发配置 具体准备工作请参考Spring Boot入门教程( ...

  9. 微擎支付返回商户单号_一步一步教你在SpringBoot中集成微信扫码支付

    一:准备工作 使用微信支付需要先开通服务号,然后还要开通微信支付,最后还要配置一些开发参数,过程比较多. 申请服务号(企业) 开通微信支付 开发配置 具体准备工作请参考Spring Boot入门教程( ...

  10. Spring Boot集成支付宝电脑网站支付功能

    Spring Boot集成支付宝电脑网站支付功能 接入准备 登录 创建应用 添加能力 生成私钥与公钥 开发设置 沙箱环境 示例Demo的使用与学习 下载Demo 启动项目 参数配置 执行测试 Spri ...

最新文章

  1. C#三种判断字符是否为汉字的方法
  2. 伯明翰大学计算机科学网络安全硕士,2020年伯明翰大学网络安全硕士专业硕士申请条件-学费-世界排名...
  3. 禁止北京地区IP访问站点
  4. php管理员登录文件,快速的事情,只有管理员,PHP才能访问文件
  5. [转] yaml基础
  6. TeamCola - 最好用的团队工作日志软件
  7. Supplier接口练习之获取最大值
  8. 两平面平行方向向量关系_一文读懂 GDT 中的平面度
  9. C语言函数二维数组传递方法
  10. 第十六章:springboot 整合logback日志
  11. 如何利用【百度地图API】,制作房产酒店地图?(上)——制作自定义标注和自定义信息窗口...
  12. dynamix判定_Dynamix
  13. rsync结合inotify工具实现实时同步传输文件
  14. logisim基础(非常基础)----寄存器元件的使用
  15. 区块链在供应链领域的应用案例
  16. 微信HOOK 退出群聊
  17. hive整和mysql外表_hive中的外表EXTERNAL TABLE
  18. Window10 磁盘如何分区(压缩卷操作)
  19. 本周之后Win11 变成beta通道只能更新22000.176而没办法更新Dev的解决办法 your PC does not meet the hardware system
  20. shell 中三种引号的用法及区别

热门文章

  1. Machine Learning - VI. Logistic Regression逻辑回归 (Week 3)
  2. ffmpeg drawtext文本超出视频画幅处理
  3. 怎么设置qq信息同步服务器,王者荣耀QQ消息同步功能是什么 王者荣耀QQ消息同步功能介绍...
  4. 力扣-268 丢失的数字
  5. PTA 程序设计天梯赛(161~180题)
  6. 1086 就不告诉你 (15 分)—PAT (Basic Level) Practice (中文)
  7. Android ViewPager 实现滑动效果
  8. 入门OJ 4187【周末舞会】
  9. 铁大Facebook——十天冲刺(4)
  10. python 使用.bat文件自动执行