分享:个人 APP(非企业资质)的微信登录方案

2019-08-27 09:57:16 +08:00
 huanggan

目前微信开放平台个人主体类 APP 不支持开通微信登录,那么个人开发者如何解决微信登录的问题呢?目前有一种替代方案是用微信小程序作为媒介来达到微信登录的目的。

微信小程序的登录无需企业资质,同时登录后返回以下信息

并且微信小程序支持被 APP 打开,执行操作后再返回数据。

所以目前的思路是通过 APP 跳转微信小程序再回传来实现微信登录

实现前提条件

当然没有上线的微信小程序也可以,有小程序 id 即可,但只能进行测试

以安卓 APP 为例,集成微信 SDK 初始化后,设置小程序原始 id 来跳转小程序,可以传递参数给小程序

String appId = "......."; //此处为 AppId
final IWXAPI api = WXAPIFactory.createWXAPI(this, appId);
api.registerApp(appId);
findViewById(R.id.wx_login).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req();
        req.userName = "gh_f1312c106dff"; // 填小程序原始 id
        req.path = "pages/index/index?appLogin=1";  //拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。
        req.miniprogramType = WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_TEST;// 可选打开 开发版,体验版和正式版,
        api.sendReq(req);
    }
});

小程序被调起后会在 onLoad 方法接收到参数,再调用 wx.login 方法获取 js_code,再通过 js_code 拿 open_id

onLoad(options) {
    if (options.appLogin){
        wx.login({
            success: res => {
            // 发送 res.code 到后台换取 openId, sessionKey, unionId
            }
        })
    }
},

再通过 button 的 open-type="getUserInfo"可弹起登录申请获取用户信息,然后再返回 APP 客户端即可

微信相关文档

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/launchApp.html https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Launching_a_Mini_Program/Launching_a_Mini_Program.html

顺便推个公众号,不感兴趣的同学可以跳过

《 IT 独立开发者》帮助程序员拓展产品、运营、设计等思维能力,开发独立产品,致力成为自由职业者,实现财富自由

2334 次点击
所在节点    程序员
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/595436

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX