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

    xiaoxiao2025-06-04  66

           做一个项目使用微信登陆。使用过程中只能吐槽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" }

    转载请注明原文地址: https://ju.6miu.com/read-1299576.html
    最新回复(0)