将微信订阅号的用户消息发到自己的服务器
来源:互联网 发布:敏感肌肤如何美白 知乎 编辑:程序博客网 时间:2024/06/06 06:37
首先进入微信公众号的开发者中心,找到服务器配置如下图:
填写服务器的url 和token 如上图 具体代码如下:
@RequestMapping("/talk.do") public void Talk(HttpServletRequest request,HttpServletResponse response) { response.setCharacterEncoding("UTF-8"); boolean isGet = request.getMethod().toLowerCase().equals("get"); PrintWriter print; if (isGet) { // 微信加密签名 String signature = request.getParameter("signature"); // 时间戳 String timestamp = request.getParameter("timestamp"); // 随机数 String nonce = request.getParameter("nonce"); // 随机字符串 String echostr = request.getParameter("echostr"); // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败 if (signature != null && CheckoutUtil.checkSignature(StringConfig.Wen_Code,signature, timestamp, nonce)) { try { print = response.getWriter(); print.write(echostr); print.flush(); } catch (IOException e) { e.printStackTrace(); } } }else { try { // 接收消息并返回消息 new AcceptMessage().acceptMessage(request, response); } catch (IOException e) { e.printStackTrace(); } } }
微信的token 检验时get请求。
我们获取4个参数 如下代码
// 微信加密签名 String signature = request.getParameter("signature"); // 时间戳 String timestamp = request.getParameter("timestamp"); // 随机数 String nonce = request.getParameter("nonce"); // 随机字符串 String echostr = request.getParameter("echostr");
通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败 CheckoutUtil.checkSignature(StringConfig.Wen_Code,signature, timestamp, nonce))
checkSignature 的详细代码如下
public class CheckoutUtil { /** * 验证签名 * * @param signature * @param timestamp * @param nonce * @return */ public static boolean checkSignature(String token,String signature, String timestamp, String nonce) { String[] arr = new String[] { token, timestamp, nonce }; // 将token、timestamp、nonce三个参数进行字典序排序 // Arrays.sort(arr); 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"); // 将三个参数字符串拼接成一个字符串进行sha1加密 byte[] digest = md.digest(content.toString().getBytes()); tmpStr = byteToStr(digest); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } content = null; // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信 return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false; } /** * 将字节数组转换为十六进制字符串 * * @param byteArray * @return */ private static String byteToStr(byte[] byteArray) { String strDigest = ""; for (int i = 0; i < byteArray.length; i++) { strDigest += byteToHexStr(byteArray[i]); } return strDigest; } /** * 将字节转换为十六进制字符串 * * @param mByte * @return */ private static String byteToHexStr(byte mByte) { char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; char[] tempArr = new char[2]; tempArr[0] = Digit[(mByte >>> 4) & 0X0F]; tempArr[1] = Digit[mByte & 0X0F]; String s = new String(tempArr); return s; } public static void sort(String a[]) { for (int i = 0; i < a.length - 1; i++) { for (int j = i + 1; j < a.length; j++) { if (a[j].compareTo(a[i]) < 0) { String temp = a[i]; a[i] = a[j]; a[j] = temp; } } } }}
如果能返回正确的结果就代表接入成功了,之后就可以将微信订阅号的用户输入的内容,传到自己的服务器了。
阅读全文
0 0
- 将微信订阅号的用户消息发到自己的服务器
- 怎么获得第三方应用发到通知栏的消息
- jms的消息订阅模式
- Redis消息的发布/订阅
- 中小企业用户如何托管自己的服务器
- 直接发到邮箱的代码
- 啊俄国人热如果电饭锅发到发到的
- 消息发布-订阅服务器 Laharsub
- 消息发布-订阅服务器 Laharsub
- 创建一个属于自己的微信订阅号
- 《一》将关注订阅号用户的基本信息入库
- flex消息订阅找不到通道的问题
- 观察者模式:消息的发布与订阅
- 消息订阅系统的演变过程
- redis的消息发布订阅系统 php
- redis的消息订阅/发布总结
- jedis的消息订阅和发布实例
- Spring MVC + redis 消息的订阅发布
- 友链
- 震撼的一天
- Mybatis 获取不到接口参数问题
- 8086中断处理程序分析
- Linux配置网络信息
- 将微信订阅号的用户消息发到自己的服务器
- python初步编写用户登录
- SN多校模拟赛&&SNOI2016DAY1 kth
- 面试-JSP、SERVLET
- Web API接口设计经验总结
- C语言学习——动态数组
- 超级记忆法(2)
- 2017/08/24
- Android中odex 文件