V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LuoDiNate
V2EX  ›  微信

hi 有微信开发经验的小伙伴看过来

  •  
  •   LuoDiNate · 2015-06-05 00:19:20 +08:00 · 3533 次点击
    这是一个创建于 3494 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有几个问题如下:

    1 和微信服务器请求token

    我看微信api说2小时失效 让自己的中控提前请求新的token 大家测试下来 稳定的请求间隔多少比较合适?
    

    2 微信api

    微信api文档有验证返回结果是否是微信官方服务器的接口
        大家的服务都有进行这个真伪的验证么?
        如果进行验证 各项消耗是否可以接受
    

    3 微信openid

    本来只是理解成微信给用户的uuid
        但是看到api文档怎么说 不同的公众号 可能会有不同的openid?什么节奏
        那这个openid是全局唯一的么?
    

    提前谢过

    9 条回复    2015-06-07 15:03:26 +08:00
    b821025551b
        1
    b821025551b  
       2015-06-05 00:28:59 +08:00 via Android
    1,不是用时间间隔,而是其它请求返回token过期之后重新请求token;
    2,没用过这个,
    3,按道理来说openid是唯一的,即使不唯一,你手里的多个openid撞上的概率有多大?
    LuoDiNate
        2
    LuoDiNate  
    OP
       2015-06-05 00:45:19 +08:00
    @b821025551b 过期之后再次请求 这期间不是所有访问都不行了么?
    我看到微信api文档说 要"提前一些向微信服务器请求新的token 短时间内新老token都可以使用"
    只是这个提前一些 和 短时间内 我因为没做过, 不知道分别都是多久
    master
        3
    master  
       2015-06-05 00:51:33 +08:00
    关于第三个问题的补充
    openid 是 一个用户 对于一个公众号的 唯一ID
    这个的说明意在描述 哪怕是同一个用户 在不同的公众号里面 openid 是不一样的

    当你的业务不涉及多个公众号的时候 这个openid就是唯一的
    当你的业务涉及到多个公众号的时候
    - 你不能用openid来关联来自不同公众号的同一用户
    - 如果你需要记录openid 那么你也应该记录这个openid来自哪个公众号 因为这个openid只有对对应的公众号的token来处理才有意义
    - 以上一条为前提 你存储的唯一索引应该是 (openid, 公众号标示)
    - 如果你的业务是需求是需要识别出来自不同公众号的用户是否是通一个用户 微信对于“开发者账号”提供了另外一个叫做unionid的标示
    bystand3r
        4
    bystand3r  
       2015-06-05 00:53:52 +08:00
    1、自行缓存token,假如有效期是3600秒,那么可以在3000秒的时候去获取新的重新保存;
    2、木有验证,但是开启了加密传输,足够了,难道你服务的api是暴露在外的么?
    3、openid是用户与你公众号之间的唯一凭证,且用户与不同的公众号之间openid是不同的。大部分应用都是通过openid与用户建立的绑定关系,可以想象如果这个openid全局唯一……岂不是你可以伪造用户请求给其他微信公众号了?如果你有多个公众号且想让他们跟你的服务有单一的对应关系,可以使用unionid(注册open.weixin.qq.com后将你的公众号绑定上去就有了)。
    b821025551b
        5
    b821025551b  
       2015-06-05 00:57:54 +08:00 via Android
    @LuoDiNate 请求之后发现token过期,重新请求token,再用新token请求一次,可以理解为一次递归调用。
    iyaozhen
        6
    iyaozhen  
       2015-06-05 01:20:16 +08:00 via Android
    问题一:没必要固定时间去请求,需要再申请。自己内部暴露一个 get_accesstoken 的公共方法即可。每次从微信获取token后不光把值存起来还需存一下过期时间(当前时间+7200s),方法返回 token 值时先比较时间,过期了就重新去微信获取。

    问题二:不知道你说的是不是接入验证。接入完成后我是一直还通过那几个值算出 signstr 来验证。不过这也不够,会被重放攻击。这个其实可以不用。若你使用了密文传输代码里面默认是进行了接入验证(signstr 验证)的那一步。至于性能损耗,不用担心,你的性能瓶颈绝不在这里。

    问题三:openid 对于一个公众号是全局唯一的。一个用户和不同公众号的对应 openid 是不一样的。可以用来当 uid、主键。若你有多个公众号想统一 openid,就需要去微信开放平台申请绑定,具体没弄过,细节不明。

    有不对之处欢迎指正。
    pubby
        7
    pubby  
       2015-06-05 01:25:00 +08:00
    1. token是全局的,微信建议统一维护(包括js-sdk用的ticket,如果要用到的话),记录每次新token的过期时间,我们是快到期前1分钟申请新token(微信会保证在那一小片刻时间内新老token都有效)

    2. 没用过

    3. 在同一个开发者账号下绑定不同的公众号,那样就能用unionid来识别同一个微信账号。
    fontartist
        8
    fontartist  
       2015-06-05 09:43:26 +08:00 via iPhone
    token 我觉得差不多 7000 秒后,要用的时候,就重新取。
    openid 不是全局唯一,是针对一个公众号唯一的。
    mingyun
        9
    mingyun  
       2015-06-07 15:03:26 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2595 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 05:09 · PVG 13:09 · LAX 21:09 · JFK 00:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.