微信开放平台https://open.weixin.qq.com/cgi-bin/index?t=home/index&lang=zh_CNandroid
微信审核在1-3个工做日内完成json
集成步骤文档写的挺清楚,这里只贴关键代码api
调起微信认证页面,在微信响应后获取到code微信
public void reqPass() { final SendAuth.Req req = new SendAuth.Req(); req.scope = "snsapi_userinfo"; req.state = "bbbl_wx_login_test"; if (api != null) { api.sendReq(req); Toast.makeText(getBaseContext(), "请求拉起微信认证页面", LENGTH_SHORT).show(); } else { Toast.makeText(getBaseContext(), "微信认证走丢了,跳转至登录界面,请尝试再次登录", Toast.LENGTH_LONG).show(); } }
@Override public void onResp(BaseResp baseResp) { switch (baseResp.errCode) { case BaseResp.ErrCode.ERR_OK://分享成功 if (ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX == baseResp.getType()) { Toast.makeText(WXEntryActivity.this, "分享成功", Toast.LENGTH_LONG).show(); finish(); break; } String code = ((SendAuth.Resp) baseResp).code; reqes(code); break; case BaseResp.ErrCode.ERR_USER_CANCEL://分享取消 Toast.makeText(WXEntryActivity.this, "您选择了取消", Toast.LENGTH_LONG).show(); finish(); break; case BaseResp.ErrCode.ERR_AUTH_DENIED://分享拒绝 Toast.makeText(WXEntryActivity.this, "您选择了取消", Toast.LENGTH_LONG).show(); finish(); break; } finish(); }
获取到code后就能够访问接口得到access_token,继而获得用户信息app
public void reqes(String code) { RequestQueue mQueue = Volley.newRequestQueue(this); StringRequest stringRequest = new StringRequest(Constants.REQ_URL + "?appid=" + Constants.APP_ID_WX + "&secret=" + Constants.SECRET_WX + "&code=" + code + "&grant_type=authorization_code", new Response.Listener<String>() { @Override public void onResponse(String response) { TokenInfo json = new Gson().fromJson(response, TokenInfo.class); wx_access_token = json.getAccess_token(); wx_openid = json.getOpenid(); getUserInfo(wx_access_token, wx_openid); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); mQueue.add(stringRequest); mQueue.start(); } public void getUserInfo(String access_token, final String openid) { RequestQueue mQueue = Volley.newRequestQueue(this); StringRequest stringRequest = new StringRequest(Constants.USERINFO_URL + "?access_token=" + access_token + "&openid=" + openid, new Response.Listener<String>() { @Override public void onResponse(String response) { Log.i("WXUserInfo", response); WXUserInfo info = new Gson().fromJson(response, WXUserInfo.class); String nickname = info.getNickname(); String headimgurl = info.getHeadimgurl(); //判断是否为魅族手机,采用不一样的编码,以解决乱码的问题 if ("Meizu".equals(android.os.Build.MANUFACTURER)) { //魅族手机 try { String en_nickname = URLEncoder.encode(nickname, "iso-8859-1"); String de_nickname = URLDecoder.decode(en_nickname, "utf-8"); bindCustomer(de_nickname, headimgurl, openid, "wx"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } else { try { String en_nickname = URLEncoder.encode(nickname, "utf-8"); String de_nickname = URLDecoder.decode(en_nickname, "utf-8"); bindCustomer(de_nickname, headimgurl, openid, "wx"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); mQueue.add(stringRequest); mQueue.start(); }
获取用户信息时,微信文档说默认是中文,可是也有人遇到是英文的状况,这时在请求的时候能够多加一个参数来指定语言ide