wechat icon indicating copy to clipboard operation
wechat copied to clipboard

use Wechat 中client()的access_token一直为nil,导致每次请求微信api会重新申请access_token

Open taverngoal opened this issue 5 years ago • 1 comments

版本: 0.4.8

config.exs:

config :wechat,
  adapter_opts: {Wechat.Adapters.Sandbox, []},
  httpoison_opts: [recv_timeout: 300_000]

demo:

defmodule MyApp.Wechat do
  use Wechat, otp_app: :my_app

  def users do
    client() |> Wechat.User.get()
  end
end

若使用 MyApp.Wechat.client()会输出:

%Wechat.Client{
  access_token: nil,
  appid: "wx00000000000",
  encoding_aes_key: nil,
  endpoint: "http://************",
  secret: "***********************",
  token: nil
}

access_token一直为nil

每次请求微信的api, MyApp.Wechat.access_token 每次都不同,会消耗完access_token的限制次数。


看过源码后,加入了Map.put(:access_token, access_token())就能解决access_token每次都需要重新获取的问题。

实现:

defmodule BeautyMotherland.Wechat do
  use Wechat, otp_app: :beauty_motherland

  def users do
    client()
    |> Map.put(:access_token, access_token())
    |> Wechat.User.get()
  end

  def sign_jsapi(url) do
    client()
    |> Map.put(:access_token, access_token())
    |> Wechat.Client.sign_jsapi(url)
  end

  def jssdk(url, js_api_list \\ []) do
    %{timestamp: timestamp, noncestr: nonce, signature: signature} = sign_jsapi(url)

    %{
      jsApiList: js_api_list,
      appId: client().appid,
      timestamp: timestamp,
      nonceStr: nonce,
      signature: signature
    }
  end

  def user_info(openid) do
    client()
    |> Map.put(:access_token, access_token())
    |> Wechat.User.info(openid)
  end
end

taverngoal avatar Jul 01 '20 07:07 taverngoal

多谢反馈,我检查一下

goofansu avatar Jul 05 '20 18:07 goofansu