View Source WeChat.Plug.EventHandler (wechat v0.16.0)

微信推送消息处理器

接入指南

注意 , 定义 client 时必须设置: encoding_aes_key & token

Usage

将下面的代码加到 router 里面:

  • 单一应用的情况:

    forward "/wx/event", WeChat.Plug.EventHandler,
      client: WxOfficialAccount,
      event_handler: &YourModule.handle_event/3
  • 多个应用的情况:

    请将入口路径设置为如下格式: /*xxx/:app

    scope "/wx/event/:app" do
      get "/", WeChat.Plug.EventHandler, event_handler: &YourModule.handle_event/3
      post "/", WeChat.Plug.EventHandler, event_handler: &YourModule.handle_event/3
    end

    before phoenix 1.17:

    scope "/wx/event/:app" do
      forward "/", WeChat.Plug.EventHandler, event_handler: &YourModule.handle_event/3
    end

Options

Summary

Types

事件处理回调函数

事件处理回调返回值

事件解析函数

Types

@type event_handler() :: (Plug.Conn.t(), WeChat.client(), message :: map() ->
                      event_handler_return())

事件处理回调函数

Link to this type

event_handler_return()

View Source
@type event_handler_return() ::
  {:reply, reply_msg :: WeChat.ServerMessage.EventHelper.xml_string(),
   timestamp()}
  | {:reply, reply_msg :: WeChat.ServerMessage.EventHelper.json_string()}
  | :ok
  | :ignore
  | :retry
  | :error
  | {:error, any()}
  | Plug.Conn.t()

事件处理回调返回值

返回值说明:

  • {:reply, xml_string, timestamp}: 被动回复消息,仅限于公众号/第三方平台
  • {:reply, json_string}: 被动回复消息,仅限小程序推送消息
  • :ok: 成功
  • :ignore: 成功
  • :retry: 选择重试,微信服务器会重试三次
  • :error: 返回错误,微信服务器会重试三次
  • {:error, any}: 返回错误,微信服务器会重试三次
@type event_parser() ::
  :auto
  | :xml
  | :json
  | (params :: map(), body :: String.t() | map(), WeChat.client() ->
       {:ok, WeChat.ServerMessage.EventHelper.data_type(),
        WeChat.ServerMessage.EventHelper.xml()
        | WeChat.ServerMessage.EventHelper.json()}
       | {:error, String.t()})

事件解析函数

Functions

Link to this function

handle_event_request(conn, client, event_parser, event_handler)

View Source
@spec handle_event_request(
  Plug.Conn.t(),
  WeChat.client(),
  event_parser(),
  event_handler()
) ::
  Plug.Conn.t()

接受事件推送

Link to this function

validate_request(conn, token)

View Source
@spec validate_request(Plug.Conn.t(), WeChat.token()) :: Plug.Conn.t()

验证消息的确来自微信服务器