微信授權登陸介入第三方APP

這幾天開發要用到微信授權的功能,所以就研究了一下。可是微信開放平臺接入指南里有幾個地方寫的不清不楚。在此總結一下,以便需要的人。

很多微信公衆平臺的應用如果移植到app上的話就需要微信授權登陸了。

  1.       目前移動應用上微信登錄只提供原生的登錄方式,需要用戶安裝微信客戶端才能配合使用。也就是如果第三方應用需要微信授權登陸的話就必須在本機上安裝了微信。而後續授權登陸或調用接口之類的相當於app和微信兩個應用之間通話。

1、首先需要註冊微信開放平臺,然後獲取開發者認證。審批通過之後再創建一個移動應用同樣還是需要審批。通過之後就可以給這個應用添加微信授權登陸以及相應功能了。這裏移動應用審批通過之後會給你兩個參數,一個叫AppId,一個叫Secret。這兩個參數在後面用的到。

補充:寫這篇文章有一段時間了。在這補充下大家容易出問題的幾個地方。

1)大家在創建移動應用的時候注意的地方。


上面圖片是申請移動應用時候的第二步,令我想不明白的是很多開發者還不知道應用包名和應用簽名指的是什麼。。。。。。。。

包名是你manifest文件裏面頂層的那個package啊。

是這個東西啊,這個東西啊少年。

2)應用簽名。好吧我真不想囉嗦了。應用簽名就是你同過ks文件得到的那個應用簽名。如果你不知道如何獲得這個簽名。請按下面步驟走:

1,先把你的應用程序打包安裝在你的手機上。

2,下載官網上提供的簽名生成工具並安裝在手機上。下面這個地方下載:

3、打開簽名生成工具輸入你的app的包名就生成你的應用簽名了。

補充完畢。。。(對於上面這點補充我真不想多回答了。PS:我的暱稱留下了QQ我很無辜啊。。。大家有問題上班時間別問好嗎,哥心軟不忍心拒絕啊,尤其有妹子問的時候啊。。。墳蛋)

2、在需要微信授權的項目中導入微信的第三方JAR包,這個在微信開放平臺接入指南裏面說的很清楚,不再囉嗦。

3、註冊到微信:


這一步也沒什麼課解釋的,相當於兩人要聯繫的時候先打通了電話,然後開始溝通。這一步在需要和微信通話的界面之前註冊了就行。我的是在歡迎界面註冊的。

4、開始和微信通話

首先和微信通話之前,要在項目代碼中新建一個Activity,並提供相應的回調方法供微信調用。但是這一點在接入指南上寫的就不清不楚導致我浪費了好幾個小時。一下內容是我在接入指南里複製來的。

a. 在你的包名相應目錄下新建一個wxapi目錄,並在該wxapi目錄下新增一個WXEntryActivity類,該類繼承自Activity(例如應用程序的包名爲net.sourceforge.simcpux,則新添加的類如下圖所示)

並在manifest文件裏面加上exported屬性,設置爲true。

一定要注意上面這句話:在你的包名相應目錄下新建一個wxapi目錄。說的是在包名相應目錄建一個wxapi目錄。也就是是包名目錄的子目錄,千萬不要直接在src下面建個包就完了。(粗心這毛病害死人啊。)

