支付系统:准备工作
一、支付场景
1、微信支付官方文档:https://pay.weixin.qq.com/static/product/product_index.shtml

2、支付宝官方文档:https://opendocs.alipay.com/apis

二、项目初始化
新建一个pay项目,初始化流程参照第三篇笔记
https://blog.csdn.net/qq464383828/article/details/113807696
三、微信Native支付
Native支付是指商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。
由于微信支付必须要求企业资质,个人无法实现,下图为native支付流程图,以供了解。

四、支付宝支付
1、支付宝沙盒环境测试配置
支付宝有专门的沙盒环境用于支付测试,无需企业资质。
(1)进入支付宝开放平台https://openhome.alipay.com/platform/appDaily.htm?tab=info

(2)下载开发助手,生成商家公钥私钥https://opendocs.alipay.com/open/291/introduce

(3)将公钥配置到开放平台中,得到支付宝公钥

(4)下载沙箱版支付宝钱包,用于手机扫码支付(用用户账号登录)
2、公钥私钥
公钥私钥用于RSA非对称签名
发起支付:商户(商户私钥加密)→支付宝(商户公钥验签)
异步通知:支付宝(支付宝私钥加密)→商户(支付宝公钥验签)
五、支付插件best-pay-sdk
该SDK帮我们集成了微信支付、支付宝支付,github地址:https://github.com/Pay-Group/best-pay-sdk
(1)引入依赖,用1.3.3的版本,支持沙盒测试
<dependency>
<groupId>cn.springboot</groupId>
<artifactId>best-pay-sdk</artifactId>
<version>1.3.3</version>
</dependency>
(2)配置,支付宝配置记得开启沙盒测试
//微信支付配置
WxPayConfig wxPayConfig = new WxPayConfig();
wxPayConfig.setAppId("xxxxx"); //公众号Id
wxPayConfig.setMiniAppId("xxxxx"); //小程序Id
wxPayConfig.setAppAppId("xxxxx"); //移动AppId
//支付商户资料
wxPayConfig.setMchId("xxxxxx");
wxPayConfig.setMchKey("xxxxxxx");
wxPayConfig.setNotifyUrl("http://xxxxx");
//支付宝配置
AliPayConfig aliPayConfig = new AliPayConfig();
aliPayConfig.setAppId("xxxxxx");
aliPayConfig.setPrivateKey("xxxxxx");
aliPayConfig.setAliPayPublicKey("xxxxxx");
aliPayConfig.setReturnUrl("http://xxxxx");
aliPayConfig.setNotifyUrl("http://xxxxx");
aliPayConfig.setSandbox(true);
//支付类, 所有方法都在这个类里
BestPayServiceImpl bestPayService = new BestPayServiceImpl();
bestPayService.setWxPayConfig(wxPayConfig);
bestPayService.setAliPayConfig(aliPayConfig);
(3)发起支付
PayRequest payRequest = new PayRequest();
payRequest.setPayTypeEnum(BestPayTypeEnum.WXPAY_H5);
payRequest.setOrderId("123456");
payRequest.setOrderName("微信公众账号支付订单");
payRequest.setOrderAmount(0.01);
payRequest.setOpenid("openid_xxxxxx");
bestPayService.pay(payRequest);
(4)异步回调
bestPayService.asyncNotify();