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

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.

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

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__: 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).

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__: true,
       errcode: term(),
       http_status: term(),
       message: term(),
       reason: term()
     }}

Refresh access_token of WeChat common application.