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

微信企业号 oauth 缓慢,有啥好的解决方案吗

  •  
  •   BeatenMo · 2015-11-16 21:00:13 +08:00 · 4325 次点击
    这是一个创建于 3293 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在做微信企业号的开发
    但是感觉访问企业号的 oauth 验证很慢
    官方的开发文档推荐采用 cookie 先看看是否过了验证,若有直接用就可以了

    但是实际过程中来说,微信很容易丢 cookie
    所以如果感觉间隔长点几乎每次都要等...

    问:如何能做到秒开
    ( PS :直接点自定义菜单就跳到移动端了的,怎么搞定身份验证的问题)

    个人想的一个方案是利用自定义菜单点击后回复一个连接带个用户临时 token ,靠临时 token 进去绕过 oauth....但是这样多个点击拉去连接的步骤,大家有啥好的办法吗

    20 条回复    2015-12-07 21:47:01 +08:00
    fractal314
        1
    fractal314  
       2015-11-16 21:54:24 +08:00
    设置 cookies 有效期管用吗?
    bufannao
        2
    bufannao  
       2015-11-16 21:56:45 +08:00 via Android
    最后说的方法,没通过微信认证的公众号常用
    如果已经认证过了还是用微信 API 吧,没啥好办法。
    BeatenMo
        3
    BeatenMo  
    OP
       2015-11-16 22:09:09 +08:00
    @fractal314 没用的,微信太容易丢 cookie 了

    @bufannao 过了认证的,问题是企业号的 oauth 接口的开销时间真太大了,大概要等 30s 这样
    oott123
        4
    oott123  
       2015-11-16 23:32:22 +08:00 via Android
    …检查下服务器 dns
    检查下连接微信服务器的代码
    在服务器上 ping 微信 api 服务器

    试着解决速度慢而不是绕过它…
    denghongcai
        5
    denghongcai  
       2015-11-17 00:02:40 +08:00
    30 秒明显是你自己的问题了,先找到你这一侧慢的原因
    qq286735628
        6
    qq286735628  
       2015-11-17 00:10:18 +08:00
    你的微信丢 cookie 是什么场景?我最近测试过,会话型 cookie 有效期几乎是跟随 APP 进程,除非进程被 kill 或者微信账号被登出。
    至于存储型 cookie ,应该更久了,但没去做实际测试。

    我之前还遇到一个 cookie 相关问题是 path 路径,即使默认服务端在 setcookie 的时候不配置 path ,但是你当前 REQ 的如果存在 path ,该 cookie 会被注入在 path 中,导致浏览器\WebView 端无法从根目录读取该 cookie
    cloverstd
        7
    cloverstd  
       2015-11-17 07:55:55 +08:00 via iPhone
    我这里是 1 、 2 秒左右
    微信 cookies 各种坑啊, Android 和 iOS 有效期不一样
    BeatenMo
        8
    BeatenMo  
    OP
       2015-11-17 09:53:30 +08:00
    @oott123
    @denghongcai
    @cloverstd
    不知道你们做的是不是企业号....
    我这里直接构造 https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 连接获取 code
    就是这里开销大...快的 7 、 8 秒、慢的 20 多秒近 30 秒才回调到 REDIRECT_URI 上
    直接 ping api ,延时 20ms ,结合企业号文档上说获取 code 有开销。。。我就认为这是接口问题了。。。。
    cloverstd
        9
    cloverstd  
       2015-11-17 09:57:48 +08:00
    @BeatenMo 囧,我就是做企业号的
    code 不是微信重定向返回给你的吗
    你慢无非就是在
    1 用户在微信那边的网络重定向到腾讯服务器时这个过程耗时
    2 你利用 code 发送 HTTP 请求时耗时
    3 用户访问你的服务器时耗时
    BeatenMo
        10
    BeatenMo  
    OP
       2015-11-17 10:20:48 +08:00
    @cloverstd

    nginx log:
    124.226.54.159 - - [12/Nov/2015:11:43:07 +0800] "GET /web/index.php?r=zeus/index HTTP/1.1" 302 5 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13B143 MicroMessenger/6.2.4 NetType/WIFI Language/zh_CN" -
    124.226.54.159 - - [12/Nov/2015:11:43:28 +0800] "GET /web/index.php?r=zeus/getinfo&code=c95c8bda082c28d682b44b2c8b66f561 HTTP/1.1" 302 5 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13B143 MicroMessenger/6.2.4 NetType/WIFI Language/zh_CN" -
    124.226.54.159 - - [12/Nov/2015:11:43:30 +0800] "GET /web/index.php?r=zeus/main HTTP/1.1" 200 1024 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13B143 MicroMessenger/6.2.4 NetType/WIFI Language/zh_CN" -

    从 log 来看, 2 、 3 可以排除
    zeus/index 内进行 redirect ,所以直接就 302 了,跟 api 拿 code
    回调到 getinfo ,取身份,也就 2 秒,这个还算正常
    关键就是拿 code 很久,而且还是所有人都这样....
    这我就无语了....
    oott123
        11
    oott123  
       2015-11-17 10:33:34 +08:00 via Android
    二三十秒不叫“有开销”,叫“不能用”…我是觉得腾讯没理由把需要二三十秒才返回的东西上线的。
    去 profile 一下你的程序,看看诊断信息,搞清楚是哪里耗时吧。
    BeatenMo
        12
    BeatenMo  
    OP
       2015-11-17 10:37:44 +08:00
    @oott123
    我是真没办法了,确实不是我程序的问题
    哪怕我直接构造 url ,直接用微信访问这个构造的 url ,也是那么久!
    cloverstd
        13
    cloverstd  
       2015-11-17 10:41:33 +08:00
    你的第一条是如何看出直接 redirect 的?
    我严重怀疑是你在 /web/index.php?r=zeus/index 里的某个操作耗时了,最终还是 redirect
    cloverstd
        14
    cloverstd  
       2015-11-17 10:42:43 +08:00
    @BeatenMo 我有时开了 ss 忘了关,访问确实很慢,但是实际情况下, OAuth 授权应该在 2 秒之内,无论移动网络还是 WiFi
    BeatenMo
        15
    BeatenMo  
    OP
       2015-11-17 10:47:29 +08:00
    @cloverstd 这里没有其他操作, zeus/index 代码如下:
    $urlTpl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_base&state=EPMS#wechat_redirect";
    $url = sprintf($urlTpl,"CorpID",urlencode("http://wx.wuwork.com/web/index.phpr=zeus/getinfo"));
    $this->redirect($url);

    就算我甩开这里,直接用构造好的 url 从微信上访问,也是很慢.....
    BeatenMo
        17
    BeatenMo  
    OP
       2015-11-17 10:52:45 +08:00
    @cloverstd 拿个企业号,然后构造好 url ,扔微信号跑跑,就不一样了。。。。 PC 端直接开,我也是秒开啊。。。
    cloverstd
        18
    cloverstd  
       2015-11-17 12:04:04 +08:00
    @BeatenMo 囧,我手上有一个服役中的企业号与服务号,都木有问题
    mostneed
        19
    mostneed  
       2015-12-07 19:01:37 +08:00
    @BeatenMo 请问 lz ,这个问题解决了么?我也遇到同样的问题。
    BeatenMo
        20
    BeatenMo  
    OP
       2015-12-07 21:47:01 +08:00
    @mostneed 没改代码,自行好了......
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2761 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:41 · PVG 19:41 · LAX 03:41 · JFK 06:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.