支付宝支付
支付宝支付使用步骤
进入蚂蚁金服开发平台
下载支付宝官方demo,进行配置和测试
什么是公钥、私钥、加密加签、密钥等
对称加密
-
加密和解密用的是同一把钥匙
非对称加密
-
RSA、Elgamal等,加密解密使用不同钥匙
公钥私钥
- 公钥和私钥是一个相对概念
- 它们的公私性是相对于生成者来说的;一对密钥生成后,保存在生成者手里的就是私钥,生成者发布出去大家用的就是公钥
支付宝支付流程
-
支付宝商户支付流程
配置使用沙箱进行测试
-
基本配置APPID、支付宝网关等待...
-
生成密钥,私钥配置在代码中,公钥配置在支付宝中
内网穿透
简介
-
内网穿透功能可以允许我们使用外网的网址来访问主机;正常的外网需要访问我们项目的流程是:
- 1、买服务器并且有公网固定ip
- 2、买域名映射到服务器的ip
- 3、域名需要进行备案和审核
使用场景
- 开发测试(微信、支付宝)
- 智慧互联
- 远程控制
- 私有云
内网穿透的几个常用软件
整合支付
下载SDK
-
引入依赖
<!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java --> <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.11.28.ALL</version> </dependency>
支付调用(同步通知)
注意:谷歌浏览器,沙箱支付会报钓鱼风险,可更换浏览器查看效果
-
根据官方提供的DEMO,将支付代码抽取成
AlipayTemplate,只需配置 APPID、支付宝网关、私钥、支付宝公钥等等,沙箱环境提供的测试数据
异步通知
-
1、可以在支付成功,跳转商户页面,获取到支付宝转来的所有请求数据,验证签名(不推荐)
-
2、在用户支付完成之后,支付宝会根据 API 中商户传入的 notify_url,通过 POST 请求的形式将支付结果作为参数通知到商户系统
支付宝异步回调使用的就是分布式事务解决方案中的:最大努力通知型方案
第三方系统通讯:设置最大通知次数,达到通知次数后即不再通知,各大交易业务平台间的商户通知:多次通知、查询校对、对账文件
内网穿透联调
-
使用续断的免费穿透
-
修改配置,使请求正确转发到order订单服务
-
修改nginx转发规则;order订单服务,拦截器放开/payed路径下的请求
-
使用postman发送请求访问
-
核心流程 -- 验签(防止恶意攻击)
-
测试通过后,修改
alipayTemplate中的异步通知地址-->内网穿透后的地址改造payment表
收单
-
1、订单在支付页,不支付,一直刷新,订单过期了才支付,订单状态改为已支付,但是库存解锁了
- 使用支付宝自动收单功能解决,只要一段时间不支付,就不能支付
-
2、由于延时等问题,订单解锁完成,正在解锁库存的时候,异步通知才到‘
- 订单解锁,手动调用收单
-
3、网络阻塞问题,订单支付成功的异步通知一直不到达
- 查询订单列表时,ajax获取当前未支付的订单状态,查询订单状态时,在获取一下支付宝的订单状态
-
’4、其他各种问题
- 每天晚上闲时下载支付宝对账单,进行一一对账
支付演示
-
1、 提交订单,等待一分钟不支付,消息过期,关闭订单,解锁库存
预期结果:支付宝自动收单,交易超时无法支付
-
2、提交订单立马支付,支付成功,异步通知
预期结果:订单状态:已付款,库存锁定