Java微信公众平台接口封装源码分享
前言:
这篇博客是在三月初动手项目的时候准备写的,但是为了完成项目只好拖延时间写这篇博客,顺便也可以在项目中应用我自己总结的的一些经验。今天看来,这些方法的应用还是可以的,至少实现了我之前的构想。
写本文的初意是为了让那些跟我一样对微信公众平台有长时间关注的和那些还未了解微信公众平台的Programer,分享些思路以及开发经验,希望对阅览此文的你会有所帮助。
也希望有大神对小八哥的不妥之处进行指点。
鸣谢:感谢以下两位大神的指点http://blog.csdn.net/lyq8479 以及 http://www.cnblogs.com/txw1958
特别鸣谢:我傻傻的女朋友,这一年没她的支持不管是生活上还是心理上估计我的路会走的更加吃力,欠她的时间太多情太多,只能用“有朝一日”来还吧!!!!!
前期准备:
几个月前写过一篇公众平台基础接口调用的文章:http://www.cnblogs.com/Codenewbie/p/3360374.html
今天准备的是高级接口的调用方法的封装以及Oauth2高级接口的应用测试Demo,高级接口公布的一段时间内,由于对Oauth2协议的不了解,一直受困于此,因此花了一段比较长时间在研究这方面的东西,也请教了上文提到的两位大神。接下来说说我对Oauth2的理解吧:
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。(摘自百度百科)
对公众平台上的Oauth2协议的理解基本如下:
到此处为止是4月4号写的前言,下文将在此刻2014年4月18日23:01:31继续进行
再叙前言:当看见别人的“说”优越于自己的“做”的时候请别慌,机会总会来的,这只是人生路上你的一个参考物而已,才20出头,怕啥呀,好好学就是了。@Jeff Li 相信你会看见,你懂我意思的!
遇到了人生中比较重要的选择,我还在甄别这碗汤该怎么熬,熬到什么时候...还是且行且熬吧!
统统走一遍:
时间追溯到寒假:年前的那段时间因为项目挤得太紧还未实现任何高级功能的接口封装,只记得那天是大年30,听着窗外的鞭炮声,苦逼的我在房间里研究高级接口,只为来年开发的时候方便一些,那晚也算是搞定了发送客服消息接口,随着时间的流逝,再到如今群发接口和支付接口的发布(此处两个接口还未实现),基本上接口已封装完成,接下来就跟我一起走一遍流程吧:
先上项目截图:
com.sedion.basic.util内为基本信息工具:
1.SendBasicService为自动回复6大类消息的封装
com.sedion.menu.util内为菜单管理工具:
1.MenuUtil为增删差自定义菜单的封装
2.MenuManager为自定义菜单的内容类型管理工具(设置菜单显示的样式和作用)
com.sedion.wechatapi.util内为基本的工具:
1.CommonUtil内包括 发起https请求并获取结果工具、获取access_token工具、URL编码(utf-8)工具、根据类型判断文件扩展名工具
2.MyX509TrustManager为证书信任管理器
3.SignUtil 为验证消息真实性(请求来源于微信)工具类
4.WeixinUtil包括了接收和发送消息类型初始化以及微信公众平台接口Url的初始化
5.XmlMessUtil是xml形式消息处理工具类
com.sedion.advanced.util内为高级接口的封装:
上文中已提到之前的基础接口总结,本文将不再赘述,接下去,将对已实现的高级接口作一个总结:
1.创建二维码接口 CreateQRCode
public static void main(String[] args) { // 获取接口访问凭证 String accessToken=getAccessToken("appid", "appsecret").getAccesstoken(); // 创建临时二维码 // gQHN7zoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL0pFTUxKVDdsS1Q1UWFOeGtvbTJ3AAIEIn4ZUwMECAcAAA== WeixinQRCode Temporaryqrcode=createTemporaryQRCode(accessToken, 1800, 1); System.err.println(Temporaryqrcode.getTicket()); // 创建永久二维码 // gQGx8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL1JrTlIyajNsZ2o3NzlyNXFfRzJ3AAIEGKUZUwMEPAAAAA== String Permanentqrcode=createPermanentQRCode(accessToken, 2); System.err.println(Permanentqrcode); }
2.获取二维码工具 GetQRCode
public static void main(String[] args) { String ticket="gQGx8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL1JrTlIyajNsZ2o3NzlyNXFfRzJ3AAIEGKUZUwMEPAAAAA=="; String savePath="D:/db"; // 根据ticket换取二维码 getQRCode(ticket, savePath); }
3.获取用户基本个人信息方法 GetPersoninf
public static void main(String[] args) { // 获取接口访问凭证 String accessToken=getAccessToken("appid", "appsecret").getAccesstoken(); // 获取用户基本信息 PersonalInf personalInf=getPersonalInf(accessToken, "openId"); System.out.println(personalInf.getOpenid()); // 查询用户所在分组 int groupid=getPersonGroupId(accessToken, "openId"); System.err.println("组id是:"+groupid); }
4.获取关注者列表 GetUserList
public static void main(String[] args) { // 获取接口访问凭证 String accessToken=getAccessToken("appid", "appsecret").getAccesstoken(); WeixinUserList weixinUserList=getUserList(accessToken, ""); System.err.println("total:"+weixinUserList.getTotal()); System.err.println("count:"+weixinUserList.getCount()); System.err.println("openid:"+weixinUserList.getOpenIdList()); System.err.println("next_openid:"+weixinUserList.getNextOpenId()); }
5.用户组操作工具 GroupUtil
public static void main(String[] args) { // 获取接口访问凭证 String accessToken=getAccessToken("appid", "appsecret").getAccesstoken(); // 获取分组列表 List<WeixinGroup> groupList=getGroups(accessToken); // 循环输出各分组信息 for(WeixinGroup group:groupList){ System.err.println(String.format("ID: %d 名称: %s 用户数: %d", group.getId(), group.getName(),group.getCount())); } // 创建分组 WeixinGroup group=createGroup(accessToken, "学生"); System.err.println(String.format("创建学生组成功: %s id: %d", group.getName(),group.getId())); // 修改分组 boolean result=updateGroup(accessToken, 100, "傻逼"); // 移动用户分组 boolean result2=removeMemberGroups(accessToken, "openId", 100); }
6.发送客服消息工具 SendCustomMessage
public static void main(String[] args) { // 获取接口访问凭证 String accessToken=getAccessToken("appid", "appsecret").getAccesstoken(); // 组装文本客服消息 String jsonTextMsg=MakeCustomMessage.makeTextCustomMessage("openid", "哈哈哈哈");
// 其他类型此处略去,请看源码 // 发送客服消息 sendCustomMessage(accessToken, jsonTextMsg); }
7.上传下载多媒体文件工具 MediaUtil
public static void main(String[] args) { // 获取接口访问凭证 String accessToken=getAccessToken("appid", "appsecret").getAccesstoken(); // 上传多媒体文件 WeixinMedia weixinMedia=uploadMedia(accessToken, "image", "http://localhost:8080/wechatapi/upload/sedion.jpg"); System.err.println(weixinMedia.getMediaId()); System.err.println(weixinMedia.getType()); System.err.println(weixinMedia.getCreatedAt()); // 下载多媒体文件 String filePath=getMedia(accessToken, "", "D:/db"); System.err.println(filePath); }
8.OAuth2授权工具 OAuthUtil
public static void main(String[] args) { WeixinOauth2Token weixinOauth2Token=getOauth2AccessToken("appid", "appsecret", "code"); System.err.println("weixintoken是:"+weixinOauth2Token); String accessToken=weixinOauth2Token.getAccessToken(); System.err.println("accestoken是"+accessToken); String openId=weixinOauth2Token.getOpenId(); System.err.println("openId是"+openId); SNSUserInfo snsUserInfo=getSNSUserInfo(accessToken, openId); System.err.println("snsUserInfo是"+snsUserInfo); }
9.自定义菜单接口
public static void main(String[] args) { // 第三方用户唯一凭证 String appId = "appid"; // 第三方用户唯一凭证密钥 String appSecret = "appsecret"; // 调用接口获取access_token AccessToken at = CommonUtil.getAccessToken(appId, appSecret); if (null != at) { // 调用接口创建菜单 boolean result = MenuUtil.createMenu(getMenu(), at.getAccesstoken()); // 判断菜单创建结果 if (result) log.info("菜单创建成功!ok"); else log.info("菜单创建失败,错误码:" + result); } }
10.获取access_token
public static void main(String[] args) { // 获取接口访问凭证 AccessToken accessToken=getAccessToken("appId", "appSecret"); if (accessToken.getAccesstoken()==null) { System.out.println("空"); }else { System.out.println(accessToken.getAccesstoken()); } }
总结:
上文中草草的将代码复制黏贴了一下,已经到了2014年4月19日00:30:45,不知不觉中这几年的这些夜晚都是这么过来的,熬夜,熬夜,熬夜,其实我也喜欢睡觉,我也喜欢玩,可是条件不允许,作为一个大三学生党,把自己的大学生涯都压在了代码身上,未来任是扑朔迷离,但深信,吃得苦中苦方为人上人。此处与各位共勉!
https://git.oschina.net/codenewbie/wechatbasic
如果你觉得赞就给本博推荐下吧,希望能上精华,如果你是大神那就别搭理本博了
本文只是自我的一个总结,如果对你有所帮助是我的荣幸,文章不妥之处希望指正,大神勿喷,请通过留言或关注微信公众帐号codenewbie来支持小八哥!若有不妥之处,欢迎指点。
转帖请注明本文出自小八哥的博客(http://www.cnblogs.com/Codenewbie),请尊重他人的辛勤劳动成果,谢谢!