Current section

Files

Jump to
wechat lib wechat.ex
Raw

lib/wechat.ex

defmodule Wechat do
@moduledoc """
Assemble config and provide access to access_token.
"""
def config do
default_config
|> Keyword.merge(Application.get_env(:wechat, Wechat, []))
end
defp default_config do
[token_file: "/tmp/access_token"]
end
def access_token do
token_info = read_token_from_file
token_info =
case access_token_expired?(token_info) do
true -> refresh_access_token
false -> token_info
end
token_info.access_token
end
defp read_token_from_file do
case File.read(config[:token_file]) do
{:ok, binary} -> Poison.decode!(binary, keys: :atoms)
{:error, _reason} -> refresh_access_token
end
end
defp refresh_access_token do
now = DateTime.to_unix(DateTime.utc_now)
token_info = Map.merge(Wechat.AccessToken.token, %{refreshed_at: now})
File.write(config[:token_file], Poison.encode!(token_info))
token_info
end
defp access_token_expired?(token_info) do
now = DateTime.utc_now |> DateTime.to_unix
now >= (token_info.refreshed_at + token_info.expires_in)
end
end