PAYATHON 2026

支付宝统一支付创建订单时能否选择美元等交易币种?

支付小周

结论

支付宝统一支付和支付宝 PC 网站支付的常规境内接口,一般不支持在创建订单时将交易币种指定为美元。以 alipay.trade.page.pay 为例,订单金额通过 total_amount 传入,默认按人民币(CNY)处理。接口没有提供可由商户任意选择 USD 等交易币种的通用参数。

如果业务需要使用美元计价、收款或结算,商户需要申请支付宝跨境支付相关产品,并使用实际签约产品对应的接口。是否支持美元、使用哪种结算币种,应以商户后台的签约信息和支付宝开放平台的接口文档为准。

为什么不能直接指定美元

普通 PC 网站支付接口中的金额字段只表示金额数值,不能同时改变币种。例如:

total_amount=100.00

在常规境内支付产品中,这表示人民币 100.00 元,不是美元 100.00。增加自定义字段也不能改变币种,例如:

currency=USD

如果接口文档没有定义该参数,支付宝不会将订单识别为美元订单。将 USD 写入商品标题、附加参数或业务扩展字段,也只能用于展示或业务备注,实际交易币种不会因此改变。

可行的处理方式

方案一:换算成人民币后创建订单

如果商品以美元报价,但允许用户最终用人民币支付,可以先在商户系统中完成汇率换算,再将换算后的人民币金额传给支付宝。

import java.math.BigDecimal;
import java.math.RoundingMode;

BigDecimal amountUsd = new BigDecimal("100.00");
BigDecimal usdToCnyRate = new BigDecimal("7.2000");

BigDecimal amountCny = amountUsd
        .multiply(usdToCnyRate)
        .setScale(2, RoundingMode.HALF_UP);

System.out.println(amountCny.toPlainString()); // 720.00

然后创建 PC 支付订单:

AlipayTradePagePayModel model = new AlipayTradePagePayModel();
model.setOutTradeNo("ORDER_202609090001");
model.setProductCode("FAST_INSTANT_TRADE_PAY");
model.setSubject("商品订单");
model.setTotalAmount(amountCny.toPlainString());

这样创建的仍是人民币订单。商户应在自己的订单记录中保存美元金额和换算汇率,供页面展示、退款核对和财务审计使用。

方案二:申请跨境支付产品

如果订单必须以美元计价,或者商户需要美元结算,就不能通过修改普通 alipay.trade.page.pay 的参数来实现。通常需要完成以下事项:

  1. 确认商户主体、经营地区和业务场景是否符合跨境产品的要求。
  2. 在支付宝开放平台或通过支付宝商务渠道申请相应产品。
  3. 确认签约产品支持哪些交易币种、支付币种和结算币种。
  4. 按照该产品规定的接口和币种参数创建订单。
  5. 根据接口要求处理汇率、退款、对账及汇兑差异。

不同跨境产品支持的参数和币种范围可能不同。不能把某个跨境接口中的币种字段直接添加到 PC 网站支付接口中使用。

注意事项

  • “商品标价币种”、“用户支付币种”和”商户结算币种”含义不同,需要分别确认。
  • 不要将美元金额直接填入 total_amount 并按美元理解,否则可能导致实际扣款金额错误。
  • 下单前应明确汇率来源、更新时间、有效期和取整规则,并将这些信息保存在订单记录中。
  • 支付金额一般保留两位小数,具体精度以所用接口的字段说明为准。
  • 退款应以支付宝订单的实际交易金额和币种为依据,不能只按最初的美元报价计算。
  • 如果商户已经签约特定跨境产品,应以该产品当前的官方接口文档和后台签约信息为准,不能仅根据接口名称判断其币种能力。

备注:内容仅供参考。