1. 程式人生 > >微信登入那點事

微信登入那點事

不久之前做過微信第三方登入,過程之後也遇到一些困難。在這裡就把我做的過程給記錄下來。
準備工作: 公司在微信開放平臺註冊專案的時候的APPID和APPSECRET(一般這個東西都是公司的運營部門去申請的)

第一步 :在app的gradle下面 (現在有沒有更新就不太清楚,可以去微信開放平臺上面去看 還有混淆我這裡就貼上了)
compile ‘com.tencent.mm.opensdk:wechat-sdk-android-with- mta:1.0.2’

第二步: 在Application的oncreate方法裡面
IWXAPI sApi= WXEntryActivity.initWeiXin(this, APPID);

第三步 : 最重要的一步 在專案的根目錄下面新建一個wxapi包然後在這個包下面新建一個類WXEntryActivity extends Activity implements IWXAPIEventHandler
然後在WXEntryActivity 的oncreate方法裡面呼叫 MyApplication.sApi.handleIntent(getIntent(), this); 不然的話就不會回撥過來。
implements IWXAPIEventHandler 重寫 它的onResp方法的response裡面返回得到code (這裡的都是固定的格式 只需要把appid和appsecret換成自己的就行了 run(url)是異步向微信請求資料返回的是一個String型別的json)processGetAccessTokenResult(String respsonse)這個方法是在run(url)請求資料的成功回撥裡面呼叫
/**
* 獲取授權口令
*/
private void getAccessToken(String code) {
String url = “

https://api.weixin.qq.com/sns/oauth2/access_token?” +
“appid=” + APPID +
“&secret=” +APPSECRET+
“&code=” + code +
“&grant_type=authorization_code”;
run(url);
}

/**
* 處理獲取的授權資訊結果
* 在這個回撥裡面我們可以獲取到和後臺對接的資料 做到這一步就算是微信登入成功了 。tokenInfo 這個裡面有我們想要的唯一標識。
* @param response 授權資訊結果
*/
private void processGetAccessTokenResult(String response) {
// 驗證獲取授權口令返回的資訊是否成功
if (validateSuccess(response)) {
// 使用Gson解析返回的授權口令資訊
WXAccessTokenInfo tokenInfo = mGson.fromJson(response, WXAccessTokenInfo.class);
// 儲存資訊到手機本地
saveAccessInfotoLocation(tokenInfo);
// 獲取使用者資訊
getUserInfo(tokenInfo.getAccess_token(), tokenInfo.getOpenid());
}
}

第四步: 第四步你肯定想象不到 如果你想呼叫微信登入
只需要 呼叫 loginWeixin(Context context, IWXAPI api)

/**
* 登入微信
*
* @param api 微信服務api
*/
public static void loginWeixin(Context context, IWXAPI api) {
// 判斷是否安裝了微信客戶端
if (!api.isWXAppInstalled()) {
Toast.makeText(context.getApplicationContext(), “您還未安裝微信客戶端!”, Toast.LENGTH_SHORT).show();
return;
}
// 傳送授權登入資訊,來獲取code
SendAuth.Req req = new SendAuth.Req();
// 應用的作用域,獲取個人資訊
req.scope = “snsapi_userinfo”;
/**
* 用於保持請求和回撥的狀態,授權請求後原樣帶回給第三方
* 為了防止csrf攻擊(跨站請求偽造攻擊),後期改為隨機數加session來校驗
*/
req.state = “app_wechat”;
api.sendReq(req);
}