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

事件处理回调函数

事件处理回调返回值

通过 app 获取 client 函数

Types

@type event_handler() :: (Plug.Conn.t(), Alipay.client() -> event_handler_return())

事件处理回调函数

Link to this type

event_handler_return()

View Source
@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 函数