公司对公司是否支持支付宝扫码支付?
结论
支付宝可以为企业商户生成收款二维码,但并非所有企业支付宝账户都能直接扫码向另一家公司付款。
公司之间能否通过扫码完成支付,主要取决于以下条件:
- 收款方已签约支付宝当面付等收单产品,并取得相应的接口权限。
- 付款方的支付宝账户支持扫码付款。
- 交易符合支付宝对企业账户、交易场景、额度及风控的要求。
- 双方财务认可支付宝交易记录、电子回单和发票等入账凭证。
如果资金必须直接从企业银行账户支付,或者业务要求形成严格的对公账户资金闭环,通常需要使用企业网银、银行转账或支付宝的企业支付产品,普通收款码一般无法满足要求。
为什么不能简单理解为“企业账户互扫”
扫码支付本质上是一种收单方式。收款企业通过接口生成二维码,付款方扫描后使用支付宝完成交易。即使买卖双方都是公司,这笔交易也不会自动成为传统银行业务中的“对公转账”。
实际使用时,需要分清以下三个概念:
- 企业商户收款:公司以支付宝商户身份,通过当面付接口收款。
- 企业支付宝账户付款:经过企业认证的支付宝账户能否扫码付款,要看该账户实际开通了哪些能力。
- 对公银行转账:资金从一家公司的银行账户直接转入另一家公司的银行账户,通常用于合同结算和财务对账。
因此,收款方是企业时,一般可以使用商户收款码。若付款方也必须以企业主体付款,还要确认企业支付宝账户的支付能力,以及双方的财务合规要求。
实现步骤
1. 确认业务和财务口径
开发前应先确认:
- 付款资金是否必须来自企业银行账户。
- 是否允许使用企业支付宝余额或其绑定的支付渠道。
- 是否需要发票、电子回单或银行流水。
- 退款是否必须按原支付路径退回。
- 单笔金额或每日累计金额是否可能超过额度限制。
- 财务部门是否接受支付宝商户账单作为入账和对账凭证。
如果财务要求付款方名称、收款方名称与银行账户主体严格一致,应优先考虑对公转账方案。
2. 申请支付宝商户能力
收款公司需要完成企业主体认证,并申请适合扫码收款的产品。常见的线下扫码收款方式是调用 alipay.trade.precreate 创建预下单,并获取二维码内容。
接口是否可以调用,以及付款方能否使用企业账户支付,都要以支付宝开放平台中该应用的实际签约和授权结果为准。个人支付宝能够扫码付款,并不代表企业账户也一定支持。
3. 服务端创建订单
服务端生成唯一的商户订单号并调用预下单接口。调用成功后,支付宝会返回 qr_code,前端再将其转换成二维码,供付款方扫描。
下面的示例只包含核心调用方式。应用 ID、私钥、支付宝公钥和 SDK 版本需要按实际项目配置。
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePrecreateRequest;
import com.alipay.api.response.AlipayTradePrecreateResponse;
public class AlipayQrPayExample {
public static void main(String[] args) throws Exception {
String gatewayUrl = "https://openapi.alipay.com/gateway.do";
String appId = "YOUR_APP_ID";
String merchantPrivateKey = "YOUR_MERCHANT_PRIVATE_KEY";
String alipayPublicKey = "YOUR_ALIPAY_PUBLIC_KEY";
AlipayClient alipayClient = new DefaultAlipayClient(
gatewayUrl,
appId,
merchantPrivateKey,
"json",
"UTF-8",
alipayPublicKey,
"RSA2"
);
AlipayTradePrecreateRequest request =
new AlipayTradePrecreateRequest();
request.setNotifyUrl("https://example.com/alipay/notify");
request.setBizContent("""
{
"out_trade_no": "B2B202609090001",
"total_amount": "100.00",
"subject": "企业采购订单"
}
""");
AlipayTradePrecreateResponse response =
alipayClient.execute(request);
if (response.isSuccess()) {
System.out.println("QR code content: " + response.getQrCode());
} else {
System.out.println("sub_code: " + response.getSubCode());
System.out.println("sub_msg: " + response.getSubMsg());
}
}
}
qr_code 是生成二维码所需的内容。不要自行拼接订单金额、商户号等信息来生成支付宝二维码。
4. 接收异步通知并验签
付款完成后,支付宝会向 notify_url 发送异步通知。服务端应先验证签名,再核对以下字段:
app_idout_trade_notrade_notrade_statustotal_amountseller_id
只有在验签通过、订单金额一致、收款主体正确,且交易状态符合业务要求时,才能把订单更新为已支付。支付宝可能重复发送异步通知,因此订单处理必须具备幂等性。
必要时还应调用交易查询接口复核状态。不能只根据前端跳转结果或扫码页面上的提示安排发货。
企业付款方需要重点验证的内容
正式上线前,应使用真实的企业账户检查以下事项:
- 企业账户中是否有扫码付款入口。
- 该账户是否可以向当前签约商户付款。
- 可用的资金渠道是账户余额、绑定银行卡,还是其他渠道。
- 是否有单笔或每日支付限额。
- 付款记录中是否显示企业主体信息。
- 下载的账单或回单是否符合财务入账要求。
- 退款后的资金流向是否符合双方约定。
如果扫码时出现无可用付款方式、账户不支持该交易或交易受限等提示,不要尝试修改二维码或接口参数来绕过限制。这类问题通常与产品权限、账户能力或风控有关,需要由企业账户管理员通过支付宝商家服务渠道核实。
注意事项
扫码收款不等于对公转账
支付宝显示交易成功,只能证明相关支付宝账户之间完成了支付。该交易是否符合合同约定中的“对公付款”,还需双方财务和法务结合付款主体、资金来源、交易凭证及发票要求进行确认。
不要使用个人收款码承接企业业务
公司的经营收入应进入经过企业认证并完成产品签约的商户账户。使用员工或法定代表人的个人收款码收取企业款项,可能带来对账、税务、退款及资金归属方面的风险。
订单信息必须由服务端生成
金额、订单号和收款主体等信息不能由客户端自由传入。二维码应设置合理的有效期,并及时关闭过期订单,以免发生重复支付或错付。
以实际签约能力为准
支付宝的产品权限、企业账户能力、额度和风控策略,可能因主体、行业及业务场景而异。仅凭双方都是企业,无法判断交易一定能够完成。
上线前应先确认收款公司的产品签约状态,再使用付款公司的真实企业账户进行小额联调,同时由双方财务确认相关凭证是否符合入账要求。
备注:内容仅供参考。
