Prechádzať zdrojové kódy

fixed wx auth error

hanjing 6 rokov pred
rodič
commit
b87cc404a1

+ 19 - 0
app/src/developSheeptest/java/com/sheep/jiuyan/samllsheep/wxapi/WXEntryActivity.java

@@ -3,9 +3,14 @@ package com.sheep.jiuyan.samllsheep.wxapi;
 import android.content.Intent;
 import android.os.Bundle;
 
+import com.sheep.gamegroup.event.WXLoginAuthEvent;
 import com.sheep.jiuyan.samllsheep.wxutil.WXAPIUtil;
+import com.tencent.mm.opensdk.modelbase.BaseResp;
+import com.tencent.mm.opensdk.modelmsg.SendAuth;
 import com.umeng.socialize.weixin.view.WXCallbackActivity;
 
+import org.greenrobot.eventbus.EventBus;
+
 public class WXEntryActivity extends WXCallbackActivity {
 
     @Override
@@ -21,4 +26,18 @@ public class WXEntryActivity extends WXCallbackActivity {
         finish();
     }
 
+    @Override
+    public void onResp(BaseResp resp) {
+        if (resp instanceof SendAuth.Resp) {
+            if (resp.errCode == BaseResp.ErrCode.ERR_OK) {
+                String code = ((SendAuth.Resp) resp).code;
+                EventBus.getDefault().post(new WXLoginAuthEvent(code));
+            } else{
+                EventBus.getDefault().post(new WXLoginAuthEvent(null));
+            }
+        } else {
+            super.onResp(resp);
+        }
+    }
+
 }

+ 10 - 0
app/src/main/java/com/sheep/gamegroup/event/WXLoginAuthEvent.java

@@ -0,0 +1,10 @@
+package com.sheep.gamegroup.event;
+
+public class WXLoginAuthEvent {
+
+    public String code;
+
+    public WXLoginAuthEvent(String code) {
+        this.code = code;
+    }
+}

+ 69 - 0
app/src/main/java/com/sheep/gamegroup/module/login/LoginAct.java

@@ -11,10 +11,14 @@ import android.text.TextUtils;
 import android.util.Log;
 import android.view.Menu;
 
+import com.alibaba.fastjson.JSONObject;
 import com.kfzs.duanduan.utils.StatusBarUtils;
 import com.sheep.gamegroup.absBase.BaseUMActivity;
+import com.sheep.gamegroup.event.WXLoginAuthEvent;
 import com.sheep.gamegroup.greendao.DDProviderHelper;
+import com.sheep.gamegroup.model.entity.BaseMessage;
 import com.sheep.gamegroup.model.entity.LoginEntity;
+import com.sheep.gamegroup.model.util.SheepSubscriber;
 import com.sheep.gamegroup.module.login.controller.LoginController;
 import com.sheep.gamegroup.module.login.fragments.EditUserInfoFgt;
 import com.sheep.gamegroup.module.login.fragments.FindAccountFgt;
@@ -25,10 +29,16 @@ import com.sheep.gamegroup.greendao.download.Account;
 import com.sheep.gamegroup.module.login.fragments.WelcomeFgt;
 import com.sheep.gamegroup.util.ApiJSONUtil;
 import com.sheep.gamegroup.util.CertificationUtil;
+import com.sheep.gamegroup.util.ChannelContent;
+import com.sheep.gamegroup.util.DataUtil;
+import com.sheep.gamegroup.util.FastJsonUtils;
 import com.sheep.gamegroup.util.Jump2View;
+import com.sheep.gamegroup.util.PreferenceUtils;
 import com.sheep.gamegroup.util.TestUtil;
+import com.sheep.gamegroup.util.UMConfigUtils;
 import com.sheep.jiuyan.samllsheep.R;
 import com.sheep.jiuyan.samllsheep.SheepApp;
+import com.sheep.jiuyan.samllsheep.utils.G;
 import com.sheep.jiuyan.samllsheep.utils.SpUtils;
 import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
 import com.sheep.jiuyan.samllsheep.wxutil.WXAPIUtil;
