微信公众帐号开发之一(java)

闲来没事,就记录一下微信公众平台的开发吧~

其实微信公众平台开发没有想象中的那么困难,因为注册了微信公众平台帐号登录之后在开发者模式里有详细的文档,个人感觉介绍还是比较详细的。

微信公众平台订阅号和服务号的区别网上已经有N多的介绍了,这里就不再说了。从微信公众平台登录之后开始说起吧。

对于开发者来说,开发者模式是最好的选择了。因为在里面可以更自由更灵活的选择消息回复方式。编辑模式只能对特定的字符进行相应的消息回复。而且在开发者模式下可以灵活的创建自定义菜单(前提是你的帐号有提供相应的接口,需要微信认证,提供了APPID和SECRET后才能调用接口创建自定义菜单)。

进入开发者模式之后第一步是要填写URL和TOKEN进行验证。因为你既然要对用户发来的消息进行处理作更灵活的回复的话。首先你得能收到帐号粉丝发来的消息。而粉丝发来的消息首先会发到微信服务器,只有进行验证之后微信服务器才知道该把你帐号粉丝发来的消息转发到哪儿(就是你填的URL,你的服务器地址)。所以第一步需要验证,在你的服务器和微信服务器之间建立起连接。下面就来说说URL和TOKEN吧。

URL是要公网能访问到的地址。TOKEN则是自己设置的。想填什么就填什么,不过这个TOKEN在你的服务器代码里会用到。

当你填写了URL和TOKEN之后,微信服务器会向你填写的URL发送GET请求。该请求中会携带四个参数。微信开发者文档里有写。

在这里你填写的TOKEN会被集成到GET请求里的参数里,到你的处理该请求的代码段里就会被用到了。这里对每个参数也做了详细的说明。我也不需要废话了。

当微信服务器向你指定的URL发送请求之后就到你的代码段里了。首先你得获取请求中的上述四个参数(在你的servlet的doGET()方法里获取)。拿到四个参数之后按照文档里说的你要将TOKEN(你之前填写的,在你的代码段里就是一个变量的值了),timestamp,nonce三个参数进行字典排序然后sha1加密处理,处理之后可与微信服务器发来的参数中的signature进行对比(这一步相当于确保你的服务器安全,这样你的服务器才能确定请求是由微信服务器发来的)。若对比结果是一样的就说明该请求是微信服务器发来的,这时在你的代码段里返回取得的参数中的echostr就行了。若不一样就表示请求不是微信服务器发来的。下面就把获取参数及参数处理的java代码贴出来给大家分享一下~


public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {

// response.getWriter().write("LOL");
String signature = request.getParameter("signature");

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

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

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

PrintWriter out = response.getWriter();

if (SignUtil.checkSignature(signature, timestamp, nonce)) {
out.print(echostr);
}
out.close();
out = null;
}


private static String token = "***你设置的token值*****";

public static boolean checkSignature(String signature,String timestamp,String nonce){
String[] arr = new String[] {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");
byte[] digest = md.digest(content.toString().getBytes());
tmpStr = byteToStr(digest);
}catch(NoSuchAlgorithmException e){
e.printStackTrace();
}
content = null;
return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
}


//这部分代码是从柳峰大神的博客里拷过来的(还是得尊重版权)

private static String byteToStr(byte[] byteArray){
String strDigest = "";
for(int i=0;i<byteArray.length;i++){
strDigest += byteToHexStr(byteArray[i]);
}
return strDigest;
}

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;
}

按照以上代码对微信服务器发来的GET请求处理完毕之后正确返回echostr,微信服务器收到你返回的echostr后就能通过验证了。通过验证之后就能进行开发了。通过看后面的文档,你会发现微信服务器会把你帐号粉丝发来的信息通过POST方式,post到你填写的URL对应的Servlet里。后面的开发工作就可以从你的Servlet的dopost()方法开始……

先写到这,下次有时间继续写(对于微信公众平台开发的个人经验:多看文档)……

如果有问题可以在下面留言或者发邮件给我[email protected]

微信公众帐号开发之一(java),码迷,mamicode.com

时间: 2024-08-25 14:27:23

微信公众帐号开发之一(java)的相关文章

[037] 微信公众帐号开发教程第13篇-图文消息全攻略

引言及内容概要 已经有几位读者抱怨“柳峰只用到文本消息作为示例,从来不提图文消息,都不知道图文消息该如何使用”,好吧,我错了,原本以为把基础API封装完.框架搭建好,再给出一个文本消息的使用示例,大家就能够照猫画虎的,或许是因为我的绘画功底太差,画出的那只猫本来就不像猫吧…… 本篇主要介绍微信公众帐号开发中图文消息的使用,以及图文消息的几种表现形式.标题取名为“图文消息全攻略”,这绝对不是标题党,是想借此机会把大家对图文消息相关的问题.疑虑.障碍全部清除掉. 图文消息的主要参数说明 通过微信官方

