安卓第三方微信登陆及其中的坑

       做一个项目使用微信登陆。使用过程中只能吐槽BAT三大公司的服务还是阿里做的最好,不管是文档说明还是客服服务。微信登陆中的坑真是太多了。为避免以后再走同样的坑和其他人采坑,分享一下过程。

首先在 https://open.weixin.qq.com 申请 账号,然后在管理中心创建申请应用。打一个签名的申请的app包,

然后下载签名生成工具 :

点击打开链接


通过签名生成工具把读取到的签名 填到应用签名里面以及填写包名。还有一个坑爹的地方 如果申请的应用名称叫Test,而以前别人也申请过的其他应用也叫Test,那么你就不能申请了,为什么不是通过包名去判断是不是以前使用过,应用名称太容易重复了。如果你申请的时候把应用名称改成test1,应用名称依然test,那么微信第三方登录的时候显示的就是 test1

然后提交审核。

下面操作都是审核通过后才会才能使用登陆,以前好像使用微信登陆免费,现在也开始一年300的收费费用了,更坑爹了,连免费服务都没了。

下载微信登陆分享 Jar 包。

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&lang=zh_CN

导入Jar包。


在启动页进行 微信注册


  public static IWXAPI api;


    private void regToWx() {
        api = WXAPIFactory.createWXAPI(this, WXAPPID, true);
        api.registerApp(WXAPPID);
    }

WXAPPID 为 申请审核通过后的 APPID。

在登陆的时候使用 SendAuth.Req,即点击微信登陆调用下面代码

 final SendAuth.Req req = new SendAuth.Req();
                //授权读取用户信息
                req.scope = "snsapi_userinfo";
                req.state = "wechat_sdk_demo_test";
                api.sendReq(req);

注意  req.scope = "snsapi_userinfo";  snsapi_userinfo 需要使用这个值, 获取微信用户信息范围,不能乱写,不然会出现 scope参数错误或没有scope权限 错误

这个网络请求回调的结果在 微信规定的 WXEntryActivity 里。

代码如下


public class  WXEntryActivity extends Activity implements IWXAPIEventHandler{



    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityLogin.api.handleIntent(getIntent(), this);
    }


    @Override
    public void onReq(BaseReq baseReq) {
      
    }

    @Override
    public void onResp(BaseResp baseResp) {

       

        if(baseResp instanceof SendAuth.Resp){
            SendAuth.Resp newResp = (SendAuth.Resp) baseResp;

            //获取微信传回的code
            String code = newResp.code;

            
        }

    }
}

这个需要注意 WXEntryActivity 的位置。需要在申请的包名的路径下。如包名为com.apptest.wxapi  还得有 wxapi 这个包名路径


而我今天遇到的问题是这样的,申请的微信登陆还没审核通过,于是就使用了以前申请的 微信登陆APPID,APPSECRET的,然后在gradle中把包名改成了以前使用 的包名,同时签名也是用了以前的APP的签名key,微信登陆一切正常,但点击 《确认登陆》之后 在 WXEntryActivity 一直没有回调,以为少什么配置,就一直找官方说明,但是怎么找都没找到原因,最后发现是 gradle 中的包名 和 Manifest 中的包名不一样,然后 那个定义好的 WXEntryActivity 就接收不到 登陆授权之后的回调了,真是坑。 也就是在 Manifest中假如 WXEntryActivity 包名为 com.testapp1.wxapi 而 以前申请通过的 微信登陆的包名 为 com.testapp2, 那么com.testapp1.wxapi下的的包名  WXEntryActivity 是得不到 登陆分享回调的,在Manifest中 WXEntryActivity 的包名路径也得为 com.testapp2.wxapi。


登陆之后通过得到的code 再获取access_token,链接格式如下

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

成功时得到如下格式数据:

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


再获取用户基本信息,请求接口格式如下:

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

成功时返回信息:

{ 
"openid":"OPENID",
"nickname":"NICKNAME",
"sex":1,
"province":"PROVINCE",
"city":"CITY",
"country":"COUNTRY",
"headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
"privilege":[
"PRIVILEGE1", 
"PRIVILEGE2"
],
"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值