微信登陸後返回微信名等信息

ps:9月6日,code字段改成了token字段,文檔卻沒改,坑啊android

需求:從本身的app跳轉微信登陸後,返回微信名顯示在本身的app上web

1.將 libammsdk.jar包複製到libsapi

2.新建一個wxapi目錄,並在該wxapi目錄下新增一個WXEntryActivity類,該類繼承自Activity,實現IWXAPIEventHandler接口(此步很是重要,並且必須作,由於微信強制返回的就是這個類)微信

3.app

<activity android:name=".wxapi.WXEntryActivity" android:exported="true"></activity>

4.ide

import android.app.Activity; import android.content.Intent; import android.os.Bundle; import com.tencent.mm.sdk.modelbase.BaseReq; import com.tencent.mm.sdk.modelbase.BaseResp; import com.tencent.mm.sdk.modelmsg.SendAuth; import com.tencent.mm.sdk.openapi.IWXAPI; import com.tencent.mm.sdk.openapi.IWXAPIEventHandler; import com.tencent.mm.sdk.openapi.WXAPIFactory; import com.xuehu365.xuehu.data.UserData; import com.xuehu365.xuehu.model.Constant; import com.xuehu365.xuehu.model.StateException; import com.xuehu365.xuehu.model.WebUserEntity; import com.xuehu365.xuehu.model.response.LoginResponseEntity; import com.xuehu365.xuehu.model.response.WXUserInfoEntity; import com.xuehu365.xuehu.model.response.WXtokenResponseEntity; import com.xuehu365.xuehu.netinterface.LoginAPI; import com.xuehu365.xuehu.netinterface.retrofit.BaseCallBack; import com.xuehu365.xuehu.ui.activity.MainActivity; import com.xuehu365.xuehu.utils.LogHelp; import com.xuehu365.xuehu.utils.SPHelp; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; /** * Created by Administrator on 2016/8/22. */
public class WXEntryActivity extends Activity implements IWXAPIEventHandler{ // IWXAPI 是第三方app和微信通訊的openapi接口
    private IWXAPI api; private static final String APP_ID = "wx028802dad467ba69"; private static final String SECRET = "740ad1565f540c60e50f6db646f662a8"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); api = WXAPIFactory.createWXAPI(this, APP_ID, false); api.handleIntent(getIntent(), this); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent, this); } // 微信發送請求到第三方應用時,會回調到該方法
 @Override public void onReq(BaseReq req) { } // 第三方應用發送到微信的請求處理後的響應結果,會回調到該方法
 @Override public void onResp(BaseResp resp) { String result = null; switch (resp.errCode) { case BaseResp.ErrCode.ERR_OK: result = "發送成功"; String code = ((SendAuth.Resp) resp).code; //經過code獲取access_token
                LoginAPI.getWXtoken(APP_ID, SECRET, code, new Callback<WXtokenResponseEntity>() { @Override public void onResponse(Call<WXtokenResponseEntity> call, Response<WXtokenResponseEntity> response) { final String openid = response.body().getOpenid(); String access_token = response.body().getAccess_token(); //經過access_token,openid獲取nickname
                        LoginAPI.getWXUserInfo(access_token, openid, new Callback<WXUserInfoEntity>() { @Override public void onResponse(Call<WXUserInfoEntity> call, Response<WXUserInfoEntity> response) { String unionid = response.body().getUnionid(); final String nickname = response.body().getNickname(); String headimgurl = response.body().getHeadimgurl(); //微信登陸
                                LoginAPI.loginByWechat(openid, unionid, nickname, headimgurl, new BaseCallBack<LoginResponseEntity>() { @Override public void onSuccess(Response<LoginResponseEntity> response) { LoginResponseEntity.Data data = response.body().getData(); SPHelp.getInstance().saveDao(Constant.SP.appUser, data); WebUserEntity entity = new WebUserEntity(); entity.setLoginType(3); entity.setUserId(data.getUserId() + ""); SPHelp.getInstance().saveDao(Constant.SP.webUser, entity); UserData.setUser(data); //保存微信名到本地
 UserData.setWXnickName(nickname);
                       finish();//這裏不須要寫跳轉,直接finish就能夠了 //startActivity(
new Intent(WXEntryActivity.this, MainActivity.class)); } @Override public void onFailure(StateException exception) { } }); } @Override public void onFailure(Call<WXUserInfoEntity> call, Throwable t) { } }); } @Override public void onFailure(Call<WXtokenResponseEntity> call, Throwable t) { } }); break; case BaseResp.ErrCode.ERR_USER_CANCEL: result = "發送取消"; break; case BaseResp.ErrCode.ERR_AUTH_DENIED: result = "發送被拒絕"; break; default: result = "發送返回"; break; } LogHelp.i("WX","result:"+result); } }

5.ui

public class WXtokenResponseEntity { private String access_token; private String expires_in; private String refresh_token; private String openid; private String scope; public String getAccess_token() { return access_token; } public void setAccess_token(String access_token) { this.access_token = access_token; } public String getExpires_in() { return expires_in; } public void setExpires_in(String expires_in) { this.expires_in = expires_in; } public String getRefresh_token() { return refresh_token; } public void setRefresh_token(String refresh_token) { this.refresh_token = refresh_token; } public String getOpenid() { return openid; } public void setOpenid(String openid) { this.openid = openid; } public String getScope() { return scope; } public void setScope(String scope) { this.scope = scope; } } 

6.this

public static void getWXtoken(String appId, String secret, String code, Callback<WXtokenResponseEntity> callback){ Retrofit retrofit = new Retrofit.Builder().baseUrl("https://api.weixin.qq.com/").addConverterFactory(GsonConverterFactory.create()).build(); LoginByWechatService service = retrofit.create(LoginByWechatService.class); Call<WXtokenResponseEntity> call = service.getWXtoken(appId,secret,code,"authorization_code"); call.enqueue(callback); } public static void getWXUserInfo(String accessToken, String openId, Callback<WXUserInfoEntity> callback) { Retrofit retrofit = new Retrofit.Builder().baseUrl("https://api.weixin.qq.com/").addConverterFactory(GsonConverterFactory.create()).build(); LoginByWechatService service = retrofit.create(LoginByWechatService.class); Call<WXUserInfoEntity> call = service.getWXUserInfo(accessToken, openId); call.enqueue(callback); }

7.url

@GET("sns/userinfo") Call<WXUserInfoEntity> getWXUserInfo(@Query("access_token") String access_token, @Query("openid") String openid); @GET("sns/oauth2/access_token") Call<WXtokenResponseEntity> getWXtoken(@Query("appid") String appid, @Query("secret") String secret, @Query("code") String code, @Query("grant_type") String grant_type);

8.LoginActivity中spa

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); regToWx(); } //微信登陸2016-8-22
public static final String APP_ID = "wx028802dad467ba69"; private IWXAPI api; private void regToWx(){ api = WXAPIFactory.createWXAPI(this,APP_ID,true); api.registerApp(APP_ID); }

點擊事件

case R.id.loginByWechat: LoadProgressView.getInstance().showLoad(this); final SendAuth.Req req = new SendAuth.Req(); req.scope = "snsapi_userinfo"; req.state = "none"; api.sendReq(req); finish(); break;
相關文章
相關標籤/搜索