SpringBoot对接微信APP端支付和支付宝公钥证书版APP端支付
微信支付流程图 官方地址:地址

支付宝支付流程图 官方地址:地址

1. application.yml 配置 微信、支付宝支付必要的配置信息
weixinpayconfig:
appid:
mch_id:
key:
notify_url:
url: https://api.mch.weixin.qq.com/pay/unifiedorder
device_info: WEB
wx_package: Sign=WXPay
pay:
alipay:
gatewayUrl: https://openapi.alipay.com/gateway.do
appid:
app-private-key:
alipay-public-key:
notify-url:
app-Public-Key-Cert:
alipay-Public-Key-Cert:
alipay-Root-Cert:
2. 创建支付宝、微信、参数配置类
2.1 支付宝参数配置类
@Data
@Component
@ConfigurationProperties(prefix = "pay.alipay")
public class AlipayConfig {
private String gatewayUrl;
private String appid;
private String appPrivateKey;
private String alipayPublicKey;
private String appPublicKeyCert;
private String alipayPublicKeyCert;
private String alipayRootCert;
private String signType = "RSA2";
private String formate = "json";
private String charset = "UTF-8";
private String returnUrl;
private String notifyUrl;
private static int maxQueryRetry = 5;
private static long queryDuration = 5000;
private static int maxCancelRetry = 3;
private static long cancelDuration = 3000;
2.2 微信参数配置类
@Data
@Component
@ConfigurationProperties(prefix = "weixinpayconfig")
public class WeixinpayProperties {
private String appid;
private String mch_id;
private String device_info;
private String key;
private String url;
private String notify_url;
private String return_url;
private String wx_package;
3. Controller 层
@RestController
@RequestMapping("/appMan/payCon")
@Slf4j
public class AppPayManagerController {
@Autowired
private AppWeChatPayService weChatPayService;
@Autowired
private UserService userService;
@Autowired
private AppAlipayService alipayService;
@Autowired
private DictService dictService;
@Autowired
private AppPayService payService;
@SuppressWarnings("unused")
@ApiOperation("支付请求 拉取预付单")
@PostMapping("/pay")
public synchronized ResponseEntity<JsonResult> weixinpay(@RequestBody AppPayVO pay, HttpServletRequest request, HttpServletResponse response) throws Exception {
JsonResult r = new JsonResult();
if (StringUtils.isEmpty(pay.getPayType())) {
r.setStatus("0");
r.setMessage("请选择支付方式");
} else {
if ("0".equals(pay.getPayType())) {
r = weChatPayService.insert(pay,request);
} else if ("1".equals(pay.getPayType())) {
String body = "支付";
r = alipayService.createOrder(pay,body);
} else {
r.setStatus("0");
r.setMessage("请选择可用的支付方式");
}
}
return ResponseEntity.ok(r);
}
@RequestMapping("/weixinnotifyUrl")
public String notifyUrl(HttpServletRequest request) throws Exception {
return weChatPayService.notifyUrl(request);
}
@RequestMapping("/notify")
public String notify(HttpServletRequest request) {
boolean flag = alipayService.rsaCheckV1(request);
if (flag) {
String tradeStatus = request.getParameter("trade_status");
String outTradeNo = request.getParameter("out_trade_no");
String tradeNo = request.getParameter("trade_no");
boolean notify = alipayService.notify(tradeStatus, outTradeNo, tradeNo);
if (notify) {
return "success";
}
}
return "fail";
}
}
4. 微信 ServiceImpl 层
@Slf4j
@Service
@Transactional
public class AppWeChatPayServiceImpl implements AppWeChatPayService {
@Autowired
private AppPayInfoDao payInfoDao;
@Autowired
private WeixinpayConfig weixinpayConfig;
@Autowired
private DictService dictService;
@Autowired
UserDao userMapper;
public JsonResult insert(AppPayVO pay, HttpServletRequest request) {
JsonResult r = new JsonResult();
String orderNo = DateUtils.dateStr3(new Date());
double