weixin-java-pay/OVERSEAS_PAY.md
本次更新添加了境外微信支付的支持,解决了 Issue #3618 中提到的问题。
境外微信支付需要使用新的API接口地址和额外的参数:
https://apihk.mch.weixin.qq.comtrade_type 和 merchant_category_code/global/v3/transactions/*新的枚举类,定义了境外支付的交易类型和对应的API端点:
APP: /global/v3/transactions/appJSAPI: /global/v3/transactions/jsapiNATIVE: /global/v3/transactions/nativeH5: /global/v3/transactions/h5扩展的请求类,包含境外支付必需的额外字段:
trade_type: 交易类型 (JSAPI, APP, NATIVE, H5)merchant_category_code: 商户类目代码(境外商户必填)createOrderV3Global(): 创建境外支付订单unifiedOrderV3Global(): 境外统一下单接口// 创建境外支付请求
WxPayUnifiedOrderV3GlobalRequest request = new WxPayUnifiedOrderV3GlobalRequest();
request.setOutTradeNo(RandomUtils.getRandomStr());
request.setDescription("境外商品购买");
request.setNotifyUrl("https://your-domain.com/notify");
// 设置金额
WxPayUnifiedOrderV3GlobalRequest.Amount amount = new WxPayUnifiedOrderV3GlobalRequest.Amount();
amount.setCurrency(WxPayConstants.CurrencyType.CNY);
amount.setTotal(100); // 1元,单位为分
request.setAmount(amount);
// 设置支付者
WxPayUnifiedOrderV3GlobalRequest.Payer payer = new WxPayUnifiedOrderV3GlobalRequest.Payer();
payer.setOpenid("用户的openid");
request.setPayer(payer);
// 设置境外支付必需的参数
request.setTradeType("JSAPI");
request.setMerchantCategoryCode("5812"); // 商户类目代码
// 调用境外支付接口
WxPayUnifiedOrderV3Result.JsapiResult result = payService.createOrderV3Global(
GlobalTradeTypeEnum.JSAPI,
request
);
WxPayUnifiedOrderV3GlobalRequest request = new WxPayUnifiedOrderV3GlobalRequest();
// ... 设置基础信息 ...
request.setTradeType("APP");
request.setMerchantCategoryCode("5812");
request.setPayer(new WxPayUnifiedOrderV3GlobalRequest.Payer()); // APP支付不需要openid
WxPayUnifiedOrderV3Result.AppResult result = payService.createOrderV3Global(
GlobalTradeTypeEnum.APP,
request
);
WxPayUnifiedOrderV3GlobalRequest request = new WxPayUnifiedOrderV3GlobalRequest();
// ... 设置基础信息 ...
request.setTradeType("NATIVE");
request.setMerchantCategoryCode("5812");
request.setPayer(new WxPayUnifiedOrderV3GlobalRequest.Payer());
String codeUrl = payService.createOrderV3Global(
GlobalTradeTypeEnum.NATIVE,
request
);
境外支付使用相同的 WxPayConfig 配置,无需特殊设置:
WxPayConfig config = new WxPayConfig();
config.setAppId("你的AppId");
config.setMchId("你的境外商户号");
config.setMchKey("你的商户密钥");
config.setNotifyUrl("https://your-domain.com/notify");
// V3相关配置
config.setPrivateKeyPath("你的私钥文件路径");
config.setCertSerialNo("你的商户证书序列号");
config.setApiV3Key("你的APIv3密钥");
注意: 境外支付会自动使用 https://apihk.mch.weixin.qq.com 作为基础URL,无需手动设置。