第三方之联合登陆(微信)
前言 App聯合登陸很常用,包括使用qq、微信、微博賬號登陸等,這篇記錄下微信登陸的接入流程。 接入流程
1:申請開發者
https://open.weixin.qq.com/cgi-bin/frame?t=home/app_tmpl&lang=zh_CN?資源中心點擊移動應用,點擊微信登錄
2:集成代碼
1.導入libammsdk.jar的jar包
2.初始化IWXAPI
// 通過WXAPIFactory工廠,獲取IWXAPI的實例 api = WXAPIFactory.createWXAPI(this, G.AppId_WX,true); 3.發送認證請求
if( !api.isWXAppInstalled()){ Toast.makeText(context, "請先安裝微信應用", Toast.LENGTH_SHORT).show(); return false;}if(!api.isWXAppSupportAPI() ){ Toast.makeText(context, "請先更新微信應用", Toast.LENGTH_SHORT).show(); return false;}// 將應用的APPID注冊到微信api.registerApp(Constant.WX_APP_ID); final SendAuth.Req req = newSendAuth.Req(); req.scope = Constant.WX_APP_SCOPE; req.state = Constant.WX_APP_STATE; api.sendReq(req);4.調起微信授權
調起微信客戶端讓用戶進行授權,用戶進行操作后會調起...wxapi.WXEntryActivity 這個類,..是應用包名,這個WXEntryActivity需要繼承Activity并且實現IWXAPIEventHandler接口,當然,這個WXEntryActivity也需要在清單文件中注冊
<activityandroid:name="**.**.**.wxapi.WXEntryActivity"android:exported="true"android:label="@string/app_name"android:launchMode="singleTop"android:screenOrientation="portrait" ><intent-filter><actionandroid:name="android.intent.action.VIEW" /> <categoryandroid:name="android.intent.category.DEFAULT" /><dataandroid:scheme="sdksample" /></intent-filter></activity>5.獲取微信回調信息
WXEntryActivity先實現IWXAPIEventHandler,然后實現3個方法一個onNewIntent、onReq、onResp在onResp得到code,然后在通過code獲取openid和access_token,然后根據這兩個參數調自己系統后臺,判斷是該用戶登錄過
public classWXEntryActivity extends Activityimplements IWXAPIEventHandler{privateIWXAPIapi;String openid,access_token,expires_in;ContextthisContext;Intentintent;Handlerhandler= newHandler(){@Overridepublic void handleMessage(Messagemsg) {// TODO Auto-generated method stubsuper.handleMessage(msg);JSONObjectjsonObject = (JSONObject) msg.obj;switch (msg.what) {case 1:try {openid = jsonObject.getString("openid");access_token =jsonObject.getString("access_token");requestCodeApiData(); }catch(JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();} break;default:break;}}};@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);thisContext = this;intent = getIntent();setContentView(R.layout.activity_wx_entry);api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);api.handleIntent(getIntent(),this);}@Override protected void onNewIntent(Intentintent) {super.onNewIntent(intent);setIntent(intent);api.handleIntent(intent,this);}@Override public void onReq(BaseReq req) {finish();}@Override public void onResp(BaseResp resp) {switch (resp.errCode) {case BaseResp.ErrCode.ERR_OK:System.out.println("0000");Stringcode = ((SendAuth.Resp) resp).code;//即為所需的codeSystem.out.println("code:"+code);doGet(((SendAuth.Resp)resp).code);break;case BaseResp.ErrCode.ERR_AUTH_DENIED:System.out.println("用戶拒絕授權");break;case BaseResp.ErrCode.ERR_USER_CANCEL:System.out.println("用戶取消");break;default:break;} }public void doGet(final String code){ new Thread(){@Overridepublic void run() {// TODO Auto-generated method stubURL url;String link = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+G.AppId_WX+"&secret="+G.AppScrect+"&code="+code+"&grant_type=authorization_code";byte[] buf = Util.httpGet(link);if (buf !=null && buf.length > 0) {Stringcontent = newString(buf);JSONObject json = JSONObject.parseObject(content);Messagemessage = newMessage();message.obj = json;message.what = 1;handler.sendMessage(message);}}}.start();}}最后附上一個官網具體步驟https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317851&token=&lang=zh_CN
小心有坑:在獲取code時候微信后臺返回{“errcode”:40029,”errmsg”:”invalidcode”},我那時獲取不到微信返回的json,就將獲取的url在logcat上打印,然后放瀏覽器里面一直返回時{“errcode”:40029,”errmsg”:”invalidcode”},查了半天,發現是其他地方錯了,再一個就是微信的同一個code,只請求了一次,我在瀏覽器上請求相當于多次了就出現了{“errcode”:40029,”errmsg”:”invalidcode”}
總結
以上是生活随笔為你收集整理的第三方之联合登陆(微信)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hgame2023_Week2[cryp
- 下一篇: 计算机应用实际综合报告,计算机应用实践报