WooCommerce仅后端为自定义支付网关实现无前端影响的币种转换
多币种站点自定义单币种支付网关后端适配方案
场景说明
- 站点已开发本地支付方式自定义插件,开启多币种功能,但该自定义支付网关仅支持AED单币种结算
- 站点当前启用2种结算币种:USD、AED,已上线支付方式包含PayPal、自定义支付网关
- 站点默认结算币种为AED,阿联酋以外地区用户访问时,前端自动切换为USD计价展示
- 适配要求:选中自定义支付网关下单时,所有逻辑仅在后端执行,完全不改动前端币种展示、计价效果,最终仅向自定义支付网关传递AED币种及对应结算金额
核心处理逻辑
逻辑仅在用户选中自定义支付网关发起支付请求时触发,执行规则如下:
if ( $selected_payment_method === 'custom_payment_gateway' ) { if ( get_current_site_currency() === 'AED' ) { // 当前结算币种为AED,直接传递原金额至支付网关 $pay_gateway_amount = $order_total; $pay_gateway_currency = 'AED'; } elseif ( get_current_site_currency() === 'USD' ) { // 当前结算币种为USD,按1:3.67固定汇率换算为AED金额后传递,不改动任何前端/订单原始展示数据 $pay_gateway_amount = $order_total * 3.67; $pay_gateway_currency = 'AED'; } }
实现注意事项
- 所有换算、币种替换逻辑必须放在自定义支付网关内部的支付请求参数组装环节执行,禁止挂载到前端价格渲染、订单原始数据保存相关钩子,避免干扰前端正常展示
- 换算得到的AED金额仅用于和自定义支付网关的接口交互,不得修改订单本身存储的原始币种、原始支付金额,确保用户查看订单时看到的金额、币种和浏览商品时的前端展示完全一致
- 逻辑必须加支付方式前置判断,当用户选择PayPal等其他支付方式时,直接跳过该段逻辑,走原有多币种结算流程即可
内容的提问来源于stack exchange,提问作者Syed Moin Ali
相关产品推荐
相关产品推荐

