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

Link to this callback

fetch_access_token(appid, args)

View Source
@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.

Link to this callback

fetch_ticket(appid, type, args)

View Source
@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).

Link to this callback

refresh_access_token(appid, access_token, args)

View Source
@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.