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

Link to this callback

fetch_access_token(appid, authorizer_appid, args)

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

Link to this callback

fetch_component_access_token(appid, args)

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

Link to this callback

fetch_ticket(appid, authorizer_appid, type, args)

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

Link to this callback

refresh_access_token(appid, authorizer_appid, access_token, args)

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

Link to this callback

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.