微信小程序接入登录获得用户 OpenID 和公众号不一样,查资料后发现需要 UnionID,但我们公众号网页登录没有用 snsapi scope,拿不到 UnionID,导致很多用户重复注册,有解吗?被用户投诉了好几次几万元余额没了

129 天前
 drymonfidelia
原本这个公众号是纯面向批发商的客服公众号,扫码关注就完成绑定,零售和网页是后加的,所以大量存量用户都没有获取 UnionID 的权限。最近新上了一个小程序(网页套壳),领导说必须要小程序这个流量入口。非常多用户重复注册导致登录错误账号,之前的余额没了。提示用户如果已有账号必须先绑定不现实,99% 用户不懂什么意思。
5205 次点击
所在节点    程序员
60 条回复
jstony
129 天前
你可以把你的公众号和小程序都绑定在开放平台上,打通 openid 和 unionid ,你现在就有个三个 id ,一个是公众号 openid ,一个是小程序 openid ,一个是 unionid 。

原来的公众号用户如果通过小程序登录,识别不到公众号账户下的资产是正常的,因为他们没有关联上。

你可以在小程序上嵌入一个 webview ,将公众号登录页面放在里面,通过公众号登录拿到公众号的 openid ,而小程序的 openid 和 unionid 在小程序里获取,这样就把三个 id 串起来了。

说白了也就是小程序的用户登录逻辑是通过 webview 嵌入的公众号页面实现的。后期如果发现用户二次打开的时候已经做过 id 打通,也可以直接做无感登录。
icloudguizhou
129 天前
@drymonfidelia #8 投诉就能退钱吗?之前小程序买东西不发货投诉也不退款,就是诈骗
drymonfidelia
129 天前
@laoertongzhi 官方文档我确实看过了,这个接口有很多用户的 union id 都获取不到,不知道是不是因为 #18 说的用户没有绑定银行卡的原因(感觉这个原因的话不太可能导致这么多用户出问题,已经让客服那边帮忙联系一部分用户核实了)还是#17 说的必须授权 snsapi 的原因(感觉更有可能是这个)
@yiqiao
drymonfidelia
129 天前
@jstony 这个点子我也想到并尝试过了,问题是小程序 webview 嵌入公众号的登录页面没办法弹出 snsapi 那个授权窗口,授权不了 unionid
LeoSpeaker
129 天前
静默登录拿不到 unionid 。
你这个情况可以直接使用小程序嵌入 webview ,使用静默登录,然后通过小程序里面的 webview 的跳转到登录成功页面将登录后的参数发送给小程序作为储存即可。
放弃小程序的登录接口。
RandomJoke
129 天前
@drymonfidelia 理论上这个方法你不用 unionId 也可以,就是拿到公众号的 openId 查询是否有老用户,有就直接登录,没有就用两个 openId 一起注册,相当于两个 openId 做唯一标识。。
Nitsuya
129 天前
小程序已获取到 小程序 OpenId + UnionId.
前提下
小程序里面套个网页做公众号静默授权,
此时就有 公众号 OpenId + UnionId.
在此时 UnionId 肯定是一致的, 公众号 OpenId 就能补全 UnionId 了并关联上小程序 OpenId.
仅限微信, 支付宝不支持小程序做网页授权.

现在你们数据已经乱套了 十分头痛的~
drymonfidelia
129 天前
@Nitsuya 现在确实问题很大,还有很多人又在通过小程序创建的新用户里面充值,导致不能先下线小程序避免进一步混乱,只能暂停小程序注册
drymonfidelia
129 天前
#25 #27 楼的思路我理解了,用静默登录拿到的 openid 和 unionid 绑定好像确实可以,非常感谢
Nitsuya
129 天前
@drymonfidelia #28 你可以先把 小程序创建的用户全部 剔除来... 改完逻辑. 重新授权 的时候, 再把钱加回去... 唯一的办法了~.
bestie
129 天前
1. 首先,公众号那边修改原来的授权回调页面,使用 snsapi_userinfo ,以确保之后从公众号这边进来的都能拿到 unionid
2. 新建一个授权回调页面,使用 snsapi_base 静默授权,这个页面嵌入到小程序里,参照#25 说的,用这个 webview 里返回的 openid ,再加上你从小程序这边获取的 unionid 做绑定,这样小程序这边进来的用户和公众号的通了,当然你还要处理两边数据合并的问题
Nitsuya
129 天前
@drymonfidelia #29 还要提醒一下, 只要 AppId 一样, 不管是 OpenId 还是 UnionId, 前 6 位一定是一样的... 记得授权的时候 校验一下前 6 位. 防止别人骚操作 公众号或开放平台, 导致数据错乱进了数据库 是无法纠正的噩耗!
markgor
129 天前
1 、先去开放平台 注册+认证+绑定对应的小程序和公众号;
2 、小程序的直接获取 unionId 即可。公众号的通过获取用户基本信息接口,传递 openId 过去,换取 unionId 回来。
3 、此时 unionId 均一致了,用户侧做个账户选择就好了
wOuv7i4e7XxsSOR1
129 天前
这是不测试就上线?但凡懂一点微信开发,多看一点文档,都能知道这个问题吧
bestie
129 天前
@markgor 如果授权的时候是 snsapi_base ,是拿不到 unionid 的,2 走不通
markgor
129 天前
@bestie 为什么走不通?获取用户基本信息(UnionID 机制)就是通过提供 openID 换取 unionID 的啊
ixwen
129 天前
小程序注册的时候用 webview 获取公众号的 openid 然后将小程序的 openid 跟公众号的 openid 关联一下
dream7758522
129 天前
你这个用户数据已经全乱了,我觉得只能公众号和小程序绑定同一手机号,打通数据了。
vacuitym
129 天前
要注册一个微信开放平台账号,然后小程序和公众号绑定到同一个开放平台,这样才能拿到统一的 unionId
hlwjia
129 天前
以目前团队对微信生态的了解程度,不管你现在的数据是乱还是没乱,都直接用手机号作为 ID 来关联用户吧

这是最快、最完善的解决方案,不用想什么 union id 了,又得搞权限,又得梳理逻辑。

今晚就能写好,所有没有绑定手机号的用户弹窗绑定手机号,绑定之后关联余额,完事。

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

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

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

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

© 2021 V2EX