支付系统:准备工作

一、支付场景

1、微信支付官方文档:https://pay.weixin.qq.com/static/product/product_index.shtml

img

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

img

二、项目初始化

新建一个pay项目,初始化流程参照第三篇笔记

https://blog.csdn.net/qq464383828/article/details/113807696

三、微信Native支付

Native支付是指商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。

由于微信支付必须要求企业资质,个人无法实现,下图为native支付流程图,以供了解。

img

四、支付宝支付

1、支付宝沙盒环境测试配置

支付宝有专门的沙盒环境用于支付测试,无需企业资质。

(1)进入支付宝开放平台https://openhome.alipay.com/platform/appDaily.htm?tab=info

img

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

img

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

img

(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();

发表评论

后才能评论