View Source WeChat.Storage.ComponentClient behaviour (elixir_wechat v0.4.6)
The storage adapter specification for WeChat component application.
Since we need to temporarily storage some key data(e.g. access_token
/component_access_token
) for invoking WeChat APIs, this module
is used for customizing the persistence when use elixir_wechat
in a client side of WeChat component
application.
Notice: 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 third-party platform application
defmodule MyComponentAppStorageClient do
@behaviour WeChat.Storage.ComponentClient
@impl true
def fetch_access_token(appid, authorizer_appid, args) do
access_token = "Get authorizer's access_token by appid and authorizer appid from your persistence..."
{:ok, %WeChat.Token{access_token: access_token}}
end
@impl ture
def fetch_component_access_token(appid, args) do
access_token = "Get component access_token by component appid from your persistence..."
{:ok, %WeChat.Token{access_token: access_token}}
end
@impl true
def refresh_access_token(appid, authorizer_appid, access_token, args) do
access_token = "Refresh access_token by appid from your persistence..."
{:ok, %WeChat.Token{access_token: access_token}}
end
@impl true
def refresh_component_access_token(appid, component_access_token, args) do
access_token = "Refresh component access_token by component 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
end
Use MyComponentAppStorageClient
Global configure MyComponentAppStorageClient
defmodule Client do
use WeChat,
adapter_storage: {MyComponentAppStorageClient, args}
end
defmodule Client do
use WeChat,
adapter_storage: MyComponentAppStorageClient
end
Dynamically set MyComponentAppStorageClient
when call WeChat.request/2
WeChat.request(:post, url: ..., adapter_storage: {MyComponentAppStorageClient, args}, ...)
WeChat.request(:post, url: ..., adapter_storage: MyComponentAppStorageClient, ...)
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 authorizer's access_token in WeChat component application.
Fetch access_token of WeChat component application.
Fetch authorizer's ticket of WeChat component application, the option of type
parameter is "wx_card" or "jsapi"(refer WeChat Official document).
Refresh authorizer's access_token in WeChat component application.
Refresh access_token of WeChat component application.
Link to this section Callbacks
@callback fetch_access_token( appid :: String.t(), authorizer_appid :: String.t(), args :: term() ) :: {:ok, %WeChat.Token{ access_token: term(), expires_in: term(), refresh_token: term(), timestamp: term() }}
Fetch authorizer's access_token in WeChat component application.
@callback fetch_component_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 component application.
@callback fetch_ticket( appid :: String.t(), authorizer_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 authorizer's ticket of WeChat component application, the option of type
parameter is "wx_card" or "jsapi"(refer WeChat Official document).
@callback refresh_access_token( appid :: String.t(), authorizer_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 authorizer's access_token in WeChat component application.
refresh_component_access_token(appid, component_access_token, args)
View Source@callback refresh_component_access_token( appid :: String.t(), component_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 component application.