这篇博客是在三月初动手项目的时候准备写的,但是为了完成项目只好拖延时间写这篇博客,顺便也可以在项目中应用我自己总结的的一些经验。今天看来,这些方法的应用还是可以的,至少实现了我之前的构想。
写本文的初意是为了让那些跟我一样对微信公众平台有长时间关注的和那些还未了解微信公众平台的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协议的理解基本如下:
时间追溯到寒假:年前的那段时间因为项目挤得太紧还未实现任何高级功能的接口封装,只记得那天是大年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内为高级接口的封装:
上文中已提到之前的基础接口总结,本文将不再赘述,接下去,将对已实现的高级接口作一个总结:
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); }
public static void main(String[] args) { String ticket="gQGx8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL1JrTlIyajNsZ2o3NzlyNXFfRzJ3AAIEGKUZUwMEPAAAAA=="; String savePath="D:/db"; // 根据ticket换取二维码 getQRCode(ticket, savePath); }
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); }
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()); }
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); }
public static void main(String[] args) { // 获取接口访问凭证 String accessToken=getAccessToken("appid", "appsecret").getAccesstoken(); // 组装文本客服消息 String jsonTextMsg=MakeCustomMessage.makeTextCustomMessage("openid", "哈哈哈哈");<br> // 其他类型此处略去,请看源码 // 发送客服消息 sendCustomMessage(accessToken, jsonTextMsg); }
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); }
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); }
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); } }
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,不知不觉中这几年的这些夜晚都是这么过来的,熬夜,熬夜,熬夜,其实我也喜欢睡觉,我也喜欢玩,可是条件不允许,作为一个大三学生党,把自己的大学生涯都压在了代码身上,未来任是扑朔迷离,但深信,吃得苦中苦方为人上人。此处与各位共勉!总结:
本文只是自我的一个总结,如果对你有所帮助是我的荣幸,文章不妥之处希望指正,大神勿喷,请通过留言或关注微信公众帐号codenewbie来支持小八哥!若有不妥之处,欢迎指点。
转帖请注明本文出自小八哥的博客(http://my.oschina.net/codenewbie/blog/479730),请尊重他人的辛勤劳动成果,谢谢!
软件地址: http://www.oschina.net/p/wechatbasic
源码地址:http://git.oschina.net/codenewbie/wechatbasic