200.微信公众号开发【接入】

第一步:申请微信公众号

https://mp.weixin.qq.com/

200.微信公众号开发【接入】

200.微信公众号开发【接入】

200.微信公众号开发【接入】

 

200.微信公众号开发【接入】

注意,个人只能选择订阅号

200.微信公众号开发【接入】

这里需要注意,要用一个绑定了银行卡的微信号扫码才能注册。

 

第二步:公众号开发环境准备

  1. 需要一个微信公众号
  2. 需要一个外网映射工具(如ngrok、花生壳、NAT123等),直接是公网IP的忽略这条。

与微信对接的URL需要具备的条件:

  1. 公网上能访问
  2. 需要支持80端口(58.xxx.194.xx正好支持80和公网,所以上面第2条忽略)

注意:早期是可以使用IP地址的,现在必须使用认证的域名

200.微信公众号开发【接入】

200.微信公众号开发【接入】

Ngrok是国外的服务器,不太稳定,可以寻找国内的,比如Tunnel(现在失效了)

200.微信公众号开发【接入】

映射完成后得到:

200.微信公众号开发【接入】

第三步:进入开发模式,查看接入指南

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319&token=&lang=zh_CN

200.微信公众号开发【接入】

两个是互斥的,开启开发模式,编辑模式就失效;开启编辑模式,开发模式就失效

200.微信公众号开发【接入】

第四步:开始接入微信【doGet做验证,doPost做消息处理

  1. 创建一个Java Web项目
  2. 创建一个Servlet,在Servlet中的Get方法中接受服务器发来的几个参数
  3. 创建一个工具类,用来验证服务器发来的参数(具体验证方法微信有要求)

1)将token、timestamp、nonce三个参数进行字典序排序(token是自己随便填的)

2)将三个参数字符串拼接成一个字符串进行sha1加密

3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

public class CheckUtil {

    private static final String token = "njusttz";

    public static boolean checkSignatrue(String signature,String timestamp,String nonce){

       String[] arr = new String[]{token,timestamp,nonce};

       //对网络上传来的三个参数排序

       Arrays.sort(arr);

       //拼接成字符串

       StringBuffer content = new StringBuffer();

       for(int i = 0; i<arr.length;i++){

           content.append(arr[i]);

       }

       //SHA1加密

       String temp = SHA1.hex_sha1(content.toString());

      

       return temp.equals(signature);

    }

}

下面是Servlet中的doGet方法

@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();

       //校验

       if(CheckUtil.checkSignatrue(signature, timestamp, nonce)){

           out.print(echostr);

       }

   }

然后用公网IP进行测试一下Servlet,因为没有传参数,所以结果是:200.微信公众号开发【接入】

500服务器错误,说明已经访问到了服务器。

第五步:将这个Servlet地址配置到微信平台

在开发—》基本配置 里设置如下:

200.微信公众号开发【接入】

完成后点击提交,如果提交成功,就说明接入成功了。