(2)查开发文档,接入微信公众号

开发者文档在这里:http://mp.weixin.qq.com/wiki/home/index.html

文档都说了,需要有:

其中URL就是自己服务器的地址。这里我用的是SAE提供的服务器。

Token就是令牌,用来验证用的。

其他的东西现在用不到,先放着。

接着要做的就是让微信服务器认识我的服务器。这里我用的是JavaWeb来实现,上代码:

首先是工具类,用来验证Token:

 1 package com.owen.xx.util;
 2
 3 import java.security.MessageDigest;
 4 import java.security.NoSuchAlgorithmException;
 5 import java.util.Arrays;
 6
 7 /**
 8  * 请求校验工具类
 9  *
10  * @author liufeng
11  * @date 2013-05-18
12  */
13 public class SignUtil {
14     // 与接口配置信息中的Token要一致
15     private static String token = "ABCDEFG";
16
17     /**
18      * 验证签名
19      *
20      * @param signature
21      * @param timestamp
22      * @param nonce
23      * @return
24      */
25     public static boolean checkSignature(String signature, String timestamp, String nonce) {
26         String[] arr = new String[] { token, timestamp, nonce };
27         // 将token、timestamp、nonce三个参数进行字典序排序
28         Arrays.sort(arr);
29         StringBuilder content = new StringBuilder();
30         for (int i = 0; i < arr.length; i++) {
31             content.append(arr[i]);
32         }
33         MessageDigest md = null;
34         String tmpStr = null;
35
36         try {
37             md = MessageDigest.getInstance("SHA-1");
38             // 将三个参数字符串拼接成一个字符串进行sha1加密
39             byte[] digest = md.digest(content.toString().getBytes());
40             tmpStr = byteToStr(digest);
41         } catch (NoSuchAlgorithmException e) {
42             e.printStackTrace();
43         }
44
45         content = null;
46         // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信
47         return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
48     }
49
50     /**
51      * 将字节数组转换为十六进制字符串
52      *
53      * @param byteArray
54      * @return
55      */
56     private static String byteToStr(byte[] byteArray) {
57         String strDigest = "";
58         for (int i = 0; i < byteArray.length; i++) {
59             strDigest += byteToHexStr(byteArray[i]);
60         }
61         return strDigest;
62     }
63
64     /**
65      * 将字节转换为十六进制字符串
66      *
67      * @param mByte
68      * @return
69      */
70     private static String byteToHexStr(byte mByte) {
71         char[] Digit = { ‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘, ‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘ };
72         char[] tempArr = new char[2];
73         tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
74         tempArr[1] = Digit[mByte & 0X0F];
75
76         String s = new String(tempArr);
77         return s;
78     }
79 }  

接着就是Servlet类了,由于微信服务器请求验证时用的是HTTP GET方式,所以我只需要实现doGet方法。

同时,文档说了,微信服务器会传几个参数,我们需要的就是判断这些参数

上代码:

 1 package com.owen.xx.servlet;
 2
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10
11 import com.owen.omikeweichat.util.SignUtil;
12
13 /**
14  * 核心请求处理类
15  *
16  * @author liufeng
17  * @date 2013-05-18
18  */
19 public class CoreServlet extends HttpServlet {
20     private static final long serialVersionUID = 4440739483644821986L;
21
22     /**
23      * 确认请求来自微信服务器
24      */
25     public void doGet(HttpServletRequest request, HttpServletResponse response)
26             throws ServletException, IOException {
27         // 微信加密签名
28         String signature = request.getParameter("signature");
29         // 时间戳
30         String timestamp = request.getParameter("timestamp");
31         // 随机数
32         String nonce = request.getParameter("nonce");
33         // 随机字符串
34         String echostr = request.getParameter("echostr");
35
36         PrintWriter out = response.getWriter();
37         // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
38         if (SignUtil.checkSignature(signature, timestamp, nonce)) {
39             out.print(echostr);
40         }
41         out.close();
42         out = null;
43     }
44
45     /**
46      * 处理微信服务器发来的消息
47      */
48     public void doPost(HttpServletRequest request, HttpServletResponse response)
49             throws ServletException, IOException {
50         // TODO 消息的接收、处理、响应
51     }
52
53 }

然后把代码Project打包成WAR格式,上传到SAE。注意一下:JDK使用1.6,Tomcat也是1.6,别问为什么,这是SAE规定的。

接着进入“微信公众平台”的“开发者中心”面板,进行配置:

URL填写 SAE 的地址 + "/coreServlet"

Token就填写在SignUtil类中的Token属性。(这里需要注意:Token别写得太长,微信服务器比较笨,写32个字符完全行不通)

EncodingAESKey随机生成

消息加解密方式选择“安全模式”

最后点击“确定”,好了。

