package com.ruoyi.order.controller.miniapp;
|
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.web.controller.BaseController;
|
import com.ruoyi.order.domain.dto.AppSureOrderDto;
|
import com.ruoyi.order.domain.dto.WXPayNotifyDto;
|
import com.ruoyi.order.domain.vo.AppSureOrderVo;
|
import com.ruoyi.order.service.order.OrderService;
|
import com.wechat.pay.contrib.apache.httpclient.notification.Notification;
|
import com.wechat.pay.contrib.apache.httpclient.notification.NotificationHandler;
|
import com.wechat.pay.contrib.apache.httpclient.notification.NotificationRequest;
|
import com.wechat.pay.java.core.Config;
|
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
|
import com.wechat.pay.java.core.RSAConfig;
|
import com.wechat.pay.java.core.cipher.PrivacyEncryptor;
|
import com.wechat.pay.java.core.notification.NotificationConfig;
|
import com.wechat.pay.java.core.notification.NotificationParser;
|
import com.wechat.pay.java.core.notification.RequestParam;
|
import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import net.bytebuddy.asm.Advice;
|
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMethod;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.BufferedReader;
|
import java.io.IOException;
|
import java.nio.charset.StandardCharsets;
|
import java.util.HashMap;
|
import java.util.Map;
|
|
/**
|
* @program: ruoyi
|
* @author: linqingsong
|
* @create: 2023-07-22 17:20
|
* @description: 成都软思同创科技有限公司
|
**/
|
@Api(value = "微信通知控制", tags = "微信通知控制", description = "微信通知控制")
|
@RestController
|
@RequestMapping("/app/notify")
|
public class NotifyController extends BaseController {
|
/** 商户号 */
|
public static String merchantId = "";
|
/** 商户API私钥路径 */
|
public static String privateKeyPath = "";
|
/** 商户证书序列号 */
|
public static String merchantSerialNumber = "";
|
/** 微信支付平台证书路径 */
|
public static String wechatPayCertificatePath = "";
|
/** 商户APIV3密钥 */
|
public static String apiV3key = "...";
|
|
@Resource
|
private OrderService orderService;
|
|
@RequestMapping(value = "/payNotify", method = RequestMethod.POST)
|
@ApiOperation(value = "微信支付通知")
|
public Map payNotify(HttpServletRequest request, HttpServletResponse response) {
|
Config config =
|
new RSAConfig.Builder()
|
.merchantId(merchantId)
|
.privateKeyFromPath(privateKeyPath)
|
.merchantSerialNumber(merchantSerialNumber)
|
.wechatPayCertificatesFromPath(wechatPayCertificatePath)
|
.build();
|
|
PrivacyEncryptor encryptor = config.createEncryptor();
|
String wechatPayCertificateSerialNumber = encryptor.getWechatpaySerial();
|
|
|
String nonoc=request.getHeader("Wechatpay-Nonce");
|
String signature=request.getHeader("Wechatpay-Signature");
|
String timestamp=request.getHeader("Wechatpay-Timestamp");
|
String serial=request.getHeader("Wechatpay-Serial");
|
String signatureType=request.getHeader("Wechatpay-Signature-Type");
|
|
String requestBody="";
|
|
try {
|
BufferedReader reader = request.getReader();
|
String line = "";
|
StringBuffer inputString = new StringBuffer();
|
while ( (line = reader.readLine()) != null ) {
|
inputString.append(line);
|
}
|
if(inputString!=null && !"".equals(inputString)) {
|
requestBody = inputString.toString();
|
}
|
reader.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
|
RequestParam requestParam = new RequestParam.Builder()
|
.serialNumber(wechatPayCertificateSerialNumber)
|
.nonce(nonoc)
|
.signature(signature)
|
.timestamp(timestamp)
|
.body(requestBody)
|
.build();
|
|
NotificationConfig notifiConfig = new RSAAutoCertificateConfig.Builder()
|
.merchantId(merchantId)
|
.privateKeyFromPath(privateKeyPath)
|
.merchantSerialNumber(merchantSerialNumber)
|
.apiV3Key(apiV3key)
|
.build();
|
|
NotificationParser parser = new NotificationParser(notifiConfig);
|
|
Transaction transaction = parser.parse(requestParam, Transaction.class);
|
|
|
String tradeStateEnum=transaction.getTradeState().toString();
|
if(tradeStateEnum.equals("success")){
|
String outTradeNo=transaction.getOutTradeNo();
|
orderService.payBack(outTradeNo);
|
}
|
|
Map map=new HashMap();
|
map.put("code","SUCCESS");
|
map.put("message","成功");
|
|
return map;
|
}
|
|
}
|