目录
一、支付系统介绍
该支付系统实现了支付宝的网站支付功能(微信支付没有沙盒测试所以无法实现),系统接到支付需求后,将支付订单存入数据库,同时向支付宝发起支付请求,支付宝返回一个网站的xml,将其解析到浏览器中,即为网站支付页面,通过手机扫码完成支付,完成支付后,支付宝发起异步通知,支付系统接收到该通知,进行校验,确保用户支付成功,同时更新数据库,如下图所示为整个项目的结构。
二、代码解析
1、支付宝支付参数配置
支付宝支付的一些参数,如应用ID、商户私钥、支付宝公钥等参数,最好能够配置到application.yml中去,这样方便之后项目的多环境开发。
建一个包含需要用到的参数的配置类,加上@Component、@ConfigurationProperties(prefix = "alipay")、@Data注解
@Component
@ConfigurationProperties(prefix = "alipay")
@Data
public class AlipayAccountConfig {
private String appId;
private String privateKey;
private String aliPayPublicKey;
private String returnUrl;
private String notifyUrl;
private boolean sandbox;
}
在application.yml中进行配置,returnUrl是同步通知,是支付成功后跳转的页面,notifyUrl是异步通知,是用户支付后支付宝传过来的通知,切记不要弄反了,sandbox为是否是沙盒支付。
alipay:
appId: 2021000117610811
privateKey: "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCVoyWjqCdRlgbGsKMDCM/NwCQF3OXEbPJAb8wT2PKTtG4hRidy6MxUb/YcCZOgqY/8vh1fJHO1pmyuyySQc4i4HxNJIYHlmw0RCFWNGmMWZDXuPnF+81WUASLyG9k5+36qU9S+oLefVOnKwlEwF9i+Y0Ko3JV1catCW3TJ2VgfPxwUI8lO6HRDKl1kQeFf+bD2VWilNRMKtMYBQd/UagY+vNR7psYgDpeewrgxvQRFFxMeB2+ypcr+3IU4X3QI7gBV4h1KyJhWn3FO2taYnxkRIQ6CPajBy7dZ4NnjJk9T4vJ2eReiLgpVBCVC/2fUghO/S1ERtGwN3ikQiCfO0Xk9AgMBAAECggEAYfZ6GMdoXlBCxWc0gTMOoFuu+auhPNQ6UJcgWsoIHUzdYKlGAEOKKalWzQoz/NWlb0ijf/skSYLX2iMiH/OTST8G6DSojsHQbxsurv7cafdXG08EDKGPoCKSV0CGGSCdzzKsr9QWApibqmNGtZ6XBiWDqXsn2ch93yZysga5W1J2UfCRRhxqtCNdsJN5zFuB+KW4h6fqMAj50l8PC89g99IRxp7UKBC5AAiE03C/y5iZS/jmlCSGahSeyw3Zkr+kYkBqIt