微信登录

Application类:

// 从官方网站申请到的合法APP_ID
    private static final String APP_ID = "";
    public static IWXAPI api;

    private void regToWx(Context context) {
        // 通过WXAPIFactory工厂,获取IWXAPI的实例
        api = WXAPIFactory.createWXAPI(context, APP_ID, true);
        // 将应用的appId注册到微信
        api.registerApp(APP_ID);
    }

onCreate()方法里调用regToWx(this);

包名下新建wxapi包,增加类WXEntryActivity

package com.wzkj.vzone.org.wxapi;

import android.app.Activity;
import android.os.Bundle;

import com.tencent.mm.sdk.modelbase.BaseReq;
import com.tencent.mm.sdk.modelbase.BaseResp;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
import com.wzkj.vzone.org.R;

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
    //这两个参数在文档中没有找到,可能是瞎了,,,自己在代码里面找了会才找到,这两个常量代表了微信返回的消息类型,是对登录的处理还是对分享的处理,登录会在后面介绍到
    private static final int RETURN_MSG_TYPE_LOGIN = 1;
    private static final int RETURN_MSG_TYPE_SHARE = 2;
    private static final String TAG = "WXEntryActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 自定义的layout
        setContentView(R.layout.activity_wxentry);
        TMDApplication.api.handleIntent(getIntent(), this);
        //如果没回调onResp,八成是这句没有写 
    }

    // 微信发送消息给app,app接受并处理的回调函数
    @Override
    public void onReq(BaseReq baseReq) {
    }

    // app发送消息给微信,微信返回的消息回调函数,根据不同的返回码来判断操作是否成功
    @Override
    public void onResp(BaseResp resp) {
        switch (resp.errCode) {
            case BaseResp.ErrCode.ERR_AUTH_DENIED:
            case BaseResp.ErrCode.ERR_USER_CANCEL:
                //showToast("微信失败");
                break;
            case BaseResp.ErrCode.ERR_OK:
                switch (resp.getType()) {
                    case RETURN_MSG_TYPE_SHARE: //showToast("微信分享成功");
                        finish();
                        break;
                    case RETURN_MSG_TYPE_LOGIN:
                        Toast.makeText(this, "微信登录返回", Toast.LENGTH_LONG).show();
                        // 获取到code
                        String code = ((SendAuth.Resp) resp).code;
                }
                break;
        }
    }
}

清单文件中:

<activity
            android:name=".wxapi.WXEntryActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:exported="true"></activity>

发送微信登录请求:

 if (!TMDApplication.api.isWXAppInstalled()) {
      AppData.showToast("您还未安装微信客户端");
      return;
 }
 final SendAuth.Req req = new SendAuth.Req();
 req.scope = "snsapi_userinfo";
 req.state = "diandi_wx_login";
 TMDApplication.api.sendReq(req);

利用微信返回的code去请求access_token。第二步拿到的code还不算完呢,这个code的声明周期只有五分钟,而且每个code只可以用一次,切记请勿重复使用,否则就会出现{“errcode”:40029,”errmsg”:”invalid code”}这种问题了。也是构造一个请求发送给微信,可以直接接在获取code之后,立马把这个请求发送出去,因为是属于微信登录的中间操作。通过code请求access_token的接口如下:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

参数说明

参数 必须 说明
appid 是 应用唯一标识,在微信开放平台提交应用审核通过后获得
secret 是 应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
code 是 填写第一步获取的code参数
grant_type 是 填authorization_code
问我在那里获取微信返回的code?肯定是在WXEntryActivity里面咯,前面提到了这个activity是专门用来给微信调用的,附上WXEnrtyActivity.java里面的代码:

请求返回回来的参数形式如下:

{ “access_token”:”ACCESS_TOKEN”,
“expires_in”:7200,
“refresh_token”:”REFRESH_TOKEN”,
“openid”:”OPENID”,
“scope”:”SCOPE”,
“unionid”:”o6_bmasdasdsad6_2sgVt7hMZOPfL” }

官方给出的参数列表:

参数 说明
access_token 微信接口调用凭证
expires_in access_token接口调用凭证超时时间,单位(秒)
refresh_token 用户刷新access_token
openid 授权用户唯一标识
scope 用户授权的作用域,使用逗号(,)分隔
unionid 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。
微信验证登录到这里就差不多了,验证的主要目的就是拿到微信给的这个access_token,用来调用微信的各种接口,可以获取用户的基本信息等等。

Demo下载:https://github.com/ITAnt/WechatLogin
记得要导出为apk才能正常运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值