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
@type event_handler() :: (Plug.Conn.t(), WeChat.client(), message :: map() -> event_handler_return())
事件处理回调函数
@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
@spec handle_event_request( Plug.Conn.t(), WeChat.client(), event_parser(), event_handler() ) :: Plug.Conn.t()
接受事件推送
@spec validate_request(Plug.Conn.t(), WeChat.token()) :: Plug.Conn.t()
验证消息的确来自微信服务器