手机网站支付宝支付能力签约时只能填写一个域名吗?
支付阿杰
结论
签约页面中的”网站域名”通常只能填写一个主域名,不能在同一个输入框中用逗号、空格或分号拼接多个域名。
如果业务涉及多个域名,可以使用实际承载支付入口的主域名完成签约,再将其他域名的支付请求统一转到这个主域名。支付宝开放平台后台如果提供”应用网址”、“授权回调地址”或其他域名配置入口,应根据实际业务分别填写。可配置的域名数量和审核规则,以当前控制台提示为准。
推荐配置方式
假设业务使用以下域名:
m.example.com
shop.example.com
campaign.example.net
可以将:
pay.example.com
统一设为支付入口域名。各业务站点先在服务端创建内部订单,然后跳转到:
https://pay.example.com/alipay/create?order_id=202609130001
支付宝接口由该域名下的服务端调用,并生成支付页面。
统一支付入口后:
- 签约资料中的域名与实际支付入口保持一致;
- 支付参数、证书和签名逻辑可以集中管理;
- 无需在多个站点重复保存应用私钥;
return_url、notify_url和订单状态校验更容易统一控制。
支付请求示例
以下示例只展示关键参数。实际使用的参数名称、签名方式和 SDK 调用方法,应以当前接入的支付宝开放平台文档和 SDK 版本为准。
<?php
$orderId = $_GET['order_id'] ?? '';
if (!preg_match('/^[A-Za-z0-9_-]{1,64}$/', $orderId)) {
http_response_code(400);
exit('Invalid order_id');
}
// 必须从数据库读取订单,不要直接信任浏览器传入的金额。
$order = findOrderById($orderId);
if (!$order || $order['status'] !== 'UNPAID') {
http_response_code(400);
exit('Invalid order');
}
$requestData = [
'out_trade_no' => $order['order_no'],
'total_amount' => number_format($order['amount'], 2, '.', ''),
'subject' => $order['subject'],
'product_code' => 'QUICK_WAP_WAY',
];
// 使用官方 SDK 调用 alipay.trade.wap.pay。
// return_url 用于用户支付完成后的页面跳转。
// notify_url 用于支付宝服务端异步通知。
$returnUrl = 'https://pay.example.com/alipay/return';
$notifyUrl = 'https://pay.example.com/alipay/notify';
如果用户完成支付后需要返回各自的业务域名,不要直接接受任意 return_url,否则可能产生开放重定向漏洞。可以预先保存受控的业务来源标识:
$allowedScenes = [
'mobile' => 'https://m.example.com/order/result',
'shop' => 'https://shop.example.com/order/result',
'campaign' => 'https://campaign.example.net/payment/result',
];
$scene = $order['scene'];
$targetUrl = $allowedScenes[$scene] ?? $allowedScenes['mobile'];
header('Location: ' . $targetUrl . '?order_id=' . rawurlencode($order['order_no']));
exit;
多个域名必须直接发起支付时
如果无法使用统一的支付入口,可以按以下顺序处理:
- 查看支付宝开放平台中对应应用的产品签约和应用配置页面,确认是否有新增网站地址或域名的入口。
- 确认这些域名是否属于同一应用、同一签约主体和同一业务。
- 如果控制台只允许登记一个域名,不要在输入框中拼接多个域名。
- 联系支付宝开放平台客服,确认能否补充报备域名,或者不同业务是否需要创建独立应用并分别签约。
- 在配置方式得到明确确认之前,优先使用统一支付域名。
是否要为每个域名单独创建应用,取决于当前产品规则、应用主体和业务是否相互独立,不能只根据域名数量判断。
注意事项
notify_url是服务端异步通知地址,需要保持公网可访问,并正确验证支付宝签名。return_url只用于浏览器跳转,不能作为确认支付成功的唯一依据。- 支付金额、商户订单号和订单状态必须从服务端可信数据源中读取。
- 不要把支付宝应用私钥放入前端 JavaScript、H5 页面或 URL 参数。
- 域名迁移、主体变化或业务用途明显改变后,应及时检查签约信息和应用配置是否需要更新。
- 使用子域名、跨一级域名或临时活动域名时,不要默认它们会自动继承已填写主域名的资格。具体要求应以控制台实际配置和支付宝审核规则为准。
备注:内容仅供参考。
