V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
alex321
V2EX  ›  问与答

我突然想问问微信 openId 的合法性验证问题。。

  •  
  •   alex321 · 2015-02-05 14:03:22 +08:00 · 15614 次点击
    这是一个创建于 3607 天前的主题,其中的信息可能已经有所发展或是发生改变。
    RT,我们遇到一个不能通过程序直接处理的问题,想请教一下微信生成的 openId 合法性如何验证。
    现在看到的是一堆疑似 base64 过的字符串,我想问的是这串字符串是否有长度、组合方面的验证规则,或者说,经过认证的公众号可否通过相关的 api 查询关注的或者否非关注的公众号。
    网页授权上是可以通过网页授权的 access_token 和 openId 来验证,然而这块是需要用户进行授权处理的。
    很是纠结。
    13 条回复    2015-10-08 22:43:21 +08:00
    iyaozhen
        1
    iyaozhen  
       2015-02-05 14:12:12 +08:00
    没看懂什么意思
    “经过认证的公众号可否通过相关的 api 查询关注的或者否非关注的公众号。” ???
    lbp0200
        2
    lbp0200  
       2015-02-05 14:14:31 +08:00
    拿着openid去获取用户基本信息,没有错误的话就是关注的,否则是没关注的
    alex321
        3
    alex321  
    OP
       2015-02-05 14:18:26 +08:00
    @iyaozhen 我表述有误,应该是关注的或者非关注的当前公众号的用户。
    @lbp0200 感谢。我现在要判断的不是关注和不关注状态,而是当前用户是否是对应公众号的合法用户。。
    iyaozhen
        4
    iyaozhen  
       2015-02-05 19:56:31 +08:00
    @alex321 如果你是要为是粉丝的用户提供一些服务的话,那就把openId存表呗。
    hiro0729
        5
    hiro0729  
       2015-02-05 20:27:37 +08:00
    当微信用户关注你时,微信服务器会推送个关注消息给你,此时消息中带的openid肯定是合法的,把这个保存到数据库中。

    然后如果要判断的话,就把要判断的openid到数据库查一下,存在记录就是合法的关注用户啦。
    alex321
        6
    alex321  
    OP
       2015-02-05 20:32:50 +08:00
    @hiro0729
    @iyaozhen
    会存在这么样的情况,公众号的粉丝 a 在朋友圈中分享了超链接内容,a 的好友不是公众号的粉丝 b 通过超链接点击进来了,这个时候除非超链接是包含网页授权的动态页面,否则是无法获取到当前的用户 openId 的。我的主要问题是如何判断此时的用户 openId,这块的问题我已经解决了。
    hiro0729
        7
    hiro0729  
       2015-02-05 21:00:32 +08:00
    @alex321
    这个需求只能通过js接口在分享的时候把当前url转换成网页授权的url再分享出去。
    原链接直接跳转是肯定获取不到他人的openid的。
    hiro0729
        8
    hiro0729  
       2015-02-05 21:06:00 +08:00
    补充一下:
    snsapi_base为scope的网页授权,为静默授权,用户无感知。

    这样就不需要用户进行手动授权,用户感官上是直接跳转。所有用静默授权最容易实现。
    alex321
        9
    alex321  
    OP
       2015-02-05 22:46:36 +08:00
    @hiro0729 是的,我们已经通过微信的网页授权动态页面和 js sdk 联合解决了此问题。
    dingyaguang117
        10
    dingyaguang117  
       2015-02-06 10:51:30 +08:00
    所有的openid 都是微信服务器告诉你的(不存在假的问题), 你再存到数据库,以后每次用户那边传来你去库里查询一下不就完了
    dingyaguang117
        11
    dingyaguang117  
       2015-02-06 10:52:44 +08:00
    @alex321 为啥还需要jssdk呢 如@hiro0729 说的直接snsapi_base就能拿到openid了
    alex321
        12
    alex321  
    OP
       2015-02-06 13:26:37 +08:00
    @dingyaguang117 这一次的应用场景不同嘛。
    关于网页授权获取 openId 的问题,我的程序在 2013 年底已经实现了,这块的问题我也没必要在这里提问的啦。
    kslr
        13
    kslr  
       2015-10-08 22:43:21 +08:00
    我加密了 OpenID 每次都解密一下,如果解密失败就表示被篡改了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2609 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:11 · PVG 19:11 · LAX 03:11 · JFK 06:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.