前言
最近开发了PC端支付宝扫码支付的功能,使用的是沙箱环境。所谓的沙箱环境,其实就是支付宝提供的测试环境(毕竟正式环境需要营业执照等信息进行注册,注册通过后还有一些流程,才能进行正式的扫码支付。对于学习来说,并没有必要)。下面做一个简单的小结。
业务流程
前端页面:
- 用户选择商品,点击购买,调用后台:生成商品支付二维码的接口。该接口返回二维码字符串。前台页面根据该字符串生成支付二维码(调用二维码生成组件)。
- 生成二维码后,页面以轮询的方式(3-5s一次,限定轮询次数),调用后台:查询订单支付状态接口。该接口会返回订单的支付状态。
- 如果到达轮询次数上限后,订单状态仍是未完成支付,则调用后台取消订单接口。取消该订单。
- 如果在轮询次数内,订单完成支付,则跳转到支付成功页面。
后台
后台需要提供三个接口:
- 生成支付宝支付二维码接口。核心在于调用:alipay.trade.precreate接口。该接口的详细参数,请参考蚂蚁金服开放平台。如果不清楚该如何调用该接口,请点击在线调试(沙箱环境),会有针对不同开发语言的示例代码。
https://docs.open.alipay.com/api_1/alipay.trade.precreate
- 查询订单支付状态接口。调用:alipay.trade.query接口。对于示例代码,同上。详情参考:
https://docs.open.alipay.com/api_1/alipay.trade.query/ - 取消订单接口。调用:alipay.trade.cancel接口。参考:
https://docs.open.alipay.com/api_1/alipay.trade.cancel/ - 后台根据查询接口返回的订单支付状态,做下一步操作,例如:轮询结果为支付完成时,进行扣减库存、生成订单等操作,具体结合实际的业务需求进行操作。
具体操作步骤
1.配置沙箱环境参数。请参考:
https://blog.csdn.net/abap_brave/article/details/79215081
2.引入SDK。由于项目是Maven项目,在POM.xml文件中配置Java版本的依赖。如下:
<!-- 阿里支付sdk -->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>3.7.73.ALL</version>
</dependency>
3.配置参数。示例代码如下:
config.properties
#支付宝扫码支付参数配置
#应用id
app_id= 沙箱环境中的appid
#测试号的私钥
merchant_private_key= 沙箱环境下生成的私钥
#支付宝公钥
alipay_public_key= 沙箱环境中的支付宝公钥
#支付宝网关
#沙箱环境
gatewayUrl=https://openapi.alipaydev.com/gateway.do
#真实环境
#gatewayUrl=https://openapi.alipay.com/gateway.do
#签名方式
sign_type = RSA2
#字符集编码
charset = utf-8
4.开发具体的后台代码,比如:AlipayController。在其中提供上面所说的三个接口即可。
总结
1.注意二维码只有被支付宝App扫码过后,才会在支付宝后台生成订单。在此之前,查询订单状态时,都会报:订单不存在的错误。