收藏
回答

同一个手机号,在同一个小程序里,获取出来的openid不一致,而且unionid也不一样

小程序id : wx4b97adaf0e6cc8a1

事情的始末是这样的,

今早,我发现在我的用户表里,居然有多个 同一手机号 的账户,

我的后台逻辑是这样的,如果当前手机号进行登录,我获取用户的openid,到数据库,进行匹配是否有相同的openid,

存在当前openid,就进行登录

不存在当前openid 就自动注册用户.

然后,我发现 同一个手机号,居然出现了 不同的openid

用户手机号是: 18924071446

以下截图是 分别是openid 登录时间 以及 unionid

截止当前时间,我已经取消了 登录用openid来匹配,改成了 手机号匹配.

差不多 有2-4个手机号,出现了这样的问题


前端传递给我 loginCode ,phoneCode

我用 loginCode 获取的 openid


我是用 loginCode, 和appid(后台写死)、SECRET  请求sns/jscode2session 接口 获取了 openid 和unionid   ,然后用 appid 和secret请求cgi-bin/token  获取 accessToken,  然后用 accessToken和前端传递过来的phoneCode  请求wxa/business/getuserphonenumber 接口 来获取手机号。


我获取到openid 和手机号,unionid 。 会一起存入数据库,然后登录的时候我用的openid来匹配。  今天我发现同一个手机号,出现不同openid和uniond,这样的情况,都是 来自于 广东广州的电信手机号


截止 12:23分 ,有热心网友 对我讲解了 问题的根源,我已截图如下,希望对其他遇见同样问题的 同学们 有帮助。





最后一次编辑于  06-08
回答关注问题邀请回答
收藏

6 个回答

  • 风清雾散云开见日出
    风清雾散云开见日出
    06-08

    你手机号码是怎么获取的?用户自己填写的还是用的手机号码组件?

    06-08
    有用 1
    回复 3
    • 斑
      06-08
      你好,我是用 loginCode 和appid‘、SECRET  请求sns/jscode2session 接口 获取了 openid 和unionid   ,然后用 appid 和secret请求cgi-bin/token  获取 accessToken,  然后用 accessToken和前端传递过来的phoneCode  请求wxa/business/getuserphonenumber 接口 来获取手机号。
      06-08
      回复
    • 风清雾散云开见日出
      风清雾散云开见日出
      06-08回复
      看文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html,再自己找多个微信测试下,同一个手机号码可以被多个微信授权获取的,不是和微信号也就是用户的openid一对一绑定的,这个逻辑需要你自己开发判断一个手机号码只能绑定一个openid。否则就会出现你提到的问题,是你后端处理手机号码和openid关系的bug。
      06-08
      1
      回复
    • 斑
      06-08
      好的,谢谢你朋友,你讲的很仔细,我目前已经修改成手机号来判断了,后续 我会加强各种场景的测试,再次谢谢你。
      06-08
      回复
  • 智能回答 智能回答 本次回答由AI生成
    06-08
    有用 1
    • Mr.Zhao
      Mr.Zhao
      06-08
      存在误导,openid可以进行匹配
      06-08
      回复
  • 跨商通
    跨商通
    06-08

    你就按正常情况处理不就行了?

    一个手机号可以有多个openid,这种情况是正常的,你们的逻辑按这个去处理,不就完了?

    06-08
    有用
    回复
  • 哄哄
    哄哄
    06-08

    openid,是和微信相关,和手机号无关,手机号可能在任何的openid上

    06-08
    有用
    回复 6
    • 斑
      06-08
      前端传递给我 loginCode ,phoneCode
      我用 loginCode 获取的 openid
      06-08
      回复
    • 斑
      06-08
      如果和手机号无关,那么系统里所有手机号都会出现这样的问题,但是就 偏偏 只是 广东广州的电信手机号这样
      06-08
      回复
    • 哄哄
      哄哄
      06-08回复
      loginCode 获取openid,openid=微信号,phoneCode获取手机号=手机号,手机号和微信号不是唯一性绑定,需要你自己建立唯一绑定限制
      06-08
      1
      回复
    • 哄哄
      哄哄
      06-08回复
      其他用户 是大多数用户,部分用户的异常行为
      06-08
      回复
    • 斑
      06-08
      我是用loginCode 获取的openid
      06-08
      回复
    查看更多(1)
  • 斑
    06-08

    我之前查过文档,说是 同一个微信用户,同一个小程序下 的 openid 100%一致的

    06-08
    有用
    回复
  • Mr.Zhao
    Mr.Zhao
    06-08

    一个openid绑定一个手机号,第二个openid绑定这个手机号就提示已绑定就行了。你这业务逻辑问题,没想过这个场景吗

    06-08
    有用
    回复 23
    • 斑
      06-08
      我获取到openid 和手机号,unionid 。 会一起存入数据库,然后登录的时候我用的openid来匹配。  今天我发现同一个手机号,出现不同openid和uniond,这样的情况,都是 来自于 广东广州的电信手机号
      06-08
      回复
    • Mr.Zhao
      Mr.Zhao
      06-08回复
      你小程序有撸羊毛的地方吧。 你业务不加限制,可不就出现不通的openid了吗,手机号不是标识同一个微信用户的,上线前侧都不测
      06-08
      回复
    • 斑
      06-08
      我们这个小程序 没有撸羊毛的功能,就是发发帖子,前端传递给我 loginCode ,通过logincode获取到openid,拿openid去匹配数据库用户,
      06-08
      回复
    • Mr.Zhao
      Mr.Zhao
      06-08回复
      那咋了,openid跟手机号,是一对一 一对多,那是你业务问题啊
      06-08
      回复
    • 斑
      06-08回复Mr.Zhao
      同一个手机,用logincode ,同一个appid 去请求jscode2session,获取的openid。 


      谢谢大家,我以后 只用手机号匹配了。
      06-08
      回复
    查看更多(18)
登录 后发表内容