lanrion / weixin_authorize

微信 Ruby 高级API weixin_authorize http://github.com/lanrion/weixin_authorize .
MIT License
322 stars 116 forks source link

出现{"errcode":45009,"errmsg":"api freq out of limit"} #79

Closed xyooyy closed 8 years ago

xyooyy commented 8 years ago

现在网站的访问量上去,突然出现一个错误,{"errcode":45009,"errmsg":"api freq out of limit"} 我的相关代码是这样的,作者你能看看那里有问题么,怎么会请求token 超过了最大值,急急、。。。。。

require './app/service/weixin/js_sdk'
def test
 if !$client || !$client.is_valid?
      $client = WeiXin.client()
    end
    sign_package = $client.get_jssign_package(params[:url])
    render :json => {:sign_package => sign_package}
end
 $client = WeixinAuthorize::Client.new(APP_ID, APP_SECRET)
config.rest_client_options = {timeout: 50, open_timeout: 50, verify_ssl: true}
liguangsong commented 8 years ago

相同问题,求解

lanrion commented 8 years ago

token 使用redis缓存:https://github.com/lanrion/weixin_authorize/wiki/config

liguangsong commented 8 years ago

@lanrion 这个是缓存的问题么,这不应该是我设置的timeout 不合适么,不是没有存到redis里会存到object里么

lanrion commented 8 years ago

因为你调用了 is_valid?,这个方法会直接将现有的token过期,不需要每次调用。

liguangsong commented 8 years ago

那我怎么做才能,监测是否过期,没有过期的时候不去重新请求

lanrion commented 8 years ago

is_valid? 这个方法,只是第一次初始化$client时,为了验证是否配置正确,而不是每次调用接口都执行此方法,一般建议在 config/initializers 中初始化 $client 这个变量。

lanrion commented 8 years ago

@liguangsong 你按照wiki配置redis https://github.com/lanrion/weixin_authorize/wiki/config ,token是否过期已经交给了redis的过期机制来处理,你无需关心。

对象缓存token,有不少用户反馈有bug(但我一直重现不了),所以现在不推荐使用。

liguangsong commented 8 years ago

@lanrion 好的,谢谢,对象缓存token,会自动监测是否过期么,我没有用过redis,我怕今天弄不好,产品已上线,需要手动安装一下redis,然后按照这个链接的内容,配置下就好了么?

lanrion commented 8 years ago

@liguangsong 对象缓存token,也是会自动监测。你微信号多少,我添加你,有什么问题,可以及时沟通。

liguangsong commented 8 years ago

@lanrion 微信号:lgszzz

lanrion commented 8 years ago

已添加。