1. 程式人生 > >Android 微信登入

Android 微信登入

申請通過效果如下即可

2、其次,閱讀開放文件:

3、接下來就是Android開放程式碼。非常簡單

3/1常量類

public class Constants {

    // appid

    public static final String APP_ID = "wx1201a018fdcec6";
    public static final String SECRET = "fc866ba851439dead6a09a480de179";

    // 商戶號

    public static final String MCH_ID = "15171351";

    /**
     * 微信開放平臺和商戶約定的支付金鑰
     *
     * 注意:不能hardcode在客戶端,建議genSign這個過程由伺服器端完成
     */

    public static final String APP_KEY = "01b2e2bd220db0c3765609ebc9b59f";

}

3/2起調微信登入

//微信登入

private void wxlogin(){
    String  strState = getPackageName() + String.valueOf(System.currentTimeMillis());
    String SCOPE = "snsapi_userinfo";
    IWXAPI api;
    api = WXAPIFactory.createWXAPI(LiteActivity.this, Constants.APP_ID, false);
    api.registerApp(Constants.APP_ID);

    if (!api.isWXAppInstalled()) {
       Toast.makeText(LiteActivity.this,"請先安裝微信客戶端!",Toast.LENGTH_LONG).show();
        return;
    }
    final SendAuth.Req req = new SendAuth.Req();
    req.scope = SCOPE;
    req.state = strState;
    api.sendReq(req);

}

3/3獲取微信回撥結果,微信開發必要activity

/**
 * 微信分享回撥
 */
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
    private IWXAPI wxAPI;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        wxAPI = WXAPIFactory.createWXAPI(this, Constants.APP_ID,true);
        wxAPI.registerApp(Constants.APP_ID);
        wxAPI.handleIntent(getIntent(), this);
    }

    @Override
    protected void onNewIntent(Intent intent){
        super.onNewIntent(intent);
        wxAPI.handleIntent(getIntent(),this);
        Log.i("ansen","WXEntryActivity onNewIntent");
    }

    @Override
    public void onReq(BaseReq arg0) {
        Log.i("ansen","WXEntryActivity onReq:"+arg0);
    }

    @Override
    public void onResp(BaseResp resp){
        if(resp.getType()== ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX){//分享
            Log.i("ansen","微信分享操作.....");

        }else if(resp.getType()==ConstantsAPI.COMMAND_SENDAUTH){//登陸
            SendAuth.Resp authResp = (SendAuth.Resp) resp;
            String code = authResp.code;
            TestObServernotice.getInstance().notifyObserver(111, 2, code);
            Log.i("ansen", "微信登入操作.....");

        }
        finish();
    }
}

3/4  resp結果如下。

請求微信介面

public static final String wxlogurl = "https://api.weixin.qq.com/sns/userinfo";
public static final String wxlogurl2 = "https://api.weixin.qq.com/sns/oauth2/access_token";

3/5根據code獲取token

請求如下:,這裡是asyncHttp框架。你可以使用其他請求網路類

private void getUserInfo(final String access_token, final String openid) {

    String url = Url.wxlogurl2;
    RequestParams params = new RequestParams();
    params.put("appid", openid);
    params.put("secret", Constants.SECRET);
    params.put("code", access_token);
    params.put("grant_type", "authorization_code");
    more_loadDialog.setloadtext("登入中...");
    more_loadDialog.show();
    AsyncHttpClient client = new AsyncHttpClient();

    client.post(url, params, new TextHttpResponseHandler() {
        @Override
        public void onFailure(int i, Header[] headers, String s, Throwable throwable) {
            more_loadDialog.dismiss();
            Toast.makeText(LiteActivity.this, "網路連線異常", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onSuccess(int i, Header[] headers, String s) {
            try {
                more_loadDialog.dismiss();
                JSONObject object = new JSONObject(s);
                String at = object.getString("access_token");
                getUserInfoend(at,Constants.APP_ID);
                Log.i("lgq", "re==logtest=====" + s);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    });
}

結果如下

3/6根據token獲取微信賬號詳情

請求如下

private void getUserInfoend(final String access_token, final String openid) {

    String url = Url.wxlogurl;
    RequestParams params = new RequestParams();
    params.put("openid", openid);
    params.put("access_token", access_token);
    more_loadDialog.setloadtext("登入中...");
    more_loadDialog.show();
    AsyncHttpClient client = new AsyncHttpClient();

    client.post(url, params, new TextHttpResponseHandler() {
        @Override
        public void onFailure(int i, Header[] headers, String s, Throwable throwable) {
            more_loadDialog.dismiss();
            Toast.makeText(LiteActivity.this, "網路連線異常", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onSuccess(int i, Header[] headers, String s) {
            try {
                more_loadDialog.dismiss();
                JSONObject object = new JSONObject(s);
                Log.i("lgq", "re==logtest=====" + s);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    });
}

結果如下:

4、所有微信資訊已經請求得到了。接下來就是。需要什麼引數登入,就使用什麼引數登入了 !!!!!!

線上回覆解決bug:qq1085220040