WXEntryActivity.java 6.47 KB
package com.lotus.town.wxapi;

import android.os.Bundle;
import android.os.Message;
import android.support.annotation.Nullable;
import android.util.Log;

import com.alibaba.fastjson.JSON;
import com.lotus.town.BaseActivity;
import com.lotus.town.event.SharedWXEvent;
import com.lotus.town.event.WxLoginEvent;
import com.lotus.town.scManager;
import com.lotus.town.service.login.LoginManager;
import com.lotus.town.uiManager;
import com.lotus.town.utils.SharedPrefConfig;
import com.lotus.town.utils.UIUtils;
import com.sdk.Sdk;
import com.sdk.http.HttpCallback;
import com.sdk.http.HttpRequest;
import com.sdk.http.HttpResponse;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;

import org.greenrobot.eventbus.EventBus;

public class WXEntryActivity extends BaseActivity implements IWXAPIEventHandler {

    private static final int RETURN_MSG_TYPE_LOGIN = 1;
    private static final int RETURN_MSG_TYPE_SHARE = 2;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //如果没回调onResp,八成是这句没有写
        WxManager.mWxApi.handleIntent(getIntent(), this);
    }

    // 微信发送请求到第三方应用时,会回调到该方法
    @Override
    public void onReq(BaseReq req) {

    }

    // 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
    //app发送消息给微信,处理返回消息的回调
    @Override
    public void onResp(BaseResp resp) {
        switch (resp.errCode) {

            case BaseResp.ErrCode.ERR_AUTH_DENIED:
            case BaseResp.ErrCode.ERR_USER_CANCEL:
                if (RETURN_MSG_TYPE_SHARE == resp.getType()) UIUtils.showToast("分享失败");
                else UIUtils.showToast("登录失败");
                break;
            case BaseResp.ErrCode.ERR_OK:
                switch (resp.getType()) {
                    case RETURN_MSG_TYPE_LOGIN:
                        //拿到了微信返回的code,立马再去请求access_token
                        String code = ((SendAuth.Resp) resp).code;
                        final HttpRequest request = new WxRequest(WxConfig.APP_ID,WxConfig.APP_SECURE,code,"authorization_code");
                        Sdk.http().get(request, new HttpCallback<WxAtResponse>() {

                            @Override
                            protected void onSuccess(HttpResponse result) {
                                if(result instanceof WxAtResponse){
                                    WxUserRequest wxUserRequest = new WxUserRequest(((WxAtResponse) result).getAccess_token(),((WxAtResponse) result).getOpenid());
                                    Sdk.http().get(wxUserRequest, new HttpCallback<WxUserResponse>() {

                                        @Override
                                        protected void onSuccess(HttpResponse result) {
                                            if(result instanceof WxUserResponse) {
                                                uiManager.getInstance(WXEntryActivity.this).setUserInfo(((WxUserResponse) result).getNickname(),((WxUserResponse) result).getSex(),((WxUserResponse) result).getUnionid(),
                                                        ((WxUserResponse) result).getOpenid(),((WxUserResponse) result).getLanguage(),((WxUserResponse) result).getCity(),((WxUserResponse) result).getProvince()
                                                ,((WxUserResponse) result).getCountry(),((WxUserResponse) result).getHeadimgurl());
                                                uiManager.getInstance(WXEntryActivity.this).loginSuccess();
                                                WxLoginEvent event = new WxLoginEvent();
                                                event.setSuccess(true);
                                                event.setOpenId(((WxUserResponse) result).getOpenid());
                                                EventBus.getDefault().post(event);
                                                LoginManager.login(((WxUserResponse) result).getOpenid(),((WxUserResponse) result).getNickname());
                                                mHandler.sendEmptyMessage(0);
                                                finish();
                                            }
                                        }

                                        @Override
                                        protected WxUserResponse parse(String response) {
                                            WxUserResponse res = JSON.parseObject(response,getType());
                                            return res;
                                        }
                                    });


                                }
                            }

                            @Override
                            protected void onError(Throwable ex) {
                                WxLoginEvent event = new WxLoginEvent();
                                event.setSuccess(false);
                                event.setOpenId("");
                                EventBus.getDefault().post(event);
                                mHandler.sendEmptyMessage(1);
                            }

                            @Override
                            protected WxAtResponse parse(String response) {
                                WxAtResponse res = JSON.parseObject(response,getType());
                                return res;
                            }
                        });
                        //就在这个地方,用网络库什么的或者自己封的网络api,发请求去咯,注意是get请求

                        break;

                    case RETURN_MSG_TYPE_SHARE:
                        SharedPrefConfig.getInstance(this).sharedTime();
                        UIUtils.showToast("3朵荷花已经下发到您的账户");
                        scManager.getInstance(this).addLotus(3);
                        EventBus.getDefault().post(new SharedWXEvent());
                        finish();
                        break;
                }
                break;
        }
    }

    @Override
    protected void HandleMessage(Message msg) {
        if(msg.what == 0) {
            UIUtils.showToast("登录成功");
        } else if(msg.what == 1){
        } else if(msg.what == 1){UIUtils.showToast("登录失败");

        }
    }
}