时间: 2024-08-10 00:06:45

(2)查开发文档,接入微信公众号的相关文章

武汉微信开发文档之微信公众平台开发

武汉微信开发是一门比较复杂的工作,想要做好是比较困难的,所以也就要求武汉微信开发从业者要充分的了解微信开发的知识.下面,我就要介绍一些武汉微信开发文档,这些文档是与微信公众开发有关的,大家可以详细的看一看哦. 开放平台对应的是app里关于微信的开发,比如app里的微信支付账号是开放平台下的.一个开放平台,可以绑定10个公众平台,绑定后会有权限获取unionid. 公众平台对应的是和公众号有关的开发,除了公众号接收消息.菜单等基本功能外,还包括基于公众号的H5相关的开发.微信里.浏览器内的微信支付

[.NET] 简单接入微信公众号开发:实现自动回复

简单接入微信公众号开发:实现自动回复 一.前提 先申请微信公众号的授权,找到或配置几个关键的信息(开发者ID.开发者密码.IP白名单.令牌和消息加解密密钥等). 二.基本配置信息解读 开发者ID:固定的: 开发者密码:自己扫一下就可以看到: IP白名单:设置自己配置服务器的地址: 服务器地址(URL):稍后详解: 令牌:随便写,按规则: 消息加解密密钥:随便写,或者随机生成: 三.配置服务器地址(URL) 服务器地址(URL)应该怎么配置呢?图片上的配置的地址是:http://www.nidie

[转载红鱼儿]delphi 实现微信开发(2)接入微信公众号平台

先要学习一下接入的资料,在这里,因为原理都在,所以一定要认真阅读,然后,利用Delphi实现一个对应函数: function CheckSignature(const signature, timestamp, nonce, token: string): boolean; var strs: TStringList;   tmpStr: string; begin strs := TStringList.Create;   try     strs.Add(token);     strs.A

SpringCloud : 接入 微信公众号平台(一)、接入微信请求(支持多公众号)

Maven: Feign 版本10.1.0 Spring 版本 5.1.5.RELEASE SpringBoot 版本 2.1.5.RELEASE SpringCloud 版本 2.1.1.RELEASE Weixin-java 版本 3.7.0,链接 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.6

SpringCloud : 接入 微信公众号平台(三)、获取JsSDK配置参数

Java: import com.phpdragon.wechat.proxy.config.WeChatConfig; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.bean.WxJsapiSignature; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.mp.api.WxMpService;

SpringCloud : 接入 微信公众号平台(四)、获取微信用户信息接口

代码参考: import com.phpdragon.wechat.proxy.config.WeChatConfig; import com.phpdragon.wechat.proxy.dto.mp.user.GetOauthUserInfoDto; import com.phpdragon.wechat.proxy.dto.mp.user.GetOpenidDto; import com.phpdragon.wechat.proxy.dto.mp.user.GetUserInfoDto;

使用localtunne一分钟搞定微信公众号接入

??记得15年那个刚刚进入工作的时候,公司有个微信公众号的项目,那个时候微信官方没有什么调试工具,也没有什么比较好的本地调试工具.当时有个功能需要调用微信JSSDK里面的扫一扫的功能.由于本地不能调试.开发起来很烦.每次都需要把代码上传到测试服务器,然后在测试.这样耗费了不少时间.前几天之前的同事再次开发公众号的时候.出了一些问题.然后在讨论的时候.得知了一个微信公众号本地开发的神器"localtunne".可以自己本地直接调试开发微信公号.调用JSSDK.使用非常简单. 什么是loc

Django+wechatpy接入微信公众平台以及授权登录

确定Django环境可以正常运行,环境搭建见:Linux 搭建Nginx+uwsgi+Django环境 安装 wechatpy[cryptography] sudo pip3 install wechatpy[cryptography] 修改settings.py 接入微信公众号的连接去掉csrf验证,详情参考:解决Django+Vue前后端分离的跨域问题及关闭csrf验证的后半部分 在settings.py 加入微信公众号配置 AppID = '' AppSecret = '' Token =

微信网页授权认证获取用户的详细信息,实现自动登陆-微信公众号开发干货

原创声明:本文为本人原创作品,绝非他处转账,转载请联系博主 从接触公众号到现在,开发维护了2个公众号,开发过程中遇到很多问题,现在把部分模块功能在这备案一下,做个总结也希望能给其他人帮助 工欲善其事,必先利其器,先看看开发公众号需要准备或了解什么 web开发工具:官方提供的开发工具,使用自己的微信号来调试微信网页授权.调试.检验页面的 JS-SDK 相关功能与权限,模拟大部分 SDK 的输入和输出.下载地址:web开发工具下载 开发文档:https://mp.weixin.qq.com/wiki