微信小程序-支付封装
原则
拿来即用,节省开发时间
介绍
创建订单(统一下单),订单回调通知,查询订单,关闭订单
技术
springboot,java,fastjson,okhttp,mysql
使用方法
依赖
<properties>
<java.version>1.8</java.version>
<skipTests>true</skipTests>
</properties>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
支付配置
有xml和java两种方式,选择一种即可
weixin:
pay:
appId:
mchId:
mchPayApiKey:
notifyUrl:
@Component
public class WxPayConfig {
public static String APP_ID = "";//appId
public static String MCH_ID = "";//商户号
public static String MCH_PAY_API_KEY = "";//商户号 - API密钥
public static String NOTIFY_URL = "";//通知地址
@Value("${weixin.pay.appId}")
public void setAppId(String appId) {
WxPayConfig.APP_ID = appId;
}
@Value("${weixin.pay.mchId}")
public void setMchId(String mchId) {
WxPayConfig.MCH_ID = mchId;
}
@Value("${weixin.pay.mchPayApiKey}")
public void setMchPayApiKey(String mchPayApiKey) {
WxPayConfig.MCH_PAY_API_KEY = mchPayApiKey;
}
@Value("${weixin.pay.notifyUrl}")
public void setNotifyUrl(String notifyUrl) {
WxPayConfig.NOTIFY_URL = notifyUrl;
}
}
核心工具使用
//创建订单(统一下单)
WxPay.createOrder(openId, order, body, buyPrice, ipAddr);
//订单通知
WxPay.notify(request);
//订单查询
WxPay.queryOrder(outTradeNo);
//订单关闭
WxPay.closeOrder(outTradeNo);
Controller
/**
* 微信支付
*/
@RestController
@Slf4j
@RequestMapping("/api/wxpay/v2")
public class WxPayController {
//...省略业务代码
/**
* 创建订单(统一下单)
*
* @return
*/
@PostMapping("/createOrder")
@ApiModelProperty("统一下单")
public Result unifiedorder(@Validated JsapiParamModel jsapiParamModel, HttpServletRequest request) {
//...省略部分代码
//创建订单号
String order = WxPayUtil.createOrderNum();
//创建订单
WxPayResultModel<CreateOrderResultModel> wxPayResultModel = WxPay.createOrder(openId, order, body, buyPrice, WxPayUtil.getIpAddr(request));
if (jsapiResultModel.getIsSuccess()) {
//输入【业务代码】
//返回小程序调起支付参数
return ResultUtil.data(wxPayResultModel.getOther());
} else {
//返回失败提示
return ResultUtil.error(wxPayResultModel.getMessage());
}
}
/**
* 查询订单
* @param outTradeNo
* @return
*/
@GetMapping("/queryOrder/{outTradeNo}")
public Result queryOrder(@PathVariable String outTradeNo) {
//这里只需要查询数据库即可,无需调用查询接口
return ResultUtil.success("查询结果");
}
/**
* 关闭订单
* @param outTradeNo
* @return
*/
@GetMapping("/closeOrder/{outTradeNo}")
public Result closeOrder(@PathVariable String outTradeNo) {
WxPayResultModel<CloseOrderResultModel> resultModel = WxPay.closeOrder(request);
if(resultModel.getIsSuccess()){
//输入【业务代码】
return ResultUtil.success("关闭成功");
}else{
return ResultUtil.success(resultModel.getMessage());
}
}
/**
* 订单通知
*/
@RequestMapping("/notify")
public void notify(HttpServletRequest request, HttpServletResponse response) {
log.info("微信支付通知-收到通知");
String NOTIFY_FAIL = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[%s]]></return_msg></xml>";
//处理回调数据
WxPayResultModel<OrderNotifyResultModel> resultModel = WxPay.notify(request);
String result = (String) resultModel.getOther();
if (resultModel.getIsSuccess()) {
OrderNotifyResultModel orderNotifyResultModel = resultModel.getData();
//校验金额,防止篡改
PayOrderEntity payOrderEntity = payOrderService.findByOutTradeNo(orderNotifyResultModel.getOutTradeNo());
if (payOrderEntity.getBuyPrice().intValue() == Integer.parseInt(orderNotifyResultModel.getTotalFee())) {
//查询订单,查看最终处理结果
WxPayResultModel<QueryOrderResultModel> queryOrderResultModelWxPayResultModel = WxPay.queryOrder(orderNotifyResultModel.getOutTradeNo());
if (queryOrderResultModelWxPayResultModel.getIsSuccess()) {
QueryOrderResultModel queryOrderResultModel = queryOrderResultModelWxPayResultModel.getData();
//输入【业务代码】
} else {
result = String.format(NOTIFY_FAIL, queryOrderResultModelWxPayResultModel.getMessage());
}
} else {
result = String.format(NOTIFY_FAIL, "金额不相符");
}
}
log.info("微信支付通知-处理结果:{}", result);
WxPayUtil.outXml(response, result);
}
}
源码
https://download.youkuaiyun.com/download/qq_17702967/85306457
源码主要清单
1.核心工具(wxpayv2)【核心】
2.业务代码,数据库表(module)【可参考】
3.实现思路(README.md)
4.联系方式,可一对一帮你解决支付相关问题(README.md)
博客
https://blog.youkuaiyun.com/qq_17702967/article/details/124622002