引入依赖
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-pay</artifactId>
<version>${weixin-java-pay.version}</version>
</dependency>
获取请求ip
public static String getIpAddr(HttpServletRequest request)
{
if (request == null)
{
return "unknown";
}
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = request.getHeader("X-Forwarded-For");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = request.getHeader("X-Real-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = request.getRemoteAddr();
}
return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : EscapeUtil.clean(ip);
}
组装微信支付请求
public <T> T createWxOrder(ReqStringParam param) throws WxPayException {
WxPayService wxPayService = wxPayConfiguration.wxService();
WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
request.setAppid(wxPayService.getConfig().getAppId());
request.setMchId(wxPayService.getConfig().getMchId());
request.setDetail("交易描述");
request.setOutTradeNo(order.getOrderSn());
//支付回调地址
request.setNotifyUrl(wxPayService.getConfig().getNotifyUrl());
request.setFeeType("CNY");// 货币类型 人民币
// 支付金额
BigDecimal actualPrice = BigDecimal.valueOf(100L);
request.setTotalFee(actualPrice.multiply(BigDecimal.valueOf(100L)).intValue());
request.setSpbillCreateIp(IpUtils.getIpAddr(httpServletRequest));// 获取ip
request.setTradeType("JSAPI");// 交易类型
request.setBody("支付");
request.setOpenid(user.getWeixinOpenid());// 微信openId
//设置支付方式
return wxService.createOrder(request);
}
回调处理
public String parseWxOrderNotifyResult(String xmlData) throws WxPayException {
WxPayOrderNotifyResult wxPayOrderNotifyResult = wxService.parseOrderNotifyResult(xmlData);
String outtradeNo = wxPayOrderNotifyResult.getOutTradeNo();
MallOrder order = iMallOrderService.lambdaQuery().eq(MallOrder::getOrderSn, wxPayOrderNotifyResult.getOutTradeNo()).one();
if ("FAIL".equals(wxPayOrderNotifyResult.getResultCode())) {
// 失败业务逻辑处理
} else {
// 成功业务逻辑处理
}
return "<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> </xml>";
}