这两年随着腾讯推出的微信公众号这个玩意,衍生了不少的专门搞这块的互联网公司,其中不少的公司都发展的很不错了。
本人从13年就开始从事这块的开发,对微信开发这块已有还算可以的了解吧!微信公众号的开发其实都不难,就是接口的配置了。不过腾讯是个坑,有时候接口本身就有问题,这
样会搞死一大片的开发者。就像之前微信支付的接口一样,我被它整了两个星期,靠,后面才知道官方接口问题。不说了,说多了都是泪啊!
从事软件开发几年以来,一直在想网上怎么没有一个一整套的开发的框架源码呢?搞的每天不是活在业务里就是活在百度里。百度里也是醉了,这么大的一个收索引擎,居然都没
有真正的技术牛人来解决我们这些小白的问题,基本上是大白对小白的一些零零碎碎的指导。废话不多说了,开始吧,我发现跟小学写作文似的,写不下去了。
一。微信后台对接
1.1 URL是什么?
很多同学刚开始开发的时候都不知道这连接是啥玩意?其实就是访问你的接口的那个方法。
如 你的服务器域名加你的方法名
Tocken又是什么鬼?
就是你自己定义的一个密钥,如你要设成99999就可以了
最后那个随机生成就可以了。不多解释。
这玩意怎么搞呢?
就是你要写代码根据他的协议来进行接口对接了。
下面我先引用网上的一段代码
- package org.liufeng.course.servlet;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.liufeng.course.util.SignUtil;
- /**
- * 核心请求处理类
- *
- * @author liufeng
- * @date 2013-05-18
- */
- public class CoreServlet extends 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 消息的接收、处理、响应
- }
- }
- package org.liufeng.course.util;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- import java.util.Arrays;
- /**
- * 请求校验工具类
- *
- * @author liufeng
- * @date 2013-05-18
- */
- public class SignUtil {
- // 与接口配置信息中的Token要一致
- private static String token = "weixinCourse";
- /**
- * 验证签名
- *
- * @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;
- }
- }
第二期将搭建框架的内容写上
请允许打个小广告