@@ -36,10 +46,16 @@ import com.umeng.socialize.UMAuthListener;
 import com.umeng.socialize.UMShareAPI;
 import com.umeng.socialize.bean.SHARE_MEDIA;
 
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+
 import java.util.List;
 import java.util.Map;
 import java.util.Stack;
 
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+
 public class LoginAct extends BaseUMActivity implements LoginController {
 
     private boolean isLogined = false;
@@ -50,6 +66,13 @@ public class LoginAct extends BaseUMActivity implements LoginController {
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         StatusBarUtils.setTranslucent(this);
         super.onCreate(savedInstanceState);
+        EventBus.getDefault().register(this);
+    }
+
+    @Override
+    public void onDestroy() {
+        EventBus.getDefault().unregister(this);
+        super.onDestroy();
     }
 
     @Override
@@ -278,4 +301,50 @@ public class LoginAct extends BaseUMActivity implements LoginController {
         return sp.getBoolean("first_startup", true);
     }
 
+    @Subscribe
+    public void whenWXUserAuth(WXLoginAuthEvent ev) {
+        if (TextUtils.isEmpty(ev.code)) {
+            G.showToast("微信授权失败");
+        } else {
+            WXAPIUtil.loadWXUserToken(ev.code, (ret, openId, token) -> {
+                if (ret) {
+                    JSONObject j = new JSONObject();
+                    j.put("code", token);
+                    j.put("username", openId);
+                    j.put("scope", ChannelContent.getInstance().getChannel_name());
+                    PreferenceUtils.setPrefString(SheepApp.getInstance(), UMConfigUtils.LOGIN_TYPE, UMConfigUtils.Source.WECHAT);
+                    SheepApp.getInstance().getNetComponent().getApiService()
+                            .LoginByWX(j)
+                            .subscribeOn(Schedulers.io())
+                            .observeOn(AndroidSchedulers.mainThread())
+                            .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
+                                @Override
+                                public void onError(BaseMessage baseMessage) {
+                                    G.shortToast("微信登录失败  请检查网络是否正常");
+                                    hideProgress();
+                                }
+
+                                @Override
+                                public void onNext(BaseMessage baseMessage) {
+                                    hideProgress();
+                                    if (baseMessage != null) {
+                                        LoginEntity loginEty = FastJsonUtils.toBean(JSONObject.toJSONString(baseMessage.getData()), LoginEntity.class);
+                                        loginEty.setOpenid(openId);
+                                        loginEty.setAccesstoken(token);
+                                        if (TextUtils.isEmpty(SheepApp.getInstance().getGameCode())) {
+                                            SpUtils.saveToken(SheepApp.getInstance(), loginEty.getToken());
+                                            DataUtil.getInstance().initUserEntity(loginEty.getUser());
+                                        }
+                                        whenLoginSuccess(LoginController.PLATFORM_WX, loginEty);
+                                        TestUtil.saveUser(loginEty);
+                                    }
+                                }
+                            });
+                } else {
+                    G.showToast("微信授权失败");
+                }
+            });
+        }
+    }
+
 }

+ 24 - 38
app/src/main/java/com/sheep/gamegroup/module/login/fragments/AbsLoginFgt.java

@@ -1,6 +1,7 @@
 package com.sheep.gamegroup.module.login.fragments;
 
 
+import android.os.Bundle;
 import android.support.v4.app.Fragment;
 import android.text.Editable;
 import android.text.TextUtils;
@@ -11,6 +12,7 @@ import android.widget.ImageView;
 import android.widget.TextView;
 
 import com.alibaba.fastjson.JSONObject;
+import com.sheep.gamegroup.event.WXLoginAuthEvent;
 import com.sheep.gamegroup.model.entity.BaseMessage;
 import com.sheep.gamegroup.model.entity.LoginEntity;
 import com.sheep.gamegroup.model.util.SheepSubscriber;
@@ -28,10 +30,14 @@ import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.sheep.jiuyan.samllsheep.base.BaseFragment;
 import com.sheep.jiuyan.samllsheep.utils.G;
 import com.sheep.jiuyan.samllsheep.utils.SpUtils;
+import com.sheep.jiuyan.samllsheep.wxutil.WXAPIUtil;
 import com.umeng.socialize.UMAuthListener;
 import com.umeng.socialize.UMShareAPI;
 import com.umeng.socialize.bean.SHARE_MEDIA;
 
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+
 import java.util.Map;
 
 import butterknife.BindView;