微信公众帐号开发教程第3篇-开发模式启用及接口配置

编辑模式与开发模式 微信公众帐号申请成功后,要想接收处理用户的请求,就必须要在"高级功能"里进行配置,点击"高级功能",将看到如下界面: 从上图中可以看到,高级功能包含两种模式:编辑模式和开发模式,并且这两种模式是互斥关系,即两种模式不能同时开启.那两种模式有什么区别呢?作为开发人员到底要开启哪一种呢?编辑模式:主要针对非编程人员及信息发布类公众帐号使用.开启该模式后,可以方便地通过界面配置"自定义菜单"和"自动回复的消息".

微信公众帐号开发教程第12篇-符号表情的发送(下)

第11篇文章给出了Unified版本的符号表情(emoji表情)代码表,并且介绍了如何在微信公众帐号开发模式下发送emoji表情,还在文章结尾出,卖了个关子:"小q机器人中使用的一些符号表情,在微信的符号表情选择栏里根本找不到,并且在上篇文章给出的符号表情代码表(Unified版)中也没有,那这些表情是如何发送的呢?"如下面两张图所示的符号表情"情侣"和"公共汽车".          本文主要介绍以下内容:1)如何在微信上使用更多的符号表情(即

微信公众帐号开发、营销咨询请加微信号留言YJYC0662

微信公众帐号开发.营销咨询请加微信号留言YJYC0662,或扫下面二维码关注:

微信公众帐号开发教程第14篇-自定义菜单的创建及菜单事件响应

微信公众帐号开发教程第14篇-自定义菜单的创建及菜单事件响应 参考文章:http://blog.csdn.net/lyq8479/article/details/9841371

[039] 微信公众帐号开发教程第15篇-自定义菜单的view类型(访问网页)

引言及内容概要 距离写上一篇文章<自定义菜单的创建及菜单事件响应>整整过了两个月的时间,那时公众平台还没有开放view类型的菜单.在不久前,微信公众平台悄悄开放了view类型的菜单,却没有在首页发布任何通知,貌似微信团队很喜欢这么干.一个偶然的机会,我留意到API文档的自定义菜单接口发生了变化,增加了对菜单view类型的说明: view(访问网页): 用户点击view类型按钮后,会直接跳转到开发者指定的url中. 于是我在第一时间更新了小q机器人(微信号:xiaoqrobot)的菜单,在一级菜

[029] 微信公众帐号开发教程第5篇-各种消息的接收与响应

前一篇文章里我们已经把微信公众平台接口中消息及相关操作都进行了封装,本章节将主要介绍如何接收微信服务器发送的消息并做出响应. 明确在哪接收消息 从微信公众平台接口消息指南中可以了解到,当用户向公众帐号发消息时,微信服务器会将消息通过POST方式提交给我们在接口配置信息中填写的URL,而我们就需要在URL所指向的请求处理类CoreServlet的doPost方法中接收消息.处理消息和响应消息.   接收.处理.响应消息 下面先来看我已经写好的CoreServlet的完整代码: [java] vie

[040] 微信公众帐号开发教程第16篇-应用实例之历史上的今天

内容概要 本篇文章主要讲解如何在微信公众帐号上实现“历史上的今天”功能.这个例子本身并不复杂,但希望通过对它的学习,读者能够对正则表达式有一个新的认识,能够学会运用现有的网络资源丰富自己的公众账号. 何谓历史上的今天 回顾历史的长河,历史是生活的一面镜子:以史为鉴,可以知兴衰:历史上的每一天,都是喜忧参半:可以了解历史的这一天发生的事件,借古可以鉴今,历史是不能忘记的.查看历史上每天发生的重大事情,增长知识,开拓眼界,提高人文素养. 寻找接口(数据源) 要实现查询“历史上的今天”,首先我们要找到

[028] 微信公众帐号开发教程第4篇-消息及消息处理工具的封装

工欲善其事必先利其器!本篇内容主要讲解如何将微信公众平台定义的消息及消息相关的操作封装成工具类,方面后期的使用.这里需要明确的是消息其实是由用户发给你的公众帐号的,消息先被微信平台接收到,然后微信平台会将该消息转给你在开发模式接口配置中指定的URL地址. 微信公众平台消息接口 要接收微信平台发送的消息,我们需要先熟悉微信公众平台API中消息接口部分,点此进入,点击后将进入到消息接口指南部分,如下图所示: 在上图左侧可以看到微信公众平台目前开放的接口有三种:消息接口.通用接口和自定义菜单接口.通用