View Source WeChat.Storage.Client behaviour (elixir_wechat v0.4.6)
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
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
end
Use MyAppStorageClient
Global configure MyAppStorageClient
defmodule Client do
use WeChat,
adapter_storage: {MyAppStorageClient, args}
end
defmodule Client do
use WeChat,
adapter_storage: MyAppStorageClient
end
Dynamically 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.
Link to this section 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.
Link to this section 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__: term(), 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__: term(), errcode: term(), http_status: term(), message: term(), reason: term() }}
Refresh access_token of WeChat common application.