Get the App
SLTechnology News&Howtos  ›  Development  › 

Sample Analysis of token Authentication and message processing developed by Wechat Public platform

Shulou Source: shulou.com Published: 2022-06-03 15:56:38 10月19日 Update

This article mainly introduces the Wechat public platform development of token authentication and message processing example analysis, has a certain reference value, interested friends can refer to, I hope you can learn a lot after reading this article, the following let the editor take you to know about it.

/ * * @ Description: Wechat message processing and user grouping * / public class WeiXinMessageAction extends BaseAction {/ * * * / private static final long serialVersionUID = 1L; private IFeWeiXinMessageService weiXinExternalService; private String wxNo; public String responseMessgaeInfo () {Boolean isGet = request.getMethod () .equalsIgnoreCase ("GET"); if (isGet) {validateSignature () } else {saveWxMessage ();} return null;} / * * @ Description: receive post save accepted messages save only MsgType information of type text * @ 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 () / / Save text messages only / / time System.out.println ("receive 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 incoming CreateTime is converted to long type * @ param @ param createTime * @ param @ return * @ return Date * @ throws * / private Date formatTime (String createTime) {long msgCreateTime = Long.parseLong (createTime) * 1000L; return new Date (msgCreateTime) } / * * @ Description: verify Wechat 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: judge whether token is legal * @ param @ param signature * @ param @ param timestamp * @ param * @ param @ return * @ return boolean * @ throws * / private boolean checkSignature (String signature, String timestamp String nonce) {/ / obtain token based on Wechat account and verify 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 = null; 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; } // 将字节转换为十六进制字符串 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 a byte array to a hexadecimal string private static String byteToStr (byte [] bytearray) {String strDigest = "; for (int I = 0; I < bytearray.length; iTunes +) {strDigest + = byteToHexStr (bytearay [I]) } return strDigest;} Thank you for reading this article carefully. I hope the article "sample Analysis of token Authentication and message processing in the Development of Wechat Public platform" shared by the editor will be helpful to you. At the same time, I hope you will support us and pay attention to the industry information channel. More related knowledge is waiting for you to learn!

Tags: Messages articles processing public platform examples analysis development validation type legality value information interest content hexadecimal simultaneously characters strings bytes Apple Docker Huawei Linux macOS MariaDB Microsoft MySQL NVidia OPPO Reno vpn Linux Shulou Technology Docker Redmi