package com.yang.sharelogin.platform.weixin; 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 org.json.JSONException; import org.json.JSONObject; import com.yang.sharelogin.TPManager; import com.yang.sharelogin.listener.StateListener; import com.yang.sharelogin.platform.weixin.openapi.WXApiService; import retrofit2.Response; import retrofit2.Retrofit; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; /** * Created by yangc on 2017/5/6. * E-Mail:yangchaojiang@outlook.com * Deprecated: 微信授权页面 */ public class AssistActivity extends Activity implements IWXAPIEventHandler { private IWXAPI mAPI; private StateListener<String> mListener; private static final String WX_API_HOST = "https://api.weixin.qq.com"; private static final String TAG = "AssistActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mAPI = WXManager.getWXAPI(); mListener = WXManager.getStateListener(); if (mAPI != null) { mAPI.handleIntent(getIntent(), this); } finish(); } @Override public void onResp(BaseResp baseResp) { if (null == mListener) { finish(); } switch (baseResp.errCode) { case BaseResp.ErrCode.ERR_OK: if (baseResp.getType() == 1) {//授权登录获取用户信息 getAccessToken(((SendAuth.Resp) baseResp).code); } else if (baseResp.getType() == 2) {// 分享 mListener.onComplete("share success!"); } else { mListener.onError("operation type is invalid!"); } break; case BaseResp.ErrCode.ERR_USER_CANCEL: mListener.onCancel(); break; case BaseResp.ErrCode.ERR_SENT_FAILED: mListener.onError("sent failed!"); break; case BaseResp.ErrCode.ERR_AUTH_DENIED: mListener.onError("auth denied!"); break; case BaseResp.ErrCode.ERR_UNSUPPORT: mListener.onError("operation is not support!"); break; case BaseResp.ErrCode.ERR_COMM: mListener.onError("COMM error!"); break; default: break; } finish(); } @Override public void onReq(BaseReq baseReq) { finish(); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (mAPI != null) { mAPI.handleIntent(intent, this); } finish(); } /*** * get access token * * @param code */ private void getAccessToken(String code) { final Retrofit retrofit = new Retrofit.Builder() .baseUrl(WX_API_HOST) .build(); retrofit.create(WXApiService.class) .getWXAccessToken( TPManager.getInstance().getWXAppId(), TPManager.getInstance().getWXAppSecret(), code, "authorization_code" ) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( new Subscriber<Response>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { mListener.onError(e.toString()); } @Override public void onNext(Response response) { try { String jsonStr = response.body().toString(); JSONObject jsonObject = new JSONObject(jsonStr); String accesstoken = jsonObject.getString("access_token"); String openid = jsonObject.getString("openid"); getUserInfo(retrofit, accesstoken, openid, jsonStr); } catch (JSONException e) { e.printStackTrace(); mListener.onError(e.toString()); } } } ); } /** * get user information * * @param restAdapter * @param access_token * @param openid */ private void getUserInfo(Retrofit restAdapter, String access_token, String openid, final String verifyData) { restAdapter.create(WXApiService.class) .getUserInfo(access_token, openid) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( new Subscriber<Response>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { mListener.onError(e.toString()); } @Override public void onNext(Response response) { String jsonStr = response.body().toString(); // 返回格式如下 /*{ "user_data":{}, "verify_data":{} \" }*/ mListener.onComplete("{\"user_data\":" + jsonStr + "," + "\"verify_data\":" + verifyData + "}"); } } ); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); } }