这篇博客是在三月初动手项目的时候准备写的,但是为了完成项目只好拖延时间写这篇博客,顺便也可以在项目中应用我自己总结的的一些经验。今天看来,这些方法的应用还是可以的,至少实现了我之前的构想。
写本文的初意是为了让那些跟我一样对微信公众平台有长时间关注的和那些还未了解微信公众平台的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=getPersonG