java微信学习 接入

现在实习的公司要做微信开发,然而一直没安排任务,所以一直在看微信接口,记录下学习的内容

微信开发肯定要看的就是微信公众平台开发者文档,上面有每种接口的调用格式,刚开始学习的时候自己申请了一个订阅号,个人类型的,这个玩玩还可以,学习的话,貌似有点接口没有权限调用,所以我学习的时候是用的微信测试号,至于测试号的申请,很简单,在文档里面,开发者工具下面就可以看到。

微信开发,第一步,接入指南,看文档上面的

当然,弄这个之前要有一个服务器,或者就应用放在网上,微信后台其实和网站开发后台差不多

url填写域名加action的地址,比如说我的一个servlet ,

@WebServlet("/msg")
public class TestWeixin extends HttpServlet {

那么我的url就应该填写 域名/msg

token是用来校验请求是不是微信服务器发过来的,这里填写的token就是程序里面用的token,

至于EncodingAESKey 随机生成,我自己测试接口的时候没用这个,是以明文形式,真正开发的时候应该会用这个,我还没接触正在的微信开发。

填写完提交后,微信服务器会根据填写的url发get请求,带上4个参数signature,timestamp,nonce,echostr

参数的作用,我就抄开发者文档的:

signature:微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。

timestamp:时间戳

nonce:随机数

echostr:随机字符串

加密/校验流程如下:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

加密后的字符串和signature相等,则返回echostr,此时校验成功

根据上面的步骤,可以看到,微信服务器是判断是否校验成功 是 根据 是否返回 echostr这个随机字符串的,

如果不进行校验,直接把得到的echostr返回给微信服务器也是可以校验成功的。当然,最好还是进行校验。

校验的代码,就是新建一个servlet

在doGet方法里面进行校验

@WebServlet("/msg")
public class TestWeixin extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    private String TOKEN = "luolei";
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TestWeixin() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String signature = request.getParameter("signature");
        String timestamp = request.getParameter("timestamp");
        String nonce = request.getParameter("nonce");
        String echostr = request.getParameter("echostr");
        
        String[] str={TOKEN,timestamp,nonce};
        Arrays.sort(str);
        String yanzheng = str[0]+str[1]+str[2];
        String result = DigestUtils.sha1Hex(yanzheng.getBytes());
        if(result.equals(signature))
        {
            response.getWriter().print(echostr);
        }
        
    }

上面的 token换成自己的token

还有DigestUtils.sha1Hex()方法 是commons-codec  jar包里面的类。可以自己搜索怎么sha1加密,

刚刚说了,可以不进行校验,doget里面只留:

String echostr = request.getParameter("echostr");

response.getWriter().print(echostr);

这两行也是可以校验成功的

最后上传服务器,我是用bae应用引擎,上传应用,将得到的二级域名+action的key填到url里面,token按照情况自己填写,就可以了

原文地址:https://www.cnblogs.com/luolei/p/4682647.html