Web应用对接支付宝当面付解决方案

介绍

如果软件接入支付不可避免的接入支付宝支付或者微信支付。此次以 Web 应用程序对接支付宝当面付支付为例。本文只提供思路,具体实现没语言都不一样,但是逻辑是一样的,我用 Java 和 Go 实现了。

准备

  1. 支付宝商家认证并创建一个应用
  2. 一个可以公网访问的 IP,用于接收支付宝回调请求
  3. 熟练一门开发语言和 Web 框架

去支付宝申请一个应用,之后你会得到

  1. 支付宝公钥
  2. 应用私钥
  3. appid

申请步骤:https://opendocs.alipay.com/open/01csp3

支付宝当面付介绍

为什么选择支付宝当面付?原因是个人就可以申请,不需要营业执照等等资料。随时申请并且可以申请多个应用,具体的申请步骤见支付宝开发文档。个人的每日收款额度会比企业的少,不过也够个人使用,费率是 0.6%,也就是当你收款 100 元,其中 0.6 元是作为手续费,真正到账是 99.4 元。

支付宝支付开发文档:https://opendocs.alipay.com/open/

我不喜欢用第三方的支付,第一跑路居多,第二不稳定,比如码支付,原理是挂一个监听程序,监听回调事件,前提是需要一个 24 小时都要挂在后台运行,优点是没手续费直接到账,大家各有所好吧,我不推荐任何的第三方支付。

细节

关于 SDK 选择

Java 我用的 alipay-easysdk

alipay-easysdk 开源地址:https://github.com/alipay/alipay-easysdk

Go 语言用的 go-pay

go-pay 开源地址:https://github.com/go-pay/gopay

支付宝开发文档摘要

这块可以看支付宝的官方文档,讲的比较详细。

首先以扫码支付为例,以下是扫码支付流程图

扫码支付流程图

在 2.2 请求预下单,向支付宝官方发起请求时需要用到 appid 和应用私钥,之后支付宝官方会返回一个二维码的 url,把 url 以二维码的形式展示在前端。

用户扫码支付结束后,无论成功或者失败支付宝后台就会发起 6 异步通知支付结果。此时就要用到我们提前准备好的公网 IP 或者域名用于接收支付结果,简单地说就是支付宝官方来请求我们事先暴露在公网上的接口,那么怎么判断请求时支付宝官方发起的,怎么验证?这是就需要用到支付宝公钥验签。

支付业务我们可以这样实现,发起支付返回二维码之后,我们在数据库订单表中插入订单,状态时未支付,知道支付宝回调我们接口,验签通过后将状态设置到该订单上,前端定时请求查询订单状态的接口,根据查询到的状态跳转至不同的提示页。

总结

支付宝官方文档很详细,本文只介绍了预下单和回调两个接口,还有取消订单,查单的接口等等可以去看官方文档。