第一步:准备参数 登录微信第三方网址:https://pay.weixin.qq.com/index.php/core/home/login?return_url=%2Findex.php
如图: 获取mcnID:
获取appId: 登录开发平台网址:https://open.weixin.qq.com
配置密钥:
第二步,引入jar包:
<dependency>
<groupId>com.egzosn</groupId>
<artifactId>pay-java-common</artifactId>
<version>2.10.2</version>
</dependency>
<dependency>
<groupId>com.egzosn</groupId>
<artifactId>pay-java-wx</artifactId>
<version>2.10.2</version>
</dependency>
jar包来源于git:地址:https://github.com/egzosn/pay-java-parent
第三步:配置参数:
扫描二维码关注公众号,回复:
3902498 查看本文章
private PayService service = null;
@PostConstruct
public void init() {
WxPayConfigStorage wxPayConfigStorage = new WxPayConfigStorage();
wxPayConfigStorage.setMchId("合作者id(商户号)");
wxPayConfigStorage.setAppid("应用id");
wxPayConfigStorage.setSecretKey("密钥");
wxPayConfigStorage.setNotifyUrl("异步回调地址");
wxPayConfigStorage.setSignType(SignUtils.MD5.name());
wxPayConfigStorage.setInputCharset("utf-8");
service = new WxPayService(wxPayConfigStorage);
HttpConfigStorage httpConfigStorage = new HttpConfigStorage();
//请求连接池配置
//最大连接数
httpConfigStorage.setMaxTotal(20);
//默认的每个路由的最大连接数
httpConfigStorage.setDefaultMaxPerRoute(10);
service.setRequestTemplateConfigStorage(httpConfigStorage);
}
第四步:供app提供创建订单信息接口:
/**
* 获取支付预订单信息
*
* @return 支付预订单信息
*/
@ApiOperation("返回订单信息")
@RequestMapping(value = "app", method = RequestMethod.POST)
public Map<String, Object> app(@RequestBody PayOrder order) {
init();
Map<String, Object> data = new HashMap<>();
data.put("state", 1);
//App支付
order.setTransactionType(WxTransactionType.APP);
data.put("orderInfo", service.orderInfo(order));
return data;
}
第五步:校验回调信息,设置业务逻辑:注意:此api,不需要设置api方法。否则,可能会回调不成功。
/**
* 支付回调地址
*
* @param request
*
* @return
*/
@ApiOperation("回调地址")
@RequestMapping(value = "payBack")
public String payBack(HttpServletRequest request) throws IOException {
init();
//获取支付方返回的对应参数
Map<String, Object> params = service.getParameter2Map(request.getParameterMap(), request.getInputStream());
if (null == params) {
return service.getPayOutMessage("fail", "失败").toMessage();
}
//校验
if (service.verify(params)) {
//这里处理业务逻辑
//......业务逻辑处理块........
String orderNo=(String)params.get("out_trade_no");
if(StringUtils.isNotBlank(orderNo)){
scmSalesOrderService.updateStatus(orderNo);
}
return service.getPayOutMessage("success", "成功").toMessage();
}
return service.getPayOutMessage("fail", "失败").toMessage();
}