Token verification and message processing methods for WeChat public platform development

Source: Internet
Author: User
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!

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.