微信 - 接口配置及外网映射《巨详细》

1成为微信开发者

  • 申请微信公众号
  • 补全基本资料,公众帐号头像、描述和运营地区。

2 接口配置

  • 进入配置页面:基本配置 > 修改配置
微信 - 接口配置及外网映射《巨详细》_第1张图片

其中

  • URL:指的是能够接收处理微信服务器发送的GET/POST请求的地址,并且是已经存在的,现在就能够在浏览器访问到的地址,这就要求我们先把公众帐号后台处理程序开发好(至少应该完成了对GET请求的处理)并部署在公网服务器上,如果是测试的话可以使用ngrok(一会详细会讲使用说明 )

  • Token :可以自己随意填,但是要和后面服务器的保持一致

3 填写服务器配置


微信 - 接口配置及外网映射《巨详细》_第2张图片

点击提交后,服务器会收到由微信服务器发送过来的GET请求,请求参数如下:

  • signature :微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
  • timestamp 时间戳
  • nonce 随机数
  • echostr 随机字符串

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

4 具体代码(JAVA)

DealServlet.class 核心处理类

@WebServlet("/do")
public class DealServletextends HttpServlet {  
    private static final long serialVersionUID = 4440739483644821986L;  
  
    /** 
     * 确认请求来自微信服务器 
     */  
    public 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 (SignUtil.checkSignature(signature, timestamp, nonce)) {  
            out.print(echostr);  
        }  
        out.close();  
        out = null;  
    }  
  
    /** 
     * 处理微信服务器发来的消息 
     */  
    public void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException {  
        // TODO 消息的接收、处理、响应  
    }  
  
} 

SignUtil.class 校验工具类

public class SignUtil {  
    // 与接口配置信息中的Token要一致  
    private static String token = "weixinhaha";  
  
    /** 
     * 验证签名 
     *  
     * @param signature 
     * @param timestamp 
     * @param nonce 
     * @return 
     */  
    public static boolean checkSignature(String signature, 
        String timestamp, String nonce) {  
        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]);  
        }  
        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;  
    }  
}  

其中需要注意的一点就是SignUtil类中的Token需要和服务器配置的Token保持一致,这样编码就结束了。

果在服务器配置的时候填的是外网地址,那么点击提交后会显示提交成功了。

没有外网地址的童靴可以往下看咯

5 ngrok外网映射


  1. 首先我们需要先下载ngrok,自行百度下载。
  2. 下载完后,进行解压。
  3. 创建一个批处理文件,并进行编辑
微信 - 接口配置及外网映射《巨详细》_第3张图片
ngrok
  1. 运行该批处理
微信 - 接口配置及外网映射《巨详细》_第4张图片
运行成功

这样整个配置就结束了

微信 - 接口配置及外网映射《巨详细》_第5张图片
测试

当我们看到这个页面就说明我们配置成功了,只需要将该地址放入服务器配置中的url点击提交即可

微信 - 接口配置及外网映射《巨详细》_第6张图片
提交成功

《待续》
喜欢的话戳一下喜欢呗。
有什么建议的话希望大家能在下方回复

你可能感兴趣的:(微信 - 接口配置及外网映射《巨详细》)