编程学习微信开发首页投稿(暂停使用,暂停投稿)

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

2017-01-07  本文已影响639人  司鑫

1成为微信开发者

2 接口配置

其中

3 填写服务器配置


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

服务器需会对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. 创建一个批处理文件,并进行编辑
ngrok
  1. 运行该批处理
运行成功

这样整个配置就结束了

测试

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

提交成功

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

上一篇 下一篇

猜你喜欢

热点阅读