然後再這個包下面建一個類:

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. <pre name="code" class="java">public class WXEntryActivity extends Activity implements IWXAPIEventHandler{  
  2.   
  3.     private IWXAPI api;  
  4.     @Override  
  5.     protected void onCreate(Bundle savedInstanceState) {  
  6.         // TODO Auto-generated method stub  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.flash_activity);  
  9.         <span style="color:#3366ff;">api = WXAPIFactory.createWXAPI(this, Property.wxLoginInfo.getAppid(), false);  
  10.         api.handleIntent(getIntent(), this);</span>  
  11.     }  
  12.       
  13.     @Override  
  14.     public void onReq(BaseReq arg0) {  
  15.         // TODO Auto-generated method stub  
  16.           
  17.     }  
  18.   
  19.     @Override  
  20.     public void onResp(BaseResp resp) {  
  21.         Bundle bundle = new Bundle();  
  22.         switch (resp.errCode) {  
  23.         case BaseResp.ErrCode.ERR_OK:  
  24. //      可用以下兩種方法獲得code  
  25. //      resp.toBundle(bundle);  
  26. //      Resp sp = new Resp(bundle);  
  27. //      String code = sp.code;<span style="white-space:pre">  
  28. //      或者  
  29.         String code = ((SendAuth.Resp) resp).code;  
  30.             //上面的code就是接入指南里要拿到的code  
  31.               
  32.             break;  
  33.   
  34.         default:  
  35.             break;  
  36.         }  
  37.           
  38.     }  
  39. }  

注意:上面是獲取code。現在最新的官方jar包好像不支持獲得code了。直接就能得到token,省略了獲取code 這一步。所以方法不變,大家取的時候直接resp.token就行了。不用再去取code了。但是,但是,這樣直接拿到token了好像按照官方文檔上的方法就不能獲得openid了。我也沒嘗試有什麼新的方法,反正是jar包更新了但是文檔還沒更新,大家弄不成功的話可以先用舊的jar和上面獲取code的方法。點擊下載舊版jar包

這是那個WXEntityAcitivity的部分代碼。結合接入指南,大家應該都看的懂。

然後開始和微信通話,

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. </pre><pre name="code" class="java">{   
  2. // send oauth request   
  3. Final SendAuth.Req req = new SendAuth.Req();  
  4. req.scope = "snsapi_userinfo";  
  5. req.state = "wechat_sdk_demo_test";  
  6. api.sendReq(req);  
  7. }  

這一步就是和微信要code。執行了這一段代碼之後。微信會調用剛纔WXEntityActivity類裏面的onResp()方法。並且把code返回來了。見上面那一段代碼。獲取到code之後就可以通過code獲取access_token了。

請求以下鏈接獲取access_token:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
這步和微信通信獲得access_token就是普通的訪問鏈接。 用httpClient就行了,而不是接入指南里說的那個和微信通信的方法onReq().然後還是這樣的方式通過access_token.就可以調用接口獲得用戶基本信息了。具體返回參數什麼的接入指南里面說的很清楚。至此微信授權基本是成功了。

不過在開發的過程中要注意一下debug keystore。就是Window->Preferences->Android->Build裏面。


這裏,我們要添加Custom debug keystore。上面的那個debug keystore不會和微信通信。

而我們添加的這個keystore 也要符合一些規範所以要改一改。

那就是keystore的密碼改爲:android

keytool -storepasswd -keystore my.keystore (在cmd裏執行的命令)

其中,my.keystore是要修改的證書文件,執行後會提示輸入證書的當前密碼,和新密碼以及重複新密碼確認。這一步需要將密碼改爲android

alias的名稱要改爲:androiddebugkey

keytool -changealias -keystore my.keystore -alias my_name -destalias androiddebugkey

這一步中,my_name是證書中當前的alias,-destalias指定的是要修改爲的alias,這裏按規矩來,改爲androiddebugkey!這個命令會先後提示輸入keystore的密碼和當前alias的密碼。

keystore的alias密碼也改爲:android

keytool -keypasswd -keystore my.keystore -alias androiddebugkey

這一步執行後會提示輸入keystore密碼,alias密碼,然後提示輸入新的alias密碼,同樣,按規矩來,改爲android!

這樣修改完keystore之後把這個keystore放到上面ADT的custom debug keystore裏面。就可以直接調試微信相關的功能了。

大概就這幾點吧。 


轉自:http://blog.csdn.net/qq247890212/article/details/40822481 博主QQ:247890212
發佈了77 篇原創文章 · 獲贊 10 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章