微信公众平台开发2 您所在的位置:网站首页 systemsettingsviewmodel 微信公众平台开发2

微信公众平台开发2

2023-01-16 01:57| 来源: 网络整理| 查看: 265

接入指南 一、填写服务器配置 在测试号管理中填写接口配置信息 这里写图片描述

服务器地址URL,URL是开发者用来接收微信消息和事件的接口URL; Token可以任意填写; 这是测试时填写的,真实项目的填写还要填写EncodingAESKey,可以由开发者手动填写或随机生成,将用作消息体加解密密钥; 开发者还可选择消息加解密方式:明文模式、兼容模式和安全模式; 具体可参看开发者文档。 二、验证服务器地址的有效性 开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数

这里写图片描述

通过检验signature对请求进行校验。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

加密/校验流程如下: 1. 将token、timestamp、nonce三个参数进行字典序排序 2. 将三个参数字符串拼接成一个字符串进行sha1加密 3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

示例代码: WebChatCallBackServlet:

public class WebChatCallBackServlet extends HttpServlet { /** * 确认请求来自微信服务器 */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 微信加密签名 String signature = request.getParameter("signature"); // 时间戳 String timestamp = request.getParameter("timestamp"); // 随机数 String nonce = request.getParameter("nonce"); // 随机字符串 String echostr = request.getParameter("echostr"); PrintWriter out = response.getWriter(); // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败 if (SignatureUtil.checkSignature(signature, timestamp, nonce)) { out.print(echostr); } out.close(); out = null; } /** * 处理微信发来的请求 */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }

SignatureUtil类:

/** * 验证Signature工具类 * @author 洋 * */ public class SignatureUtil { // 与接口配置信息中的Token要一致 private static String token = "weixin101"; /** * 验证签名 * * @param signature * @param timestamp * @param nonce * @return */ public static boolean checkSignature(String signature, String timestamp, String nonce) { boolean isEqual=false; String[] arr = new String[] { token, timestamp, nonce }; // 将token、timestamp、nonce三个参数进行字典序排序 Arrays.sort(arr); //三个参数组合成一个字符串 StringBuilder content = new StringBuilder(); for (int i = 0; i < arr.length; i++) { content.append(arr[i]); } String tmpStr = null; //进行SHA1加密,返回16进制字符串 tmpStr=encryptSHA1(content.toString()); // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信 if(tmpStr!=null&&tmpStr.equals(signature)){ isEqual=true; }else{ isEqual=false; } content = null; return isEqual; } /** * SHA1加密 * * @param data * @return */ public static String encryptSHA1(String data){ String str=null; try { // 获得SHA1摘要算法的 MessageDigest 对象 MessageDigest md=MessageDigest.getInstance("SHA-1"); // 使用指定的字节更新摘要 md.update(data.getBytes()); //获得密文 byte[] bytes=md.digest(); //字节数组转化为16进制字符串 str=bytesToHexString(bytes); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } return str; } /** * 字节数组转化为16进制字符串 * @param bytes * @return */ public static String bytesToHexString(byte[] bytes){ StringBuffer sb=new StringBuffer(); if(bytes==null||bytes.length


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有