@@ -60,6 +66,16 @@ public class AbsLoginFgt extends BaseFragment {
     }
 
     @Override
+    public void onCreate(Bundle b) {
+        super.onCreate(b);
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+    }
+
+    @Override
     public int getLayoutId() {
         return 0;
     }
@@ -72,44 +88,14 @@ public class AbsLoginFgt extends BaseFragment {
     @OnClick(R.id.wx_login_btn)
     public void doWxLogin(View v) {
         LOGIN_WX.onEvent();
-        UMShareAPI.get(SheepApp.getInstance()).doOauthVerify(getActivity(), SHARE_MEDIA.WEIXIN, new ThirdpartAuthListener("微信") {
-            @Override
-            public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
-                JSONObject j = new JSONObject();
-                j.put("code", data.get("access_token"));
-                j.put("username", data.get("openid"));
-                j.put("scope", ChannelContent.getInstance().getChannel_name());
-                PreferenceUtils.setPrefString(SheepApp.getInstance(), UMConfigUtils.LOGIN_TYPE, UMConfigUtils.Source.WECHAT);
-                SheepApp.getInstance().getNetComponent().getApiService()
-                        .LoginByWX(j)
-                        .subscribeOn(Schedulers.io())
-                        .observeOn(AndroidSchedulers.mainThread())
-                        .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
-                            @Override
-                            public void onError(BaseMessage baseMessage) {
-                                G.shortToast("微信登录失败  请检查网络是否正常");
-                                hideProgress();
-                            }
-
-                            @Override
-                            public void onNext(BaseMessage baseMessage) {
-                                hideProgress();
-                                if (baseMessage != null) {
-                                    LoginEntity loginEty = FastJsonUtils.toBean(JSONObject.toJSONString(baseMessage.getData()), LoginEntity.class);
-                                    loginEty.setOpenid(data.get("openid"));
-                                    loginEty.setAccesstoken(data.get("access_token"));
-                                    if (TextUtils.isEmpty(SheepApp.getInstance().getGameCode())) {
-                                        SpUtils.saveToken(SheepApp.getInstance(), loginEty.getToken());
-                                        DataUtil.getInstance().initUserEntity(loginEty.getUser());
-                                    }
-                                    mController.whenLoginSuccess(LoginController.PLATFORM_WX, loginEty);
-                                    TestUtil.saveUser(loginEty);
-                                }
-                            }
-                        });
-
-            }
-        });
+        WXAPIUtil.launchAuth(getContext());
+//        UMShareAPI.get(SheepApp.getInstance()).doOauthVerify(getActivity(), SHARE_MEDIA.WEIXIN, new ThirdpartAuthListener("微信") {
+//            @Override
+//            public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
+
+//
+//            }
+//        });
     }
 
     @OnClick(R.id.qq_login_btn)

+ 52 - 25
app/src/main/java/com/sheep/gamegroup/util/js/KFZSJs.java

@@ -18,6 +18,7 @@ import android.webkit.JavascriptInterface;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.sheep.gamegroup.absBase.AbsObserver;
+import com.sheep.gamegroup.event.WXLoginAuthEvent;
 import com.sheep.gamegroup.event.WebViewEvent;
 import com.sheep.gamegroup.model.api.IWeb;
 import com.sheep.gamegroup.model.entity.BaseMessage;
@@ -72,6 +73,7 @@ import com.umeng.socialize.bean.SHARE_MEDIA;
 import com.umeng.socialize.media.UMImage;
 
 import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
 
 import java.net.URI;
 import java.util.HashMap;
@@ -742,38 +744,63 @@ public class KFZSJs {
         });
     }
 
