ホームページ  >  に質問  >  本文

php - 批量获取微信用户信息,在循环中多次请求微信url链接,带上的access_token失效

在获取上万条微信信息时,用循环多次请求微信链接带上获取的access_token,但在运行的过程中出现这样的错误{"errcode":40001,"errmsg":"invalid credential, access_token is invalid or not latest"},循环过程中保存数据所用的时间也没有超过access_token的有效时间。代码如下:请问是怎么回事

PHPzPHPz2769日前935

全員に返信(8)返信します

  • ringa_lee

    ringa_lee2017-04-10 15:56:06

    7200秒有效你就应该获取了之后继续使用而不是120秒之后就再次获取,access_token每天获取次数是有限的。

    access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

    返事
    0
  • 怪我咯

    怪我咯2017-04-10 15:56:06

    楼主我能问你一个问题么 关于授权的

    返事
    0
  • 黄舟

    黄舟2017-04-10 15:56:06

    题主你好,我遇到了与你类似的问题,在较短时间内,多次用access_token去调用微信其他接口总是会出现
    {"errcode":40001,"errmsg":"invalid credential, access_token is invalid or not latest hint: [QZ.Jja0059ent1]"}
    我是用定时器每一个小时内获取授权token,然后存到memcached缓存中。理论上讲,这一个小时内这个token一直是有效的,但结果是,每次频繁利用token调用其他的接口时,总会报token失效。
    排除appsecret错误的问题,因为如果appsecret错误,所有调用结果都是失败,而不会只出现在利用token频繁调用其他接口的情况下。
    这个问题那么长时间了,题主应该解决了吧?希望题主赐教。

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-10 15:56:06

    我现在也是遇到类似的问题 ,我设置access_token有效期是3600s ,我也是for循环 , 在for循环里面发送模板消息。,理论上access_token的有效期是7200s , 那么我设置3600s 应该可以的 过期之后我会重新的拉取!!

    返事
    0
  • 高洛峰

    高洛峰2017-04-10 15:56:06

    是啊,不知道为什么。我用了一个定时器没7200s去获取AccessToken,但是每次拿回来的AccessToken,发送支付客服消息,过一会儿就失效了。

    测试的时候,发现即使是立刻刷新拿回来的token会抱42001的错误。不知道为什么,求赐教啊

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 15:56:06

    这个微信开发论坛管理员已经回答过了

    所以可以采取的方案是去带token请求一个另外的没有次数限制的接口,如果token失效,重新生成TOKEN,如果没有失效,继续之前的逻辑

    返事
    0
  • 阿神

    阿神2017-04-10 15:56:06

    除了时间判断和集中存储的问题,更重要的是在使用时判断返回结果响应是否要更新AccessToken,微信服务器群集在处理AccessToken的时候本身就不同步。就以获取微信服务器IP地址为例,当你主动将AccessToken失效后,调用这个接口是一下成一下失败的,并且当你更新AccessToken后马上调用也会出现时好时坏的问题。折腾半天还是用了比较恶心的方式来处理的。

    var userInfo = Invoke((token) => { return UserApi.Info(token, openid); });

    在Invoke函数里进行最多3次重试的循环调用,如果发现失效则立即更新。

    public static T Invoke<T>(Func<string, T> invokeFunc)

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-10 15:56:06

    加上判断,失效时重新获取Access token
    可能有次数限制?

    返事
    0
  • キャンセル返事