You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter集成Tap支付:如何同时传入src_card与src_kw.knet参数

Flutter集成Tap支付:同时支持src_card和src_kw.knet的解决方案

我在Flutter移动端集成Tap支付时遇到问题:根据Tap文档,VISA/万事达卡需传入src_card作为source ID,KNET支付网关需传入src_kw.knet,但当前代码只能传入一个source值:

Map<String, dynamic> getOrderParams() {
    var cartModel = Provider.of<CartModel>(context, listen: false);
    return {
      'amount': cartModel.getTotal(),
      'currency': kAdvanceConfig.defaultCurrency?.currencyDisplay,
      'threeDSecure': true,
      'save_card': false,
      'receipt': {'email': false, 'sms': true},
      'customer': {
        'first_name': cartModel.address?.firstName ?? '',
        'last_name': cartModel.address?.lastName ?? '',
        'email': cartModel.address?.email ?? '',
      },
      'source': {'id':'src_card'},         <--- 这里只能传一个值
      'post': {'url': kRedirectUrl},
      'redirect': {'url': kRedirectUrl}
    };
  }

尝试添加第二个参数时触发错误:

The literal can't be either a map or a set because it contains at least one literal map entry or a spread operator spreading a 'Map', and at least one element which is neither of these.


解决方法

Tap支付的source字段是单值对象,不支持同时传入多个ID。正确的做法是根据用户选择的支付方式,动态传入对应的source ID:

  1. 修改方法,添加参数接收选中的支付来源ID:
Map<String, dynamic> getOrderParams(String selectedSourceId) {
    var cartModel = Provider.of<CartModel>(context, listen: false);
    return {
      'amount': cartModel.getTotal(),
      'currency': kAdvanceConfig.defaultCurrency?.currencyDisplay,
      'threeDSecure': true,
      'save_card': false,
      'receipt': {'email': false, 'sms': true},
      'customer': {
        'first_name': cartModel.address?.firstName ?? '',
        'last_name': cartModel.address?.lastName ?? '',
        'email': cartModel.address?.email ?? '',
      },
      'source': {'id': selectedSourceId}, // 动态赋值
      'post': {'url': kRedirectUrl},
      'redirect': {'url': kRedirectUrl}
    };
  }
  1. 调用方法时,根据用户选择传对应ID:
  • 用户选VISA/万事达:getOrderParams('src_card')
  • 用户选KNET:getOrderParams('src_kw.knet')

如果需要让Tap支付页面展示多种支付选项供用户选择,需确认Tap API是否支持通过其他参数配置可用支付方式(比如payment_methods类的参数),但核心逻辑仍是用户选择后,将对应source ID传入订单参数。


内容的提问来源于stack exchange,提问作者Hassan Yousuf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 13:03:17