Просмотр исходного кода

[接收微信回调][修改]

release_toaliyun_real
Stormeye Wu 7 лет назад
Родитель
Сommit
b3f81569a5
1 измененных файлов: 32 добавлений и 23 удалений
  1. +32
    -23
      mallinkAdmin/src/main/java/com/iformall/controller/WechatCalllbackController.java

+ 32
- 23
mallinkAdmin/src/main/java/com/iformall/controller/WechatCalllbackController.java Просмотреть файл

@@ -30,7 +30,7 @@ public class WechatCalllbackController extends BaseController {

@RequestMapping(value = "/notify", method = RequestMethod.POST)
public Object receiveTicket(HttpServletRequest request) throws IOException {
logger.info("[" +getIpAddr() + "]接收微信请求");
logger.info("[" +getIpAddr() + "]接收微信请求 /wxOpen/notify");
InputStream inStream = request.getInputStream();
ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
@@ -44,21 +44,16 @@ public class WechatCalllbackController extends BaseController {
outSteam.close();
inStream.close();

Map map = request.getParameterMap();
logger.info(map.toString());
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String signature = request.getParameter("signature");
String encType = request.getParameter("encrypt_type");
String msgSignature= request.getParameter("msg_signature");

return "success";
}

@RequestMapping(value = "/notify1", method = RequestMethod.POST)
public Object receiveTicket1(@RequestBody(required = false) String requestBody, @RequestParam("timestamp") String timestamp,
@RequestParam("nonce") String nonce, @RequestParam("signature") String signature,
@RequestParam(name = "encrypt_type", required = false) String encType,
@RequestParam(name = "msg_signature", required = false) String msgSignature) {
logger.info(
"\n接收微信请求:[signature=[{}], encType=[{}], msgSignature=[{}],"
+ " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ",
signature, encType, msgSignature, timestamp, nonce, requestBody);
signature, encType, msgSignature, timestamp, nonce, resultxml);

if (!StringUtils.equalsIgnoreCase("aes", encType)
|| !wxOpenService.getWxOpenComponentService().checkSignature(timestamp, nonce, signature)) {
@@ -66,7 +61,7 @@ public class WechatCalllbackController extends BaseController {
}

// aes加密的消息
WxOpenXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedXml(requestBody,
WxOpenXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedXml(resultxml,
wxOpenService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature);
this.logger.debug("\n消息解密后内容为:\n{} ", inMessage.toString());
try {
@@ -80,18 +75,32 @@ public class WechatCalllbackController extends BaseController {
}

@RequestMapping("/{appId}/callback")
public Object callback(@RequestBody(required = false) String requestBody,
@PathVariable("appId") String appId,
@RequestParam("signature") String signature,
@RequestParam("timestamp") String timestamp,
@RequestParam("nonce") String nonce,
@RequestParam("openid") String openid,
@RequestParam("encrypt_type") String encType,
@RequestParam("msg_signature") String msgSignature) {
public Object callback(@PathVariable("appId") String appId, HttpServletRequest request) throws IOException {
logger.info("[" +getIpAddr() + "]接收微信请求 /{appId}/callback");
InputStream inStream = request.getInputStream();
ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
outSteam.write(buffer, 0, len);
}
String resultxml = new String(outSteam.toByteArray(), Charset.forName("UTF-8"));
logger.info(resultxml);

outSteam.close();
inStream.close();

String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String signature = request.getParameter("signature");
String encType = request.getParameter("encrypt_type");
String openid = request.getParameter("openid");
String msgSignature= request.getParameter("msg_signature");

logger.info(
"\n接收微信请求:[appId=[{}], openid=[{}], signature=[{}], encType=[{}], msgSignature=[{}],"
+ " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ",
appId, openid, signature, encType, msgSignature, timestamp, nonce, requestBody);
appId, openid, signature, encType, msgSignature, timestamp, nonce, resultxml);
if (!StringUtils.equalsIgnoreCase("aes", encType)
|| !wxOpenService.getWxOpenComponentService().checkSignature(timestamp, nonce, signature)) {
throw new IllegalArgumentException("非法请求,可能属于伪造的请求!");
@@ -99,7 +108,7 @@ public class WechatCalllbackController extends BaseController {

String out = "";
// aes加密的消息
WxMpXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedMpXml(requestBody,
WxMpXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedMpXml(resultxml,
wxOpenService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature);
this.logger.debug("\n消息解密后内容为:\n{} ", inMessage.toString());
// 全网发布测试用例


Загрузка…
Отмена
Сохранить