View Source WeChat.Storage.Client behaviour (elixir_wechat_fork v0.5.1)
The storage adapter specification for WeChat common application.
Since we need to temporarily storage some key data(e.g. access_token) for invoking WeChat APIs, this module
is used for customizing the persistence when use elixir_wechat in a client side of WeChat common application.
Notice: the scenario as a client, we only need to implement the minimum functions to automatically append the required parameters from the persistence.
Writing custom storage adapter
Example for WeChat Official Account Platform application
defmodule MyAppStorageClient do
@behaviour WeChat.Storage.Client
@impl true
def fetch_access_token(appid, args) do
access_token = "Get access_token by appid from your persistence..."
{:ok, %WeChat.Token{access_token: access_token}}
end
@impl true
def fetch_ticket(appid, type, args) do
ticket = "Get jsapi-ticket/card-ticket from your persistence..."
{:ok, ticket}
end
@impl true
def refresh_access_token(appid, access_token, args) do
access_token = "Refresh access_token by appid from your persistence..."
{:ok, %WeChat.Token{access_token: access_token}}
end
endUse MyAppStorageClient
Global configure MyAppStorageClient
defmodule Client do
use WeChat,
adapter_storage: {MyAppStorageClient, args}
end
defmodule Client do
use WeChat,
adapter_storage: MyAppStorageClient
endDynamically set MyAppStorageClient when call WeChat.request/2
WeChat.request(:post, url: ..., adapter_storage: {MyAppStorageClient, args}, ...)
WeChat.request(:post, url: ..., adapter_storage: MyAppStorageClient, ...)Notice: The above args will be returned back into each implement of callback function, if not input it, args will be
as an empty list in callback.
Summary
Callbacks
Fetch access_token of WeChat common application.
Fetch ticket of WeChat common application, the option of type parameter is "wx_card" or "jsapi"(refer WeChat Official document).
Refresh access_token of WeChat common application.
Callbacks
@callback fetch_access_token(appid :: String.t(), args :: term()) :: {:ok, %WeChat.Token{ access_token: term(), expires_in: term(), refresh_token: term(), timestamp: term() }}
Fetch access_token of WeChat common application.
@callback fetch_ticket(appid :: String.t(), type :: String.t(), args :: term()) :: {:ok, %WeChat.Ticket{ expires_in: term(), timestamp: term(), type: term(), value: term() }} | {:error, %WeChat.Error{ __exception__: true, errcode: term(), http_status: term(), message: term(), reason: term() }}
Fetch ticket of WeChat common application, the option of type parameter is "wx_card" or "jsapi"(refer WeChat Official document).
@callback refresh_access_token( appid :: String.t(), access_token :: String.t(), args :: term() ) :: {:ok, %WeChat.Token{ access_token: term(), expires_in: term(), refresh_token: term(), timestamp: term() }} | {:error, %WeChat.Error{ __exception__: true, errcode: term(), http_status: term(), message: term(), reason: term() }}
Refresh access_token of WeChat common application.