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 等路径。
配置步骤
- 在 AlertPay 支付模块中找到负责处理通知的回调函数。
- 确认该函数对应的 Drupal 路径。
- 使用完整的 HTTPS URL,不要只填写相对路径。
- 将这个 URL 填入 AlertPay 的 Alert URL、IPN URL 或通知地址设置。
- 确保该路径允许匿名访问,因为 AlertPay 服务器不会以 Drupal 用户身份登录。
- 在支付平台的测试环境中验证订单状态能否在后台正常更新。
如果网站安装在子目录中,地址必须包含该子目录:
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 支付模块,应以该模块实际注册的回调路由为准。
备注:内容仅供参考。
