玩玩微信公众号Java版之一:配置微信公众平台服务器信息

在进行微信公众平台开发前,前先做好准备工作,好了以后,我们可以开始啦!

第一、准备好服务端接口

定义一个http服务接口,主要分为如下几步:

1、创建一个servlet类,用来接收请求:

 1 package com.wechat;
 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 org.apache.commons.io.IOUtils;
12
13 import com.wechat.utility.WeChatUtil;
14
15 public class WechatConService extends HttpServlet
16 {
17
18     private static final long serialVersionUID = 1L;
19     /**
20      * 确认请求来自微信服务器
21      */
22     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
23     {
24
25         // 微信加密签名
26         String signature = request.getParameter("signature");
27         // 时间戳
28         String timestamp = request.getParameter("timestamp");
29         // 随机数
30         String nonce = request.getParameter("nonce");
31         // 随机字符串
32         String echostr = request.getParameter("echostr");
33
34         PrintWriter out = response.getWriter();
35
36         System.out.println(signature);
37         System.out.println(timestamp);
38         System.out.println(nonce);
39         System.out.println(echostr);
40
41         // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
42         if (WeChatUtil.checkSignature(signature, timestamp, nonce))
43         {
44             out.print(echostr);
45         }
46
47         out.close();
48         out = null;
49     }
50
51     /**
52      * 处理微信服务器发来的消息
53      */
54     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
55     {
56         // TODO 消息的接收、处理、响应
57         System.out.println("接口调用了一次");
58
59         String ret = IOUtils.toString(request.getInputStream(), "utf-8").toString();
60         System.out.println(ret);
61
62         WeChatMsgBL tWeChatMsgBL = new WeChatMsgBL();
63         String result = tWeChatMsgBL.dealWechatMsg(ret);
64
65         response.setCharacterEncoding("UTF-8");
66
67         // 返回文本消息,将处理结果返回
68         PrintWriter out = response.getWriter();
69
70         System.out.println(result);
71
72         out.print(result);
73
74         out.close();
75
76     }
77
78 }

2、配置web.xml

 1 <!-- 微信公众号测试接口  add by Damon start-->
 2   <servlet>
 3     <servlet-name>WechatconService</servlet-name>
 4     <servlet-class>com.wechat.WechatConService</servlet-class>
 5   </servlet>
 6
 7   <servlet-mapping>
 8     <servlet-name>WechatconService</servlet-name>
 9     <url-pattern>/Servlet/WechatconService</url-pattern>
10   </servlet-mapping>
11
12  <!-- 微信公众号测试接口  add by Damon end-->

3、接口配置校验:

在配置微信服务信息时,会进行基础支持的校验,只有校验通过才会配置成功,因此我们首先要实现与微信对接的校验功能。具体参见

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

可参考微信公众平台的接口文档 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319

到这里,服务的基本配置就完成了,下面我们来进行验证

第二步,配置微信服务器

URL:你的应用接口公网访问地址(即上面配置的服务器接口地址)

Token:自己定义的标识

Endcoding AESKey:加解密密钥

保存信息,微信会进行验证,如果调用成功,则顺利完成配置(可服务器后台打印调用信息以确认)。

配置好,就可以开始我们的开发工作啦!

时间: 2024-12-20 01:21:13

玩玩微信公众号Java版之一:配置微信公众平台服务器信息的相关文章

玩玩微信公众号Java版之六:微信网页授权

我们经常会访问一些网站,用微信登录的时候需要用到授权,那么微信网页授权是怎么一回事呢,一起来看看吧! 参考官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 官方的文档有很详细的说明,这里就主要分析重要的几点: 第一,网页授权分类及说明: 1.以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的.用户感知的就是直接进入了回调页(往往

玩玩微信公众号Java版之四:自定义公众号菜单

序: 微信公众号基本的菜单很难满足个性化及多功能的实现,那么微信能否实现自定菜单呢,具体的功能又如何去实现么?下面就来学习一下微信自定义公众号菜单吧! 自定义菜单接口可实现多种类型按钮,如下: 1.click:点击推事件用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互:2.view:跳转URL用户点击view类型按钮后,微信客户端将会打开开发者在按钮中

玩玩微信公众号Java版之三:access_token及存储access_token

微信官方参考文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183 基本说明: access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.access_token的存储至少要保留512个字符空间.access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效. 调用方式: 公众号可以使用App

玩玩微信公众号Java版之二:接收、处理及返回微信消息

前面已经配置了微信服务器,那么先开始最简单的接收微信消息吧~ 可以用我们的微信号来直接进行测试,下面先看测试效果图: 这是最基本的文本消息的接收.处理及返回,来看看是怎么实现的吧! 首先可以参考微信消息相关的接口文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453 具体实现如下: 第一步,接收微信发送的文本消息入口: 1 /** 2 * 处理微信服务器发来的消息 3 */ 4 public void doPost

第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token

一.access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开发者在调用这些接口时,都需要传入一个相同的参数 access_token,它是公众账号的全局唯一票据,它是接口访问凭证. access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存. access_token的存储至少要保留512个字符

从零开始开发微信公众号系列篇一:微信测试号申请

从零开始开发微信公众号系列片将会讲述微信账号申请,微信各个接口的实现,同时会为每个接口提供实现的demo.同时,此系列博文也不乏引用博友的一些思想内容,如有问题,欢迎联系于我,谢谢!由于该系列博文是工作之余总结的,有时没及时更新还望博友监督,提醒以达到共勉.俗话说,磨刀不误砍柴工,要进行微信公众号开发首先你得做好以下准备工作,那现在我们先来磨刀.很多人为微信开发账号发愁,这一点不用担心,腾讯还是挺人性化的,作为开发者可以申请测试号来进行微信公众号开发,这样我们就可以不用花冤枉钱去申请微信的订阅号

asp获取微信公众号用户的头像和微信名及openid源码

asp获取微信公众号用户的头像和微信名及openid源码,asp写的,可以获取用户的头像和微信名,性别及openid等 <script language="jscript" runat="server">function getjson(str){ try{ eval("var jsonStr = (" + str + ")"); }catch(ex){ var jsonStr = null; } return j

nginx 负载均衡时,一台tomcat宕机时的问题 自动切换(转自java版web项目-微信公众号)

如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加upstream节点. upstream linuxidc {      server 10.0.6.108:7080;      server 10.0.0.85:8980;} 2.  将server节点下的location节点中的proxy_pass配置为:http:// + upstream名称,即

微信公众号开发教程[002]-配置

一.注册微信公众号 微信公众号官方入口https://mp.weixin.qq.com注册公众号,注册过程中,类型选择可能是新手比较迷惑的地方.微信公众号分为订阅号和服务号(还有个企业号,似乎用的人不多),每种类型下面又分为公司,政府部门,社会组织,个人等不同性质.不同类型,不同性质的公众号,权限不同,申请资料也不同. 例如:公司(订阅号或服务号),你得提供工商注册号,银行对账号.注册成功后,也并不是所有权限都默认开通,需要手动开通.有些权限还得微信认证之后才能开通.关于这些细节,可参阅微信公众