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

ASP.NET集成Paytm JS Checkout火狐浏览器无法打开支付弹窗问题咨询

问题根因
  • 核心原因:Paytm SDK引入标签的type属性配置错误。当前代码中使用的type="application/html"是HTML资源的MIME类型,火狐严格遵循W3C规范,不会将该标签识别为JavaScript资源执行,导致Paytm SDK未正常加载,window.Paytm.CheckoutJS对象的init方法自然不存在。Chrome对这类配置错误有自动兼容逻辑,所以可以正常运行。
  • 次要触发原因:部分版本火狐的增强型跟踪保护会拦截Paytm这类跨域第三方支付脚本,或是SDK加载完成后内部对象初始化存在时序差,onload事件触发时init方法还未挂载完成。
解决方案
  1. 修复script标签的type属性
    把Paytm SDK引入标签的type属性改为text/javascript,或者直接删除该属性即可,HTML5默认script标签类型为JavaScript,无需额外声明。
  2. 增加SDK初始化兜底检测逻辑
    在原有判断基础上增加轮询重试机制,避免SDK内部初始化时序差导致的方法缺失问题。
  3. 排查浏览器拦截配置
    如果修改后仍有问题,点击火狐地址栏左侧的屏蔽图标,关闭对Paytm域名的跟踪拦截即可。
修改后可兼容火狐的完整代码
<div id="paytm-checkoutjs"></div>
<!-- 移除错误的type属性,或显式设置为type="text/javascript" -->
<script crossorigin="anonymous" src="https://securegw-stage.paytm.in/merchantpgpui/checkoutjs/merchants/demoKey.js" onload="onScriptLoad();"> </script>

<script>
  function initPaytmCheckout() {
      var config = {
        "root": "",
        "flow": "DEFAULT",
        "data": {
          "orderId": "", /* 填入实际订单ID */
          "token": "", /* 填入实际交易token */
          "tokenType": "TXN_TOKEN",
          "amount": "" /* 填入实际订单金额 */
        },
        "handler": {
          "notifyMerchant": function(eventName,data){
            console.log("notifyMerchant handler function called");
            console.log("eventName => ",eventName);
            console.log("data => ",data);
          } 
        }
      };

      // 新增init方法存在性判断,避免调用时报错
      if(window.Paytm && window.Paytm.CheckoutJS && typeof window.Paytm.CheckoutJS.init === 'function'){
          window.Paytm.CheckoutJS.onLoad(function excecuteAfterCompleteLoad() {
              window.Paytm.CheckoutJS.init(config).then(function onSuccess() {
                  window.Paytm.CheckoutJS.invoke();
              }).catch(function onError(error){
                  console.log("error => ",error);
              });
          });
          return true;
      }
      return false;
  }

  function onScriptLoad(){
    // 先尝试直接初始化
    if (initPaytmCheckout()) return;
    // 初始化失败则轮询重试,最多重试10次,每次间隔200ms
    let retryCount = 0;
    const retryTimer = setInterval(() => {
      retryCount++;
      if (initPaytmCheckout() || retryCount >= 10) {
        clearInterval(retryTimer);
        if (retryCount >= 10) console.error("Paytm SDK加载超时,请检查网络或浏览器拦截配置");
      }
    }, 200);
  }
</script>

内容的提问来源于stack exchange,提问作者Arvind Baweja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:57:03