独角兽企业重金招聘Python工程师标准>>>
接入概述
接入微信公众号平台开发,开发者需要按照如下步骤完成:
1、填写服务器配置
2、验证服务器地址的有效性
3、依据接口文档实现业务逻辑
一、填写服务器配置
登录微信公众号平台官网后,在公众号平台开发基本设置页面,勾选协议成为开发者,点击修改配置按钮,填写服务器地址url、token和EncodingAESKey,其中url是开发者用来接收微信消息和事件接口的url。token可由开发者任意填写,用作生成签名(该token会和接口url中包含的token进行比对,从而验证安全性)EncodingAESKey由开发者手动填写或随机生成,将用作消息加解密密钥。
二、验证消息确实是来自微信服务器
开发者提交消息后,微信服务器将发送GET请求到填写到服务器地址URL上,GET请求携带参数如下表所示:
开发者通过校验signature对请求进行校验。若确认此次get请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败。
java代码:验证
public String access(HttpServletRequest request, HttpServletResponse response) {// 验证URL真实性logger.info("进入验证access");// 微信加密签名String signature = request.getParameter("signature");// 时间戳String timestamp = request.getParameter("timestamp");// 随机数String nonce = request.getParameter("nonce");// 随机字符串String echostr = request.getParameter("echostr");List<String> params = new ArrayList<String>();params.add(token);params.add(timestamp);params.add(nonce);// 1. 将token、timestamp、nonce三个参数进行字典序排序Collections.sort(params, new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return pareTo(o2);}});// 2. 将三个参数字符串拼接成一个字符串进行sha1加密String temp = SHA1.encode(params.get(0) + params.get(1) + params.get(2));if (temp.equals(signature)) {try {response.getWriter().write(echostr);logger.info("成功返回 echostr:" + echostr);return echostr;} catch (IOException e) {e.printStackTrace();}}logger.info("失败 认证");return null;}
三、依据接口文档实现业务逻辑
验证URL有效性成功后即接入生效,成为开发者。可以在公众平台网站中申请微信认证,认证成功后,将获得更多接口权限,满足更多业务需求。
成为开发者后,用户每次向公众号发送消息、或者产生自定义菜单、或产生微信支付订单等情况时,开发者填写等服务器配置URL将得到微信服务器推送过来的消息和事件,开发者可以依据自身业务逻辑进行响应,如回复消息。