View Source Alipay.Plug.EventHandler (alipay v0.2.1)
异步通知处理器
- 在进行异步通知交互时,如果支付宝收到的应答不是
success
,支付宝会认为通知失败,会通过一定的策略定期重新发起通知。 重试逻辑为:当未收到success
时立即尝试重发 3 次通知,若 3 次仍不成功,则后续通知的间隔频率为:4m、10m、10m、1h、2h、6h、15h。 - 商家设置的异步地址(
notify_url
)需保证无任何字符,如空格、HTML 标签,且不能重定向。 (如果重定向,支付宝会收不到success
字符,会被支付宝服务器判定为该页面程序运行出现异常,而重发处理结果通知) - 支付宝针对同一条异步通知重试时,异步通知参数中的
notify_id
是不变的。
Usage
将下面的代码加到 router
里面:
单一应用的情况:
forward "/ali/event", Alipay.Plug.EventHandler,
client: YourApp.AppCodeName, event_handler: &YourModule.handle_event/2
多个应用的情况:
请将入口路径设置为如下格式:
/*xxx/:app
scope "/ali/event/:app" do post "/", Alipay.Plug.EventHandler, client: &YourModule.get_client_by_app/1, event_handler: &YourModule.handle_event/2 end
before phoenix 1.17:
scope "/ali/event/:app" do forward "/", Alipay.Plug.EventHandler, client: &YourModule.get_client_by_app/1, event_handler: &YourModule.handle_event/2 end
Options
Summary
Types
@type event_handler() :: (Plug.Conn.t(), Alipay.client() -> event_handler_return())
事件处理回调函数
@type event_handler_return() :: {:reply, reply_msg :: EventHelper.json_string()} | :ok | :ignore | :retry | :error | {:error, any()} | Plug.Conn.t()
事件处理回调返回值
返回值说明:
:ok
: 成功:ignore
: 成功:retry
: 选择重试,支付宝服务器会重试三次:error
: 返回错误,支付宝服务器会重试三次{:error, any}
: 返回错误,支付宝服务器会重试三次
@type get_client_fun() :: (app :: String.t() -> Alipay.client() | nil)
通过 app 获取 client 函数