一、功能介绍
支付宝对接 ---> 支付回调 ---> 查询支付状态
二、学习目标
1、熟悉支付宝对接核心文档,调通支付宝支付功能官方Demo
2、解析支付宝SDK对接源码
3、RSA1和RSA2验证签名及加解密
4、避免支付宝重复通知和数据校验
5、natapp外网穿透和tomcat remote debug
6、生成二维码,并持久化到图片服务器
1、支付宝回调
ps: 支付宝的回调会放到 Request 里面,我们从Request里面取出来放到Map上,然后再对这个Map进行处理
2、数据表设计
CREATE TABLE `pay_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL COMMENT '用户id',
`order_no` bigint(20) DEFAULT NULL COMMENT '订单号',
`pay_platform` int(10) DEFAULT NULL COMMENT '支付平台:1-支付宝,2-微信',
`platform_number` varchar(200) DEFAULT NULL COMMENT '支付宝支付流水号',
`platform_status` varchar(20) DEFAULT NULL COMMENT '支付宝支付状态',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
3、接口设计
支付接口设计 (ps: 支付一共有三个接口)
一、支付
request(入参是orderNo 就是订单号 )
orderNo
response(qrpath : 这是url地址可以是图片服务器地址 ,指向支付的二维码图片 )
success
{
"status": 0,
"data": {
"orderNo": "1485158676346",
"qrPath": "http://img.happymmall.com/qr-1492329044075.png"
}
}
fail
{
"status": 1,
"msg": "支付宝生成订单失败"
}
二、查询订单支付状态
request (入参是orderNo 就是订单号 )
orderNo
response
success
{
"status": 0,
"data": true
}
fail
{
"status": 1,
"msg": "该用户并没有该订单,查询无效"
}
三、支付宝回调
参考支付宝回调文档
request
HttpServletRequest
response
success
success
fail
failed
一、支付宝扫码支付功能对接
1、一些重要的官方文档
2、沙箱调试环境(买家账号测试、商家账号测试)
3、支付宝扫码支付主业务流程
4、支付宝扫码支付流程
5、支付宝扫码支付重要的字段
6、支付宝扫码支付重要的细节
7、支付宝扫码支付对接技巧
8、支付宝扫码支付官方Demo调试 (入手)
二、一些重要的官方文档
1、沙箱登录:
https://openhome.alipay.com/platform/appDaily.htm
2、沙箱环境使用说明:
https://docs.open.alipay.com/200/105311/
3、如何使用沙箱环境:
4、当面付产品介绍
https://docs.open.alipay.com/194/105072
5、扫码支付接入指引
https://docs.open.alipay.com/194/106078
6、当面付快速接入
https://docs.open.alipay.com/194/105170
7、当面付接入必读
https://docs.open.alipay.com/194/105322
8、当面付进阶功能
https://docs.open.alipay.com/194/105190
9、当面付异步通知-仅用于扫码支付
https://docs.open.alipay.com/194/103296
10、当面付SDK&Demo
https://docs.open.alipay.com/194/105201/
11、服务端SDK
https://docs.open.alipay.com/54/103419
12、生成RSA密钥
https://docs.open.alipay.com/291/105971
13、线上创建应用说明
https://docs.open.alipay.com/200/105310
一、沙箱调试环境
ps : (上图中的支付宝网关,沙箱环境是alipaydev.com,线上环境是alipay.com。后面会一步一步生成秘钥,配置秘钥)
ps : (这里说一点,如果想玩通这个沙箱环境,必须下载一个沙箱版钱包APP ,可惜目前只支持安卓版的)
二、支付宝扫码支付主业务流程
三、支付宝扫码支付流程
四、支付宝扫码支付重要的字段
五、支付宝扫码支付重要细节
1、主动轮询和回调的区别 (主动轮询简单来说就是,利用间隔时间,设置一定的频率,不断的去查询这个订单的状态,回调就是,支付宝付款成功,调用一下接口,获取到request里面的信息)
2、避免单边账 (意思是说,避免支付宝那边记账了,我们这边没记,反之亦然)
3、同步请求的加签和验证签名
4、回调的验证 (签名、金额、订单号、订单状态、交易状态、商户id)
5、过滤掉重复的通知
6、一定要验证并确保可接受的异步通知是支付宝发出的
7、回调请求的返回 (支付宝调我们 我们给支付宝一个返回,返回规则如下:)
六、支付宝扫码支付对接技巧
1、回调的调式方法
2、路由器设置开放本地到外网(不推荐)
3、外网远程debug(1、保持远端代码版本与本地代码一致,2、及时关闭开放的debug端口)
4、内网穿透(ngrok、natapp、花生壳)
七、外网远程debug
1、保持远端代码版本和本地代码版本一致
2、执行sudo vim ${tomcat}/bin/catalina.sh 进行编辑
3、添加如下配置、其中address为开放远程debug的端口号
CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server-y,suspend-n,address=5005"
4、开放远程debug的端口加到防火墙配置中,例如阿里云中配置5005端口
5、及时关闭开放的debug端口(不建议在公司服务器上这么做)
6、编辑sudo vim /etc/sysconfig/iptables
7、添加如下配置 -AINPUT -p tcp -m tcp --dport 5005 -j ACCEPT
8、:wq保存退出
9、重启防火墙sudo service iptables restart
八、内网穿透(natapp)