微信公众号开发教程01:接入指南
2016-04-20 16:10
656 查看
要成为微信开发者,首先需要进入接入校验,微信相关的接入文档地址为:
http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319&token=&lang=zh_CN
具体步骤如下:
2、填写相关的参数:点击左侧菜单栏中的【开发】中的【基本配置】
3、修改服务器配置:
1)填写URL:http://www.kolbe.cn/wechat/authenticate(注意需要使用80端口)
2)填写Token:wechat(这个token需要与程序中的token一致)
2、该请求会带上四个参数:signature、timestamp、nonce、echostr
3、开发者对参数进行相应的处理后,与signature进行对比,如果相等,则直接输出echostr,代表接入成功,否则接入失败,具体逻辑如下:
1)将token(自定义的)、timestamp、nonce进行字典排序
2)将三个参数拼接着一个字符串
3)将拼接后的字符串进行SHA-1加密
4)将加密后的字符串与signature进行对比
4、具体实现代码如下(为了代码的简洁明了,暂时没使用任何框架):
2、后续微信会将用户的消息通过Post发送到:http://www.kolbe.cn/wechat/authenticate,我们可以在AuthenticateController中的doPost方法进行相应的逻辑处理
http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319&token=&lang=zh_CN
具体步骤如下:
一、填写服务器配置
1、申请微信公众号,并登陆:https://mp.weixin.qq.com/2、填写相关的参数:点击左侧菜单栏中的【开发】中的【基本配置】
3、修改服务器配置:
1)填写URL:http://www.kolbe.cn/wechat/authenticate(注意需要使用80端口)
2)填写Token:wechat(这个token需要与程序中的token一致)
二、验证服务器地址的有效性
1、填完上述信息后,微信服务器会发送一个GET请求到:http://www.kolbe.cn/wechat/authenticate2、该请求会带上四个参数:signature、timestamp、nonce、echostr
3、开发者对参数进行相应的处理后,与signature进行对比,如果相等,则直接输出echostr,代表接入成功,否则接入失败,具体逻辑如下:
1)将token(自定义的)、timestamp、nonce进行字典排序
2)将三个参数拼接着一个字符串
3)将拼接后的字符串进行SHA-1加密
4)将加密后的字符串与signature进行对比
4、具体实现代码如下(为了代码的简洁明了,暂时没使用任何框架):
package cn.kolbe.wechat.authenticate.controller; import java.io.IOException; import java.io.PrintWriter; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/authenticate") public class AuthenticateController extends HttpServlet { // token可自定义 private static final String TOKEN = "wechat"; private static final long serialVersionUID = 1L; /** * 微信公众平台接入校验 */ @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); // 将token,timestamp,nonce三个参数进行字典排序 String[] sourceArray = new String[]{TOKEN , request.getParameter("timestamp"), request.getParameter("nonce")}; Arrays.sort(sourceArray); // 将三个参数字符串拼接成一个字符串 StringBuilder sortArray = new StringBuilder(); for(String s : sourceArray) { sortArray.append(s); } // 对拼接成功的字符串进行SHA-1加密 String hexString = byteArrayToHex(sortArray.toString().getBytes()); // 将加密过的字符串与signature对比 if(hexString != null && hexString.equals(request.getParameter("signature"))) { // 如果相等则原样输出echostr,接入成功 out.print(request.getParameter("echostr")); } else { // 如果不相等,则接入失败 response.setContentType("text/html;charset=utf-8"); out.println("校验失败"); } out.close(); } /** * 将字节数组加密后转化成十六进制字符串 * @param byteArray * @return */ public String byteArrayToHex(byte[] byteArray) { try { MessageDigest md = MessageDigest.getInstance("SHA-1"); md.update(byteArray); byte[] digest = md.digest(); String s = new String(); StringBuilder result = new StringBuilder(); for(byte b : digest) { if((s = Integer.toHexString(b)).length() < 2) { s = 0 + s; } result.append(s); } return result.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; } }
三、接入成功
1、如果顺利完成上面两步,并提示接入成功,此时代表已经成功接入微信2、后续微信会将用户的消息通过Post发送到:http://www.kolbe.cn/wechat/authenticate,我们可以在AuthenticateController中的doPost方法进行相应的逻辑处理
相关文章推荐
- nodejs express wechat 实现微信消息功能
- 微信公众号命名规则将调整 全平台公众号名称唯一
- 扫二维码下载apk并统计被扫描次数(及微信屏蔽下载解决方案)
- iOS分享微信联系人/朋友圈详解
- 微信清理H5真的太早了?这会是应用号发布的前兆吗
- 微信开发测试号配置
- Java小程序之判断输入年份是否是闰年
- 微信js sdk invalid signature签名错误
- JS判断手机类型,及是否在微信内打开
- Android微信支付
- 安卓系统给手机设置代理
- IOS 微信支付的开发
- 微信get post请求到微信服务器 模版 素材操作
- 微信支付宝扫码支付相关接口
- 模仿微信支付输入密码框的效果
- 改进:js修改iOS微信浏览器的title
- 哪家的微信三级分销系统功能比较好
- 关于微信分享的一个小问题
- 微信公众平台:前端批量下载语音并重命名文件
- AngularJS 第一个小程序