+    @Subscribe
+    public void whenWXAuth(WXLoginAuthEvent ev) {
+        EventBus.getDefault().unregister(this);
+        if(!TextUtils.isEmpty(ev.code)) {
+            WXAPIUtil.loadWXUserToken(ev.code, (ret, openid, token)->{
+                Map<String, String> params = new HashMap<>();
+                params.put("access_token", token);
+                params.put("openid", openid);
+                params.put("account_type", "wx");
+                params.put("app_id", Config.WX_AUTH_APP_ID);
+                loadThirdPartUserInfo("wx", params);
+            });
+        }else{
+            G.shortToast("微信授权失败");
+            iWeb.loadJs("handleLogin(2)");
+        }
+    }
+
     @JavascriptInterface
     public void loginThirdPartApp(String type) {
-        UMShareAPI.get(SheepApp.getInstance()).doOauthVerify(activity,
-                "wx".equals(type) ? SHARE_MEDIA.WEIXIN : SHARE_MEDIA.QQ,
-                new UMAuthListener() {
-                    @Override
-                    public void onStart(SHARE_MEDIA share_media) {
+        if ("wx".equals(type)) {
+            WXAPIUtil.launchAuth(activity);
+            if (!EventBus.getDefault().isRegistered(this)) {
+                EventBus.getDefault().register(this);
+            }
+        } else {
+            UMShareAPI.get(SheepApp.getInstance()).doOauthVerify(activity,
+                    SHARE_MEDIA.QQ,
+                    new UMAuthListener() {
+                        @Override
+                        public void onStart(SHARE_MEDIA share_media) {
 
-                    }
+                        }
 
-                    @Override
-                    public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
-                        Map<String, String> params = new HashMap<>();
-                        params.put("access_token", map.get("access_token"));
-                        params.put("openid", map.get("openid"));
-                        params.put("account_type", type);
-                        params.put("app_id", "wx".equals(type) ? Config.WX_AUTH_APP_ID : Config.QQ_APP_ID);
-                        loadThirdPartUserInfo(type, params);
+                        @Override
+                        public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
+                            Map<String, String> params = new HashMap<>();
+                            params.put("access_token", map.get("access_token"));
+                            params.put("openid", map.get("openid"));
+                            params.put("account_type", type);
+                            params.put("app_id", "wx".equals(type) ? Config.WX_AUTH_APP_ID : Config.QQ_APP_ID);
+                            loadThirdPartUserInfo(type, params);
 //                        onFinally("", type, params);
-                    }
+                        }
 
-                    @Override
-                    public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
-                        G.shortToast(("wx".equals(type) ? "微信" : "QQ") + "授权失败");
-                        iWeb.loadJs("handleLogin(2)");
-                    }
+                        @Override
+                        public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
+                            G.shortToast(("wx".equals(type) ? "微信" : "QQ") + "授权失败");
+                            iWeb.loadJs("handleLogin(2)");
+                        }
 
-                    @Override
-                    public void onCancel(SHARE_MEDIA share_media, int i) {
-                        iWeb.loadJs("handleLogin(3)");
-                    }
-                });
+                        @Override
+                        public void onCancel(SHARE_MEDIA share_media, int i) {
+                            iWeb.loadJs("handleLogin(3)");
+                        }
+                    });
+        }
     }
 
     private void loadThirdPartUserInfo(final String platform, Map<String, String> cookies) {

+ 42 - 26
app/src/main/java/com/sheep/gamegroup/view/activity/PersonalInfoAct.java

@@ -2,6 +2,8 @@ package com.sheep.gamegroup.view.activity;
 
 import android.app.Activity;
 import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
 import android.text.TextUtils;
 import android.view.View;
 import android.widget.ImageView;
@@ -9,8 +11,10 @@ import android.widget.PopupWindow;
 import android.widget.TextView;
 
 import com.alibaba.fastjson.JSONObject;
+import com.kfzs.duanduan.utils.StatusBarUtils;
 import com.sheep.gamegroup.absBase.AbsChooseImageActivity;
 import com.sheep.gamegroup.absBase.AbsObserver;
+import com.sheep.gamegroup.event.WXLoginAuthEvent;
 import com.sheep.gamegroup.model.entity.BaseMessage;
 import com.sheep.gamegroup.model.entity.UserEntity;
 import com.sheep.gamegroup.model.util.SheepSubscriber;
@@ -21,14 +25,20 @@ import com.sheep.gamegroup.util.GlideImageLoader;
 import com.sheep.gamegroup.util.Jump2View;
 import com.sheep.gamegroup.util.ViewUtil;
 import com.sheep.gamegroup.util.share.ShareLinkConfig;
+import com.sheep.jiuyan.samllsheep.Config;
 import com.sheep.jiuyan.samllsheep.R;
 import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.sheep.jiuyan.samllsheep.utils.G;
 import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
+import com.sheep.jiuyan.samllsheep.wxutil.WXAPIUtil;
 import com.umeng.socialize.UMAuthListener;
 import com.umeng.socialize.UMShareAPI;
 import com.umeng.socialize.bean.SHARE_MEDIA;
 
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+
+import java.util.HashMap;
 import java.util.Map;
 
 import butterknife.BindView;
@@ -82,6 +92,18 @@ public class PersonalInfoAct extends AbsChooseImageActivity {
 
 
     @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        EventBus.getDefault().register(this);
+    }
+
+    @Override
+    public void onDestroy() {
+        EventBus.getDefault().unregister(this);
+        super.onDestroy();
+    }
+
+    @Override
     protected int getLayoutId() {
         return R.layout.xpersion_info_act_layout;
     }
@@ -270,7 +292,7 @@ public class PersonalInfoAct extends AbsChooseImageActivity {
                 BIND_WX.onEvent();
                 break;
             case R.id.personal_info_authentication_container: ////跳转授权
-                Jump2View.getInstance().goRealNameAuther(activity, userEntity,  RealNameAuthenAct.ONLY_FINISH);
+                Jump2View.getInstance().goRealNameAuther(activity, userEntity, RealNameAuthenAct.ONLY_FINISH);
                 break;
         }
     }
