mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-04-30 12:47:46 +08:00

* 增加 微信第三方平台 接口 * WxOpenXmlMessage 消息处理 * 增加 摇周边部分接口 * fix * fix * rebase * 增加 摇周边部分接口 * fix * fix * unix 换行符 * fix 三方接口BUG * fix URL 错误 * WxOpenMpServiceImpl 修改为包可见,防止用户混淆 WxOpenXmlMessage 增加 加密 WxMpXmlOutMessage接口 MpConfigStorage 返回aeskey和token MpService可以直接加密 增加 全网发布用例
89 lines
5.2 KiB
Markdown
89 lines
5.2 KiB
Markdown
消息机制未实现,下面为通知回调中设置的代码部分
|
||
|
||
以下代码可通过腾讯全网发布测试用例
|
||
```
|
||
@RestController
|
||
@RequestMapping("notify")
|
||
public class NotifyController extends WechatThridBaseController {
|
||
@Autowired
|
||
protected WxOpenServiceDemo wxOpenService;
|
||
@RequestMapping("receive_ticket")
|
||
public Object receiveTicket(@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) {
|
||
this.logger.info(
|
||
"\n接收微信请求:[signature=[{}], encType=[{}], msgSignature=[{}],"
|
||
+ " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ",
|
||
signature, encType, msgSignature, timestamp, nonce, requestBody);
|
||
|
||
if (!StringUtils.equalsIgnoreCase("aes", encType) || !wxOpenService.getWxOpenComponentService().checkSignature(timestamp, nonce, signature)) {
|
||
throw new IllegalArgumentException("非法请求,可能属于伪造的请求!");
|
||
}
|
||
|
||
// aes加密的消息
|
||
WxOpenXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedXml(requestBody, wxOpenService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature);
|
||
this.logger.debug("\n消息解密后内容为:\n{} ", inMessage.toString());
|
||
String out = null;
|
||
try {
|
||
out = wxOpenService.getWxOpenComponentService().route(inMessage);
|
||
} catch (WxErrorException e) {
|
||
throw new ResponseException(ErrorCodeEnum.ERROR, e);
|
||
}
|
||
|
||
this.logger.debug("\n组装回复信息:{}", out);
|
||
|
||
return out;
|
||
}
|
||
@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) {
|
||
this.logger.info(
|
||
"\n接收微信请求:[appId=[{}], openid=[{}], signature=[{}], encType=[{}], msgSignature=[{}],"
|
||
+ " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ",
|
||
appId, openid, signature, encType, msgSignature, timestamp, nonce, requestBody);
|
||
logger.info("query:"+getHttpServletRequest().getQueryString()+"\nbody:"+requestBody);
|
||
if (!StringUtils.equalsIgnoreCase("aes", encType) || !wxOpenService.getWxOpenComponentService().checkSignature(timestamp, nonce, signature)) {
|
||
throw new IllegalArgumentException("非法请求,可能属于伪造的请求!");
|
||
}
|
||
|
||
String out = "";
|
||
// aes加密的消息
|
||
WxMpXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedMpXml(requestBody, wxOpenService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature);
|
||
this.logger.debug("\n消息解密后内容为:\n{} ", inMessage.toString());
|
||
// 全网发布测试用例
|
||
if (StringUtils.equalsAnyIgnoreCase(appId, "wxd101a85aa106f53e", "wx570bc396a51b8ff8")) {
|
||
try {
|
||
if (StringUtils.equals(inMessage.getMsgType(), "text")) {
|
||
if (StringUtils.equals(inMessage.getContent(), "TESTCOMPONENT_MSG_TYPE_TEXT")) {
|
||
out = new WxOpenCryptUtil(wxOpenService.getWxOpenConfigStorage()).encrypt(
|
||
WxMpXmlOutMessage.TEXT().content("TESTCOMPONENT_MSG_TYPE_TEXT_callback")
|
||
.fromUser(inMessage.getToUser())
|
||
.toUser(inMessage.getFromUser())
|
||
.build()
|
||
.toXml()
|
||
);
|
||
} else if (StringUtils.startsWith(inMessage.getContent(), "QUERY_AUTH_CODE:")) {
|
||
String msg = inMessage.getContent().replace("QUERY_AUTH_CODE:", "") + "_from_api";
|
||
WxMpKefuMessage kefuMessage = WxMpKefuMessage.TEXT().content(msg).toUser(inMessage.getFromUser()).build();
|
||
wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appId).getKefuService().sendKefuMessage(kefuMessage);
|
||
}
|
||
} else if (StringUtils.equals(inMessage.getMsgType(), "event")) {
|
||
WxMpKefuMessage kefuMessage = WxMpKefuMessage.TEXT().content(inMessage.getEvent() + "from_callback").toUser(inMessage.getFromUser()).build();
|
||
wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appId).getKefuService().sendKefuMessage(kefuMessage);
|
||
}
|
||
} catch (WxErrorException e) {
|
||
logger.error("callback", e);
|
||
}
|
||
}
|
||
return out;
|
||
}
|
||
}
|
||
```
|