PAYATHON 2026

Drupal/Ubercart 接收支付成功通知的路径是什么?

支付小周

结论

Ubercart 没有供所有第三方支付平台共用的“支付成功通知路径”。具体的通知地址由相应支付网关模块注册和处理。

使用 AlertPay 时,应填写 AlertPay/Ubercart 集成模块提供的回调地址,而不是:

/cart/checkout/complete

这个路径通常只是付款后将顾客带回商店的页面,无法代替服务器之间传递支付结果的通知接口。

如何确定 AlertPay 的通知地址

AlertPay 模块的版本和来源不同,使用的路径也可能不同。因此,在确认模块实现之前,不能直接指定某个固定 URL。可以从以下位置查找模块的路由定义:

  • Drupal 6/7:查看 AlertPay 模块的 hook_menu() 实现。
  • Drupal 8 及以上:查看模块的 *.routing.yml。
  • 检查模块配置页面是否直接显示或自动生成 Alert URL、IPN URL 或 callback URL。

Drupal 6/7 模块中的定义可能类似:

function uc_alertpay_menu() {
  $items['uc_alertpay/ipn'] = array(
    'page callback' => 'uc_alertpay_ipn',
    'access callback' => TRUE,
    'type' => MENU_CALLBACK,
  );

  return $items;
}

如果当前安装的模块确实采用了这一定义,应向 AlertPay 提供:

https://example.com/uc_alertpay/ipn

其中的 uc_alertpay/ipn 只是示例,实际地址必须以当前模块代码注册的路径为准。其他模块也可能使用 alertpay/callback、uc_alertpay/notification 等路径。

配置步骤

  1. 在 AlertPay 支付模块中找到负责处理通知的回调函数。
  2. 确认该函数对应的 Drupal 路径。
  3. 使用完整的 HTTPS URL,不要只填写相对路径。
  4. 将这个 URL 填入 AlertPay 的 Alert URL、IPN URL 或通知地址设置。
  5. 确保该路径允许匿名访问,因为 AlertPay 服务器不会以 Drupal 用户身份登录。
  6. 在支付平台的测试环境中验证订单状态能否在后台正常更新。

如果网站安装在子目录中,地址必须包含该子目录:

https://example.com/shop/uc_alertpay/ipn

如果没有启用简洁 URL,旧版 Drupal 的地址可能需要写成:

https://example.com/?q=uc_alertpay/ipn

返回地址和通知地址不是一回事

这类支付流程通常至少需要两个 URL:

Return URL:
https://example.com/cart/checkout/complete

Notification/IPN URL:
https://example.com/uc_alertpay/ipn

Return URL 负责在付款后将顾客带回网站,不能作为确认支付成功的可靠依据。顾客可能直接关闭浏览器,攻击者也可能手动访问这个页面。

Notification/IPN URL 用于接收 AlertPay 服务器发送的数据。处理程序还需要验证通知签名、安全码、商户账号、金额、币种和交易状态。只有验证通过后,才能将 Ubercart 订单标记为已付款。

因此,Ubercart 本身没有统一的默认通知路径。AlertPay 使用哪个路径,取决于网站安装的 AlertPay 支付模块,应以该模块实际注册的回调路由为准。

备注:内容仅供参考。