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,不知不覺中這幾年的這些夜晚都是這麼過來的,熬夜,熬夜,熬夜,其實我也喜歡睡覺,我也喜歡玩,但是條件不容許,做爲一個大三學生黨,把本身的大學生涯都壓在了代碼身上,將來任是撲朔迷離,但深信,吃得苦中苦方爲人上人。此處與各位共勉!html

   https://git.oschina.net/codenewbie/wechatbasic java

 

若是你以爲贊就給本博推薦下吧,但願能上精華,若是你是大神那就別搭理本博了git

本文只是自個人一個總結,若是對你有所幫助是個人榮幸,文章不妥之處但願指正,大神勿噴請經過留言或關注微信公衆賬號codenewbie支持小八哥!如有不妥之處,歡迎指點。web

轉帖請註明本文出自小八哥的博客(http://www.cnblogs.com/Codenewbie),請尊重他人的辛勤勞動成果,謝謝!json

相關文章
相關標籤/搜索