(一)微信公众号环境搭建与开发接入

一、微信公众号平台

微信公众平台,即我们平时所说的“公众号”,曾用名“官方平台”、“媒体平台”,但最终命名为“公众平台”。从微信的命名我可以发现,公众平台不只是官方、媒体使用的平台,而是对所有公众都开放的统一平台。

微信公众平台地址:https://mp.weixin.qq.com/

微信公众平台公分4大板块:订阅号、服务号、小程序、企业号。本次学习主要针对订阅号。

二、开发账号准备

  1. 账号注册

进入微信公众平台https://mp.weixin.qq.com ,点击右上角立即注册,选择“服务号”或“订阅号”注册(服务号仅限机构用户注册,个人用户只能选择订阅号)

注册账号自行准备

  1. 测试账号申请

3、登陆微信号

三、开发环境准备

外网映射工具

微信公众平台在访问后台时,必须提供能够正确访问的外网地址,微信平台对后台URL的要求有两点:

① 必须能够用公网访问    ② 必须使用80端口

要实现以上两点,我们可以选择购买外网服务器,例如:阿里云、百度云、腾讯云…都是不错的选择。如果没有服务器,可以选择用外网映射工具,将 我们的内网链接映射为公网,比较不错的映射软件有:花生壳、ngrok、nat123、natapp等…

个人推荐使用natapp

使用教程可以参靠这篇文章https://blog.csdn.net/ejinxian/article/details/76061059

四、微信公众平台数据交互原理

五、开发模式接入

参照官方提供的开发文档接入指南:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319

  1. 填写服务器基本配置

进入微信公众平台,点击左侧【开发——基本配置】,选择【服务器配置】。即可进入配置页面:

URL:即我们后台服务器公网访问地址

Token:开发者自定的验证口令

EncodingAESKey:随机字符串,如果消息加解密方式采用安全模式才需验证

测试服务器可以参照下图:

进入微信公众平台,点击左侧【开发——开发者工具】,选择【公众平台测试账号】,接口配置信息。即可进入配置页面:

配置好之后先不要提交,此时提交会提示配置错误!

2、验证消息的确来自微信服务器

   

六、开发接入后台代码

项目结构:

WeiXinServlet类: 

public class WeiXinServlet extends HttpServlet{	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		String signature = req.getParameter("signature");
		String timestamp = req.getParameter("timestamp");
		String nonce = req.getParameter("nonce");
		String echostr = req.getParameter("echostr");
		PrintWriter out = resp.getWriter();
		if(CheckUtil.checkSignature(signature, timestamp, nonce)) {
			//如果校验成功原路返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败
			out.print(echostr);
		}
	}
}

CheckUtil工具类:

private static final String token = "fei100";
	public static boolean checkSignature(String signature,String timestamp,String nonce) {
		//1、将token、timestamp、nonce三个参数进行字典序排序 
		String[] arr = new String[]{token,timestamp,nonce};
		Arrays.sort(arr);
		//2、将三个参数字符串拼接成一个字符串
		StringBuffer sb = new StringBuffer();
		for (String string : arr) {
			sb.append(string);
		}
		//3、将字符串进行sha1加密 
		String temp = getSha1(sb.toString());
		//4、开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
		return temp.equals(signature);
	}
	
	/**
	 * sha1加密
	 * @Title: getSha1
	 * @Description: TODO
	 * @param: @param str
	 * @param: @return   
	 * @return: String   
	 * @throws
	 */
	public static String getSha1(String str){
	   	 if (str==null || str.length() == 0) {
				return null;
			}
	   	 char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
	   	 try {
				MessageDigest mdTemp =MessageDigest.getInstance("SHA1");
				mdTemp.update(str.getBytes("UTF-8"));
				byte[] md = mdTemp.digest();
				int j =md.length;
				char buf[]=new char[j*2];
				int k=0;
				for(int i=0;i<j;i++){
					byte byte0=md[i];
					buf[k++]=hexDigits[byte0>>>4&0xf];
					buf[k++]=hexDigits[byte0 & 0xf];
				}
				return new String(buf);

			} catch (Exception e) {
				return null;
			}

	    }
}

 Web.xml:

启动tomcat,将Servlet的本地地址进行公网映射,参照上述第三大部分,进行公网映射,确定公网地址可以访问。

七、配置公众号平台

配置好URL和Token之后,点击提交,微信将发送GET请求指令到Servlet,调用doGet方法,验证此次GET请求是否来自微信服务器。

如果提交成功,则接入生效,成为开发者成功,否则接入失败。(dos命令也可以看到已经接入成功

猜你喜欢

转载自blog.csdn.net/swiftly_654123/article/details/82724218