This article introduces token verification and message processing methods for public platform development. This article introduces token verification and message processing methods for public platform development.
/***** @ Description: message processing and user group * @ author zhangjun * @ date 10:51:51 */public class WeiXinMessageAction extends BaseAction {/***/private static final long serialVersionUID = 1L; private IFeWeiXinMessageService weiXinExternalService; private String wxNo; public String responseMessgaeInfo () {Boolean isGet = request. getMethod (). inclusignorecase ("GET"); if (isGet) {validateSignature ();} else {saveWxMessage ();} return null;}/*** @ Description: receive post save accept message save only MsgType type is text information * @ param * @ return void * @ throws */private void saveWxMessage () {InputStream inputStream; try {request. setCharacterEncoding ("UTF-8"); Document doc = null; SAXReader reader = new SAXReader (); inputStream = request. getInputStream (); doc = reader. read (inputStream); Element root = doc. getRootElement (); String toUserName = root. element ("ToUserName "). getTextTrim (); String fromUserName = root. element ("FromUserName "). getTextTrim (); String content = root. element ("Content "). getTextTrim (); String msgType = root. element ("MsgType "). getTextTrim (); String msgId = root. element ("MsgId "). getTextTrim (); String createTime = root. element ("CreateTime "). getTextTrim (); // only save text messages // time System. out. println ("received message content:" + content + "--------------- msgType:" + msgType); if (WeiXinMsgType. TEXT. type. equals (msgType) {weiXinExternalService. addWxMessage (toUserName, fromUserName, content, msgType, msgId, formatTime (createTime) ;}} catch (Exception e) {e. printStackTrace () ;}/ ***** @ Description: the input CreateTime is converted to the long type * @ param createTime * @ param @ return * @ return Date * @ throws */private Date formatTime (String createTime) {long msgCreateTime = Long. parseLong (createTime) * 1000L; return new Date (msgCreateTime);}/***** @ Description: verify the signature * @ param * @ return void * @ throws */private void validateSignature () {PrintWriter out = null; try {String signature = request. getParameter ("signature"); String timestamp = request. getParameter ("timestamp"); String nonce = request. getParameter ("nonce"); out = response. getWriter (); if (checkSignature (signature, timestamp, nonce) {out. print (request. getParameter ("echostr");} catch (Exception e) {e. printStackTrace ();} finally {out. close (); out = null;}/***** @ Description: determine whether the token is valid * @ param signature * @ param timestamp * @ param nonce * @ param @ return * @ return boolean * @ throws */private boolean checkSignature (string signature, string timestamp, String nonce) {// Obtain the token based on the account and verify the Map
Map = new HashMap
(); Map. put ("wxNo", wxNo); WeiXinMasterConfig masterConfig = weiXinExternalService. selectWeiXinMasterConfig (map); if (masterConfig = null) {return false;} String [] arr = new String [] {masterConfig. getWxToken (), timestamp, nonce}; Arrays. sort (arr); StringBuilder content = new StringBuilder (); for (int I = 0; I <arr. length; I ++) {content. append (arr [I]);} MessageDigest md = null; String tmpStr = nul L; try {md = MessageDigest. getInstance ("SHA-1"); byte [] digest = md. digest (content. toString (). getBytes (); tmpStr = byteToStr (digest);} catch (NoSuchAlgorithmException e) {e. printStackTrace ();} content = null; return tmpStr! = Null? TmpStr. equals (signature. toUpperCase (): false;} // Convert bytes to a hexadecimal String private static String byteToHexStr (byte ib) {char [] Digit = {'0 ', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A ', 'B', 'C', 'D', 'e', 'F'}; char [] ob = new char [2]; ob [0] = Digit [(ib >>> 4) & 0X0F]; ob [1] = Digit [ib & 0X0F]; String s = new String (ob ); return s;} // Convert the byte array to a hexadecimal String private static String byteToStr (byte [] bytearray) {String strDigest = ""; for (int I = 0; I <bytearray. length; I ++) {strDigest + = byteToHexStr (bytearray [I]);} return strDigest ;}
The above is the details of the token verification and message processing methods developed by the public platform. For more information, see other related articles on php Chinese network!