源码
前端
vue-demo
https://www.aliyundrive.com/s/dmnY8G6N6RM
点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。
后端
aliPay https://www.aliyundrive.com/s/H2JFBjGWuf2
点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。
简介
前端使用vue框架和elementUI
后端使用springboot框架
准备工作
支付宝沙箱使用
1.进入支付宝开放平台网页,https://open.alipay.com/
2.登录,点击右上角控制台
3.页面拉倒最底部左下角,开发工具推荐栏目,点击沙箱
4.创建应用
5.查看公钥和私钥
点击查看
以上信息后台配置会用到
下载沙箱支付宝
1.点击沙箱工具
2.选择支付宝客户端沙箱板
3.扫码下载
沙箱支付宝账号
1.点击沙箱账号
2.右侧信息
3.进行充值
点击买家信息栏目下充值按钮
4.登录沙箱客户端
使用买家信息栏目下的账号和密码,登录沙箱支付宝客户端
内网穿透
推荐一款免费内网穿透工具 网云穿
下载客户端,安装配置本地后台ip和端口
配置映射
点击确定,生成记录
3.点击启动
映射地址就是公网域名,默认端口是80
vue项目
执行命令下载依赖库
npm install
进行依赖版本审核重新拉取不满足的库版本
npm audit fix
启动vue项目
npm run serve
启动后的效果:
页面
springboot项目
配置application.properties
server.port= 8080
#应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
ALIPAY.APPID=
#//商户私钥,您的PKCS8格式RSA2私钥
ALIPAY.PRIVATEKEY=
#支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥
ALIPAY.PUBLICKEY=
#服务器异步通知页面路径
ALIPAY.NOTIFY_URL=http://内网穿透公网域名/pay/notify
ALIPAY.RETURNA_URL=http://内网穿透公网域名/pay/return
#签名方式
ALIPAY.SIGN=RSA2
#字符编码格式
ALIPAY.CHARSET=utf-8
#支付宝网关
ALIPAY.gatewayUrl=
正常启动项目
流程
点击立即购买
选择支付宝,并点击主要按钮
打开沙箱支付宝进行扫码支付,过程有可能出现异常,多测试几次即可,由于阿里沙箱环境不稳定原因导致。
扫码支付
使用沙箱支付宝正常付款即可,网页会正常跳转
支付宝的同步和异步的区别
第一种理解
同步是给客户看的,异步是服务器处理请求。
同步是客户充值或者支付成功了,给客户一个提示,告诉客户这个操作的结果是成功还是失败。起到的作用就是提示客户这个操作的结果是成功还是失败。
异步是服务器在后端处理支付成功或失败时的业务逻辑。同步通知:用于用户在支付宝页面付款完毕后自动跳转;
异步通知:其实是处理业务逻辑,比如说修改客户的支付状态;
同步得到通知后跳转到自己的网址,然后根据参数告诉客户支付结果,然后在更新状态。
异步其实就是一个双保险,如果同步没有跳转你的网址,可能是关机了,或者网速慢,无法完成数据更新的状态,这时候异步就发挥作用了,先判断是否支付,支付了就不必更新了,只返回支付宝 success就行了,不然会一直异步通知
第二种理解
当一个支付请求被发送到支付渠道方,支付渠道会很快返回一个结果。但是这个结果,只是告诉你调用成功了,不是扣款成功,这叫同步调用。
很多新手会拿这个结果 当作支付成功了,那就会被坑死,结果就是支付成功率特别高,伴随着一堆无法解释的坏账率,测试人员尤其要注意测试数据的篡改:金额,同步返回结果,订单号等。
同步请求参数里面会有一个回调地址,这个地址是支付渠道在扣款成功后调用的,这叫异步调用。
一般同步接口仅检查参数是否正确,签名是否无误等。异步接口才告诉你扣款结果。
一般异步接口有5秒以内的延迟。调用不成功会重试。有时候是这边成功了,但支付渠道侧没收到返回,于是会继续调。
当天的支付到第二天还在 被异步调用也都是正常的。这也是开发人员需要特别注意的地方,不要当做重复支付。
测试人员也要对重复回调进行测试,应只有一次有效。这还不是最坑的,一般 支付渠道侧,只有支付成功了才通知你。
要是支付失败了,压根儿都不告诉你。
另一方面,如何老收不到异步结果呢?那就得查查了。同步结果不可靠,异步调用不可靠,那怎么确定支付结果?最终的杀招就是查单了,
反查,一般支付渠道侧都 会提供反查接口,定时获取DB中待支付的订单调用支付渠道侧的反查接口,最终把支付渠道侧扣款成功的订单完成掉。