香港公司网站接入支付宝大陆及香港支付如何选择商户号
明确结论
香港公司通常不能只凭香港主体申请面向中国大陆境内商户的支付宝商户号。更合适的做法是申请支付宝或跨境收单服务商为香港商户提供的跨境支付产品,并在签约时开通:
- 面向中国大陆用户的支付宝(Alipay)
- 面向香港用户的支付宝香港(AlipayHK)
是否需要两个商户号,要看收单机构采用哪种产品架构:
- 如果服务商允许一个跨境商户账户同时接入 Alipay 和 AlipayHK,只需签约一个商户账户。不过,后台仍可能为两种支付方式分别分配
product_code、渠道编号或子商户号。 - 如果 Alipay 和 AlipayHK 使用不同的合同、结算账户或收单渠道,就需要分别申请或开通。一个普通商户号不会自动覆盖另一个钱包。
- 只有具备中国大陆公司主体,以及相应的经营和备案等资质时,才适合考虑申请大陆境内的支付宝商户产品。
所以,这并不是简单地在”大陆版”和”香港版”之间二选一。应先明确签约主体、付款钱包、结算币种和收单机构,再确认两个渠道能否通过同一套接口接入。
为什么一个商户号不一定通用
Alipay 和 AlipayHK 是两个不同的钱包和支付渠道。虽然用户看到的界面都与支付宝品牌有关,但两者的商户准入、交易路由、币种、结算及退款规则可能不同。
以下事项需要分别确认:
| 项目 | Alipay | AlipayHK |
|---|---|---|
| 主要付款用户 | 中国大陆支付宝用户 | 香港支付宝用户 |
| 商户签约 | 取决于跨境收单产品 | 取决于香港本地或跨境收单产品 |
| 常见交易币种 | 可能以 HKD、CNY 或收单方支持的币种下单 | 通常以香港业务支持的币种为主 |
| 商户结算币种 | 以合同为准 | 以合同为准 |
| 接口参数 | 可能使用独立支付方式代码 | 通常使用不同支付方式代码 |
| 退款与对账 | 按对应渠道处理 | 按对应渠道处理 |
网站是否部署在香港服务器上,一般不会直接决定应申请哪种商户号。真正需要考虑的是香港公司主体、网站经营内容、目标用户、商品交付地区、结算银行账户和合规要求。
推荐的申请方式
方案一:申请支持多钱包的跨境收单产品
对于同时服务大陆和香港用户的香港公司,这种方式通常更容易维护。
联系支付宝跨境业务或其授权支付服务商时,应说明:
- 签约主体是香港公司。
- 网站属于线上交易场景。
- 需要接受 Alipay 和 AlipayHK。
- 希望将款项结算到香港公司的银行账户。
- 预计采用的交易币种和结算币种。
- 需要网页支付、手机浏览器支付、App 支付还是二维码支付。
- 是否需要在同一个商户后台处理退款、对账和结算。
如果产品支持多钱包,技术上通常可以共用一套网关接口,再根据用户选择传入相应的支付方式。但”一套接口”不代表后台一定只有一个商户号,系统仍可能使用不同的渠道级编号。
方案二:分别申请两个支付渠道
如果收单机构不能在同一份合同下提供 Alipay 和 AlipayHK,就要分别开通两个渠道。
此时通常会有两套或部分独立的配置:
Alipay:
merchant_id
client_id
private_key
public_key
webhook_secret
AlipayHK:
merchant_id
client_id
private_key
public_key
webhook_secret
具体字段名称以接入平台的实际文档为准。不要默认两个渠道可以共用密钥、商户号或回调验签配置。
方案三:大陆主体与香港主体分别签约
如果业务同时涉及中国大陆境内经营和香港本地经营,企业也拥有两个地区的合法经营主体,可以考虑分开签约:
- 大陆公司申请大陆境内商户产品;
- 香港公司申请香港本地或跨境收单产品。
这种模式适合需要分开结算、开票或进行独立财务核算的业务,但合同、订单、退款和对账的管理也会更加复杂。
技术实现建议
不要在支付系统的业务代码中写死支付渠道。可以先建立统一的支付订单,再按照用户选择将请求路由到不同钱包。
const paymentChannels = {
ALIPAY_CN: {
merchantId: process.env.ALIPAY_CN_MERCHANT_ID,
paymentMethod: "ALIPAY",
currency: "HKD"
},
ALIPAY_HK: {
merchantId: process.env.ALIPAY_HK_MERCHANT_ID,
paymentMethod: "ALIPAYHK",
currency: "HKD"
}
};
function getPaymentChannel(wallet) {
const channel = paymentChannels[wallet];
if (!channel) {
throw new Error("Unsupported payment wallet");
}
return channel;
}
其中的 ALIPAY 和 ALIPAYHK 只是示意名称。正式开发时,必须使用收单机构接口文档规定的支付方式枚举值。
创建支付订单时,应保存业务订单号、支付渠道和支付平台交易号:
async function createPayment(order, wallet) {
const channel = getPaymentChannel(wallet);
const request = {
merchantId: channel.merchantId,
merchantOrderId: order.orderNo,
paymentMethod: channel.paymentMethod,
paymentAmount: {
currency: channel.currency,
value: order.amount
},
paymentRedirectUrl: order.returnUrl,
paymentNotifyUrl: order.notifyUrl
};
return paymentGateway.createPayment(request);
}
这里的字段结构也是通用示例,并非支付宝或某家服务商的正式 API 参数。
回调处理要点
不能只根据浏览器跳转结果判断付款是否成功。支付状态应以后端异步通知和主动查询结果为准。
async function handlePaymentNotify(req, res) {
const channel = resolveChannel(req);
const verified = verifySignature(
req.rawBody,
req.headers,
channel.publicKey
);
if (!verified) {
return res.status(400).send("invalid signature");
}
const event = JSON.parse(req.rawBody);
if (event.paymentStatus === "SUCCESS") {
await markOrderPaidOnce(
event.merchantOrderId,
event.paymentId,
event.paymentAmount
);
}
return res.status(200).send("success");
}
生产环境还需要处理以下事项:
- 验证通知签名;
- 校验商户号、订单号、金额和币种;
- 保证回调幂等,防止重复入账;
- 保存原始通知和渠道交易号;
- 主动查询超时订单;
- 退款时沿用原支付渠道;
- 按渠道生成对账记录。
申请前应向服务商确认的问题
提交材料前,应要求服务商通过合同或正式产品说明确认:
- 香港公司能否直接签约。
- 产品是否同时支持 Alipay 和 AlipayHK。
- 两个钱包是否共用一个商户账户和一套 API 凭证。
- 是否需要分别开通产品权限。
- 支持哪些交易币种和结算币种。
- 是否支持结算到香港银行账户。
- 是否涉及换汇,以及汇率由谁提供。
- 手续费、退款费和拒付规则如何计算。
- 网站、商品或服务是否属于限制行业。
- 是否需要提交公司注册证明、商业登记证、董事及实际受益人资料。
- 对域名、隐私政策、退款政策和服务条款有哪些要求。
- 大陆用户跨境付款是否受到单笔金额、年度额度或商品类别限制。
注意事项
- 服务器位于香港,不代表网站就应使用香港支付渠道。服务器所在地通常不是选择商户产品的主要条件。
- 不要用个人支付宝账户代替企业收款方案,否则可能遇到额度、对账、税务和风控问题。
- “支持中国大陆用户付款”不代表资金会直接以人民币结算到香港账户。交易币种、换汇方式和结算币种都应以合同为准。
- 销售实物商品时,还要确认物流、海关和商品类目要求。销售数字内容或线上服务时,适用的准入规则可能不同。
- 支付产品名称、渠道代码和开户条件可能发生调整,最终以收单机构的实际审核结果、合同和最新接口文档为准。
对于大多数只有香港公司主体的网站,可以优先咨询能同时提供 Alipay 和 AlipayHK 的香港跨境收单方案。如果服务商确认支持在单一商户账户下接入多个钱包,就不必为两个地区维护完全独立的支付系统。如果合同或商户后台要求分别开户,则必须按两个渠道配置,不能默认一个普通商户号可以覆盖两地用户。
备注:内容仅供参考。