@@ -301,6 +323,22 @@ public class PersonalInfoAct extends AbsChooseImageActivity {
         });
     }
 
+    @Subscribe
+    public void whenWXAuth(WXLoginAuthEvent ev) {
+        if (!TextUtils.isEmpty(ev.code)) {
+            WXAPIUtil.loadWXUserToken(ev.code, (ret, openid, token) -> {
+                Map<String, String> params = new HashMap<>();
+                params.put("access_token", token);
+                params.put("openid", openid);
+                params.put("account_type", "wx");
+                params.put("app_id", Config.WX_AUTH_APP_ID);
+                bindThird("wechat", token, openid);
+            });
+        } else {
+            G.shortToast("微信授权失败");
+        }
+    }
+
     private void bindWX() {
         UMShareAPI.get(this).deleteOauth(this, SHARE_MEDIA.WEIXIN, new UMAuthListener() {
             @Override
@@ -310,29 +348,7 @@ public class PersonalInfoAct extends AbsChooseImageActivity {
 
             @Override
             public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
-                UMShareAPI.get(activity).doOauthVerify(activity, SHARE_MEDIA.WEIXIN, new UMAuthListener() {
-                    @Override
-                    public void onStart(SHARE_MEDIA platform) {
-                        showProgress();
-                    }
-
-                    @Override
-                    public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
-                        bindThird("wechat", data.get("access_token"), data.get("openid"));
-                    }
-
-                    @Override
-                    public void onError(SHARE_MEDIA platform, int action, Throwable t) {
-                        G.showToast("微信授权失败  请检查网络是否正常");
-                        hideProgress();
-                    }
-
-                    @Override
-                    public void onCancel(SHARE_MEDIA platform, int action) {
-                        G.showToast("您取消了微信授权");
-                        hideProgress();
-                    }
-                });
+                WXAPIUtil.launchAuth(SheepApp.getInstance());
             }
 
             @Override
@@ -445,9 +461,9 @@ public class PersonalInfoAct extends AbsChooseImageActivity {
         tvSex.setText((userEntity.getGender() == 0) ? "点击设置" : (userEntity.getGender() == 1 ? "男" : "女"));
         tvBirthday.setText((userEntity.getBirthday().substring(0, 1)).equals("0") ? "点击设置" : userEntity.getBirthday().substring(0, 10));
         personal_info_name.setText(userEntity.getNickname());
-        if(TextUtils.isEmpty(userEntity.getUser_name())){
+        if (TextUtils.isEmpty(userEntity.getUser_name())) {
             personal_info_loginname.setText("还未设置登录名");
-        }else {
+        } else {
             personal_info_loginname.setText(userEntity.getUser_name());
         }
         personal_info_code.setText(userEntity.getInvitation_code());

+ 53 - 16
app/src/main/java/com/sheep/jiuyan/samllsheep/wxutil/WXAPIUtil.java

@@ -2,14 +2,17 @@ package com.sheep.jiuyan.samllsheep.wxutil;
 
 import android.content.Context;
 import android.content.Intent;
+import android.widget.Toast;
 
+import com.alibaba.fastjson.JSONObject;
 import com.sheep.gamegroup.util.LogUtil;
+import com.sheep.jiuyan.samllsheep.Config;
+import com.tencent.mm.opensdk.modelmsg.SendAuth;
+import com.tencent.mm.opensdk.openapi.IWXAPI;
+import com.tencent.mm.opensdk.openapi.WXAPIFactory;
 import com.zhy.http.okhttp.OkHttpUtils;
 import com.zhy.http.okhttp.callback.StringCallback;
 
-import org.json.JSONException;
-import org.json.JSONObject;
-
 import java.util.HashMap;
 import java.util.Map;
 
@@ -28,6 +31,41 @@ public class WXAPIUtil {
         context.startActivity(newIntent);
     }
 
+    public static void launchAuth(Context context) {
+        IWXAPI wxapi = WXAPIFactory.createWXAPI(context, Config.WX_AUTH_APP_ID, true);
+        if (!wxapi.isWXAppInstalled()) {
+            Toast.makeText(context, "微信未安装", Toast.LENGTH_SHORT).show();
+            return;
+        }
+        final SendAuth.Req req = new SendAuth.Req();
+        req.scope = "snsapi_userinfo,";
+        req.state = "cybeye";
+        wxapi.sendReq(req);
+    }
+
+    public static void loadWXUserToken(String code, WXUserTokenCallback callback) {
+        OkHttpUtils.get()
+                .url("https://api.weixin.qq.com/sns/oauth2/access_token?" +
+                        "appid=" + Config.WX_AUTH_APP_ID +
+                        "&secret=" + "6cf7ca0f6c6ac97c6961d901fee8adb9" +
+                        "&code=" + code +
+                        "&grant_type=authorization_code")
+                .build()
+                .execute(new StringCallback() {
+
+                    @Override
+                    public void onError(Call call, Exception e, int id) {
+                        e.printStackTrace();
+                    }
+
+                    @Override
+                    public void onResponse(String response, int id) {
+                        JSONObject resp = JSONObject.parseObject(response);
+                        callback.callback(true, resp.getString("openid"), resp.getString("access_token"));
+                    }
+                });
+    }
+
     public static void loadWXUserInfo(String openId, String accessToken, WXUserInfoCallback callback) {
         OkHttpUtils.get()
                 .url("https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openId)
@@ -42,21 +80,16 @@ public class WXAPIUtil {
                     @Override
                     public void onResponse(String response, int id) {
                         LogUtil.logI("wx user info: " + response);
-                        try {
-                            JSONObject resultJson = new JSONObject(response);
-                            if (resultJson.has("errcode")) {
-                                callback.callback(false, null);
-                                return;
-                            }
-                            Map<String, String> info = new HashMap<>();
-                            info.put("screen_name", resultJson.getString("nickname"));
-                            info.put("profile_image_url", resultJson.getString("headimgurl"));
-                            info.put("gender", resultJson.getInt("sex")==1?"男":"女");
-                            callback.callback(true, info);
-                        } catch (JSONException je) {
-                            je.printStackTrace();
+                        JSONObject resultJson = JSONObject.parseObject(response);
+                        if (resultJson.containsKey("errcode")) {
                             callback.callback(false, null);
+                            return;
                         }
+                        Map<String, String> info = new HashMap<>();
+                        info.put("screen_name", resultJson.getString("nickname"));
+                        info.put("profile_image_url", resultJson.getString("headimgurl"));
+                        info.put("gender", resultJson.getIntValue("sex") == 1 ? "男" : "女");
+                        callback.callback(true, info);
                     }
                 });
     }
@@ -65,4 +98,8 @@ public class WXAPIUtil {
         void callback(boolean ret, Map<String, String> userInfo);
     }
 
+    public static interface WXUserTokenCallback {
+        void callback(boolean ret, String openid, String token);
+    }
+
 }