1. 程式人生 > >關於使用微信登入第三方APP的實現(Android版)

關於使用微信登入第三方APP的實現(Android版)

轉自:http://my.oschina.net/crazymus/blog/521164

使用微信登入APP,免去註冊過程,現在已經有很多的類似應用了。整合該功能過程不復雜,但還是有一些地方需要注意的。

開始之前,需要做下面的準備工作。

1、到微信開放平臺註冊你的APP,並申請開通微信登入的許可權。參考這裡:

https://open.weixin.qq.com//

2、下載Android SDK和簽名檢視工具,請參考:

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&token=&lang=zh_CN/

3、獲取到APP的簽名,並填寫到微信開放平臺。

下面開始進入主題:

引入微信登入相關SDK到專案的lib資料夾中,就一個檔案:

?
1 libammsdk.jar

呼叫微信,申請使用者授權:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 //api註冊 api = WXAPIFactory.createWXAPI( this , "APP_ID" , true ); api.registerApp( "APP_ID" );   SendAuth.Req req =
new SendAuth.Req();     //授權讀取使用者資訊  req.scope = "snsapi_userinfo" ;   //自定義資訊 req.state = "wechat_sdk_demo_test" ;   //向微信傳送請求 api.sendReq(req);

將APP_ID替換成你在微信開放平臺申請到的,上面的程式碼就可以調起微信了。

授權成功後,微信會返回一個code,下面介紹如何接收微信回傳的資訊。

在你的包名相應目錄下新建一個wxapi目錄,並在該wxapi目錄下新增一個WXEntryActivity.java檔案,輸入類似下面的程式碼:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 package 你的包名.wxapi;     public class WXEntryActivity extends Activity implements IWXAPIEventHandler{              @Override      public void onCreate(Bundle savedInstanceState) {          super .onCreate(savedInstanceState);                    //註冊API          api = WXAPIFactory.createWXAPI( this , "APP_ID" );          api.handleIntent(getIntent(), this );      }          @Override      public void onResp(BaseResp resp) {                    if (resp instanceof SendAuth.Resp){              SendAuth.Resp newResp = (SendAuth.Resp) resp;                            //獲取微信傳回的code              String code = newResp.code;          }                }       }

在AndroidManifest.xml中加入下面的程式碼:

?
1 <activity android:exported= "true" android:launchMode= "singleTop" android:name= ".wxapi.WXEntryActivity" android:theme= "@android:style/Theme.NoDisplay" />

修復WXEntryActivity中的錯誤,在onResp方法中獲取到code,然後通過下面的介面獲取到token和openid:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

得到下面的資料:

?
1 2 3 4 5 6 7 8 { "access_token" : "ACCESS_TOKEN" , "expires_in" :7200, "refresh_token" : "REFRESH_TOKEN" , "openid" : "OPENID" , "scope" : "SCOPE" , "unionid" : "o6_bmasdasdsad6_2sgVt7hMZOPfL" }

openid可以作為使用者的唯一標識,將openid儲存下來,就可以實現登入狀態的檢查了

如果需要獲取使用者的資訊,例如暱稱,頭像,可以使用下面的介面:

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

得到的資料為:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 { "openid" : "OPENID" , "nickname" : "NICKNAME" , "sex" :1, "province" : "PROVINCE" , "city" : "CITY" , "country" : "COUNTRY" , "headimgurl" : "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0" , "privilege" :[ "PRIVILEGE1" , "PRIVILEGE2" ], "unionid" : " o6_bmasdasdsad6_2sgVt7hMZOPfL"   }

更多的介面使用,請參考:

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317853&lang=zh_CN

 

可能的問題:

1、無法調起微信。

可能的原因是簽名錯誤,請檢查簽名。

2、無法接受到微信回傳的資訊

可能的原因是沒有把WXEntryActivity加入到AndroidManifest.xml中。