From 0e7dd8919ae2811063057f18a4db4156c771448a Mon Sep 17 00:00:00 2001
From: 陈奇 <1650699704@qq.com>
Date: Fri, 07 Dec 2018 16:54:04 +0800
Subject: [PATCH] [*]添加了微信登陆

---
 app/src/main/java/com/moral/yunfushao/wxapi/WXEntryActivity.java |  103 ++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 92 insertions(+), 11 deletions(-)

diff --git a/app/src/main/java/com/moral/yunfushao/wxapi/WXEntryActivity.java b/app/src/main/java/com/moral/yunfushao/wxapi/WXEntryActivity.java
index 561afbd..9a863cb 100644
--- a/app/src/main/java/com/moral/yunfushao/wxapi/WXEntryActivity.java
+++ b/app/src/main/java/com/moral/yunfushao/wxapi/WXEntryActivity.java
@@ -4,15 +4,16 @@
 import android.content.Intent;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
-import android.widget.Toast;
 
 import com.lzy.okgo.cache.CacheMode;
 import com.moral.andbrickslib.utils.GsonUtil;
 import com.moral.yunfushao.MainActivity;
+import com.moral.yunfushao.MainApp;
 import com.moral.yunfushao.common.WXConstants;
 import com.moral.yunfushao.httputils.HttpCallBack;
 import com.moral.yunfushao.httputils.WXHttpUtil;
 import com.moral.yunfushao.model.User;
+import com.moral.yunfushao.utils.T;
 import com.moral.yunfushao.wxapi.data.AccessTokenBean;
 import com.moral.yunfushao.wxapi.data.WXUserBean;
 import com.tencent.mm.opensdk.constants.ConstantsAPI;
@@ -40,11 +41,14 @@
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         api = WXAPIFactory.createWXAPI(this, WXConstants.APP_ID, false);
+        api.registerApp(WXConstants.APP_ID);
+        onNewIntent(getIntent());
     }
 
     @Override
     protected void onNewIntent(Intent intent) {
         super.onNewIntent(intent);
+        System.out.println("chenqi onNewIntent");
         setIntent(intent);
         api.handleIntent(intent, this);
     }
@@ -56,6 +60,7 @@
                 goToGetMsg();
                 break;
             case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
+                System.out.println("chenqi create WXEntryActivity COMMAND_SHOWMESSAGE_FROM_WX");
                 goToShowMsg((ShowMessageFromWX.Req) baseReq);
                 break;
             default:
@@ -66,9 +71,7 @@
     @Override
     public void onResp(BaseResp baseResp) {
         String result;
-
-        Toast.makeText(this, "baseresp.getType = " + baseResp.getType(), Toast.LENGTH_SHORT).show();
-
+        System.out.println("chenqi create WXEntryActivity  " + baseResp.errCode);
         switch (baseResp.errCode) {
             case BaseResp.ErrCode.ERR_OK:
                 code = ((SendAuth.Resp) baseResp).code;
@@ -86,28 +89,94 @@
                 result = "���������������";
                 break;
             default:
-                result = "������������";
+                result = "";
                 break;
         }
+        if (result.equals("")) {
+            return;
+        }
+        T.show(result);
+    }
 
-        Toast.makeText(this, result, Toast.LENGTH_LONG).show();
+    /**
+     * ������������������������
+     */
+    private void checkEffective(final String access_token, String openid) {
+        String url = "https://api.weixin.qq.com/sns/auth?access_token=" + access_token + "&openid=" + openid;
+        WXHttpUtil.doGet(url, CacheMode.DEFAULT, new HttpCallBack() {
+            @Override
+            public void onSuccess(String res, String msg) {
+                AccessTokenBean accessTokenBean = GsonUtil.toObj(msg, AccessTokenBean.class);
+                if (accessTokenBean.getErrcode() == 0) {
+                    loginSuccess(accessTokenBean.getAccess_token(), accessTokenBean.getOpenid());
+                } else {
+                    refreshToken(accessTokenBean.getRefresh_token());
+                }
+            }
+
+            @Override
+            public void showLoadingDialog() {
+
+            }
+
+            @Override
+            public void onFail(int errno, String s) {
+                T.show("������������");
+            }
+        });
+    }
+
+    /**
+     * ���������������������������
+     *
+     * @param refresh_tocken
+     */
+    private void refreshToken(String refresh_tocken) {
+        String url = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=" + WXConstants.APP_ID + "&grant_type=refresh_token&refresh_token=" + refresh_tocken;
+        WXHttpUtil.doGet(url, CacheMode.DEFAULT, new HttpCallBack() {
+            @Override
+            public void onSuccess(String res, String msg) {
+                AccessTokenBean accessTokenBean = GsonUtil.toObj(msg, AccessTokenBean.class);
+                if (accessTokenBean.getErrcode() == 40030) {
+                    T.show("������������");
+                } else {
+                    loginSuccess(accessTokenBean.getAccess_token(), accessTokenBean.getOpenid());
+                }
+            }
+
+            @Override
+            public void showLoadingDialog() {
+
+            }
+
+            @Override
+            public void onFail(int errno, String s) {
+                T.show("������������");
+            }
+        });
     }
 
     /**
      * ������������������������
      */
     private void checkWXLogin() {
-        String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid= " +
+        String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" +
                 WXConstants.APP_ID +
-                "&secret=" + "������������" + "&code=" +
+                "&secret=" + WXConstants.SECRET + "&code=" +
                 WXEntryActivity.code +
                 "&grant_type=authorization_code";
         WXHttpUtil.doGet(url, CacheMode.DEFAULT, new HttpCallBack() {
             @Override
             public void onSuccess(String res, String msg) {
                 AccessTokenBean accessTokenBean = GsonUtil.toObj(msg, AccessTokenBean.class);
-                if (accessTokenBean.getAccess_token() == null && accessTokenBean.getOpenid() == null)
-                    getUserInfor(accessTokenBean.getAccess_token(), accessTokenBean.getOpenid());
+                if (accessTokenBean.getErrcode() == 40029) {
+                    //������������
+                    T.show("������������");
+                    return;
+                }
+                if (accessTokenBean.getAccess_token() != null && accessTokenBean.getOpenid() != null) {
+                    checkEffective(accessTokenBean.getAccess_token(), accessTokenBean.getOpenid());
+                }
             }
 
             @Override
@@ -117,6 +186,7 @@
 
             @Override
             public void onFail(int errno, String s) {
+                T.show("������������");
             }
         });
     }
@@ -136,9 +206,12 @@
             @Override
             public void onSuccess(String res, String msg) {
                 WXUserBean bean = new WXUserBean();
+                MainApp.theApp.userId = bean.getNickname();
                 User user = new User();
                 user.set_id(bean.getOpenid());
                 user.setNickname(bean.getNickname());
+                user.setLogin_type(2);
+                MainApp.theApp.sharedPreferencesUtil.saveLoginInfo(user);
             }
 
             @Override
@@ -148,11 +221,19 @@
 
             @Override
             public void onFail(int errno, String s) {
-
+                T.show("������������");
             }
         });
     }
 
+    private void loginSuccess(String... strings) {
+        //���������������������
+        Intent intent = new Intent(WXEntryActivity.this, MainActivity.class);
+        WXEntryActivity.this.startActivity(intent);
+        finish();
+        getUserInfor(strings[0], strings[1]);
+    }
+
     private void goToGetMsg() {
         Intent intent = new Intent(this, MainActivity.class);
         intent.putExtras(getIntent());

--
Gitblit v1.8.0