View Source WeChat (wechat v0.16.0)

WeChat SDK for Elixir

定义 Client 模块

公众号(默认)

defmodule YourApp.WeChatAppCodeName do
  @moduledoc "CodeName"
  use WeChat,
    appid: "wx-appid",
    appsecret: "appsecret"
end

小程序

defmodule YourApp.WeChatAppCodeName do
  @moduledoc "CodeName"
  use WeChat,
    app_type: :mini_program,
    appid: "wx-appid",
    appsecret: "appsecret"
end

第三方应用

defmodule YourApp.WeChatAppCodeName do
  @moduledoc "CodeName"
  use WeChat,
    by_component?: true,
    app_type: :official_account | :mini_program, # 默认为 :official_account
    appid: "wx-appid",
    component_appid: "wx-third-appid", # 第三方 appid
end

定义参数说明

请看 options/0

接口调用

支持两种方式调用:

  • 调用 client 方法:

    YourApp.WeChatAppCodeName.Material.batch_get_material(:image, 2)

  • 原生调用方法

    WeChat.Material.batch_get_material(YourApp.WeChatAppCodeName, :image, 2)

企业微信

详情请看 WeChat.Work

微信支付

详情请看 WeChat.Pay

Summary

Types

client 的应用类型

公众号/小程序 应用id

应用秘钥

是否第三方平台开发

公众号/小程序 应用代码

第三方平台应用id

第三方平台应用秘钥

错误码

错误信息

OpenID 普通用户的标识,对当前公众号唯一

参数

服务器角色

服务器配置里的 token 值,在接收消息时用于校验签名

UnionID 不同应用下的唯一ID

Types

@type app_type() :: :official_account | :mini_program

client 的应用类型

  • :official_account: 公众号
  • :mini_program: 小程序
@type appid() :: String.t()

公众号/小程序 应用id

@type appsecret() :: String.t()

应用秘钥

@type by_component?() :: boolean()

是否第三方平台开发

@type client() :: module()
@type code_name() :: String.t()

公众号/小程序 应用代码

@type component_appid() :: String.t()

第三方平台应用id

@type component_appsecret() :: String.t()

第三方平台应用秘钥

@type env_option() ::
  :runtime_env | {:runtime_env, app()} | :compile_env | {:compile_env, app()}
@type err_code() :: non_neg_integer()

错误码

@type err_msg() :: String.t()

错误信息

@type openid() :: String.t()

OpenID 普通用户的标识,对当前公众号唯一

加密后的微信号,每个用户对每个公众号的 OpenID 是唯一的。对于不同公众号,同一用户的 OpenID 不同

Docs Link

@type openid_list() :: [openid()]
@type options() :: [
  server_role: server_role() | env_option(),
  by_component?: by_component?() | env_option(),
  app_type: app_type() | env_option(),
  storage: WeChat.Storage.Adapter.t() | env_option(),
  appid: appid(),
  appsecret: appsecret() | env_option(),
  component_appid: component_appid(),
  component_appsecret: component_appsecret() | env_option(),
  encoding_aes_key:
    WeChat.ServerMessage.Encryptor.encoding_aes_key() | env_option(),
  token: token() | env_option(),
  requester: module()
]

参数

参数说明

  • appid: 应用ID,必填
  • app_type: 应用类型, 默认值: :official_account
  • code_name: 如不指定,默认为模块名最后一个名称的全小写格式
  • by_component?: 是否第三方平台开发, 默认值: false
  • server_role: 服务器角色, 默认值: :client
  • storage: 存储器, 默认值: WeChat.Storage.File
  • appsecret: 应用秘钥, 仅在 by_component? 设定为 false 时才有效
  • component_appid: 第三方平台应用id, 仅在 by_component? 设定为 true 时才有效
  • component_appsecret: 第三方平台应用秘钥, 仅在 by_component? 设定为 true 时才有效
  • encoding_aes_key: 在编译时会自动将 encoding_aes_key 转换为 aes_key
  • token: Token
  • requester: 请求客户端, 默认值: WeChat.Requester
  • gen_sub_module?: 是否生成子模块,默认值: true
  • sub_modules: 指定生成子模块的列表
@type requester() :: module()
@type response() :: Tesla.Env.result()
@type server_role() :: :client | :hub | :hub_client

服务器角色

:client: 默认,主动刷新 AccessToken :hub: 中控服务器,主动刷新 AccessToken :hub_client: 逻辑服务器,从 hub 获取 AccessToken

@type start_options() :: %{
  optional(:hub_springboard_url) => WeChat.HubClient.hub_springboard_url(),
  optional(:oauth2_callbacks) => WeChat.HubServer.oauth2_callbacks(),
  optional(:refresh_before_expired) =>
    WeChat.Refresher.Default.refresh_before_expired(),
  optional(:refresh_retry_interval) =>
    WeChat.Refresher.Default.refresh_retry_interval(),
  optional(:refresh_options) =>
    WeChat.Refresher.DefaultSettings.refresh_options()
}
@type token() :: String.t()

服务器配置里的 token 值,在接收消息时用于校验签名

@type unionid() :: String.t()

UnionID 不同应用下的唯一ID

同一用户,对同一个微信开放平台下的不同应用,UnionID 是相同的

Docs Link

Functions

Link to this function

add_to_refresher(client, options \\ %{})

View Source
@spec add_to_refresher(client(), WeChat.Refresher.Default.client_setting()) :: :ok

将 client 添加到刷新器

Link to this function

build_client(client, options)

View Source
@spec build_client(client(), options()) :: {:ok, client()}

动态构建 client

@spec get_client(appid() | code_name()) :: nil | client()

通过 appid 或者 code_name 获取 client

Link to this function

get_client_agent(app_flag, agent_flag)

View Source
@spec get_client_agent(appid() | code_name(), WeChat.Work.agent() | String.t()) ::
  nil | {client(), WeChat.Work.Agent.t()}

See WeChat.Storage.Cache.search_client_agent/2.

@spec refresher() :: module()

刷新器

默认为 WeChat.Refresher.Default

@spec shutdown_client(client()) :: :ok

动态关闭 client

Link to this function

start_client(client, options \\ %{})

View Source
@spec start_client(client(), start_options()) :: :ok

动态启动 client