标签:
第三方平台设置了:授权事件接受URL
该URL主要有两个作用:
(1)微信服务器每隔10分钟定时推送component_verify_ticket。第三方平台方收到ticket
(2)如果公众号取消了第三方平台的授权,微信服务器会通过这个url告知第三方平台。
public String receiveAuth() {
String msgSignature = getRequest().getParameter("msg_signature");
String timestamp = getRequest().getParameter("timestamp");
String nonce = getRequest().getParameter("nonce");
logger.info("msgSignature:" + msgSignature + ",timestamp:" + timestamp+ ",nonce:" + nonce);
try {
BufferedReader br = new BufferedReader(new InputStreamReader(getRequest().getInputStream()));
String line = null;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line);
}
String encStr = sb.toString();
//解密推送信息
if (encStr != null) {
WXBizMsgCrypt pc = new WXBizMsgCrypt(Constants.WX_OPEN_TOKEN,Constants.WX_OPEN_ENCODING_AESKEY,Constants.WX_OPEN_APPID);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
StringReader sr = new StringReader(encStr);
InputSource is = new InputSource(sr);
Document document = db.parse(is);
Element root = document.getDocumentElement();
NodeList nodelist1 = root.getElementsByTagName("Encrypt");
String encrypt = nodelist1.item(0).getTextContent();
String format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>";
String fromXML = String.format(format, encrypt);
String resultXml = pc.decryptMsg(msgSignature, timestamp,nonce, fromXML);
Map<String, String> xmlMap = MessageUtil.praseXmlString2Map(resultXml);
if(StringUtils.isNotNull(xmlMap.get("InfoType")) && "unauthorized".equals(xmlMap.get("InfoType"))){
String appid = xmlMap.get("AuthorizerAppid");
WxAccount account = new WxAccount();
account.setAccountappid(appid);
account = wxAccountService.getWxAccount(account);
if(account != null){
//公众号取消授权,设置相应的状态标志
account.setStatus(0);
wxAccountService.updateWxAccount(account);
logger.error("wx_account Cancel authorization set status = 0 appid="+appid);
}
}
// 将component_verify_ticket存入redis数据库
String ticket = xmlMap.get("ComponentVerifyTicket");
if(StringUtils.isNotNull(ticket)){
Constants.WX_OPEN_COMPONENT_VERIFY_TICKET = ticket;
logger.info("ComponentVerifyTicket:"+ ticket);
jedis = pool.getShardedJedisPool().getResource();
jedis.set("ComponentVerifyTicket", ticket);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/u013628152/article/details/46827803