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

集成Authorize.net时已启用HTTPS仍报‘HTTPS连接必需’错误

Authorize.net Accept.js 支付集成问题排查请求

目标

使用Accept.js结合自定义支付表单在网站集成信用卡支付功能。

核心问题

  • 网站已部署有效SSL证书并启用HTTPS,但使用测试卡测试交易时,仍收到「需要安全HTTPS连接」的错误。
  • 表单action属性为占位符https://YourServer/PathToExistingPaymentProcessingScript,不清楚应填写内容。

已尝试的排查动作

  • 联系主机服务商更新SSL证书,确认全站HTTPS配置正常
  • 联系Authorize.net支持未获得有效技术帮助
  • 清除浏览器缓存与DNS缓存
  • 分别使用sandbox和正式商户账户测试,问题均存在

当前HTML代码

<!--Accept.js sandbox library used to communicate with the Authorize.net payment gate-->
<script type="text/javascript"
src="https://jstest.authorize.net/v1/Accept.js"
charset="utf-8">
</script>

<!--PAYMENT GATEWAY TESTING-->
<form id="paymentForm"
  method="POST"
  action="https://YourServer/PathToExistingPaymentProcessingScript" >
  <input type="text" name="cardNumber" id="cardNumber" placeholder="cardNumber"/> <br><br>
  <input type="text" name="expMonth" id="expMonth" placeholder="expMonth"/> <br><br>
  <input type="text" name="expYear" id="expYear" placeholder="expYear"/> <br><br>
  <input type="text" name="cardCode" id="cardCode" placeholder="cardCode"/> <br><br>
  <!--<input type="text" name="accountNumber" id="accountNumber" placeholder="accountNumber"/> <br><br>
  <input type="text" name="routingNumber" id="routingNumber" placeholder="routingNumber"/> <br><br>
  <input type="text" name="nameOnAccount" id="nameOnAccount" placeholder="nameOnAccount"/> <br><br>
  <input type="text" name="accountType" id="accountType" placeholder="accountType"/> <br><br>-->
  <input type="hidden" name="dataValue" id="dataValue" />
  <input type="hidden" name="dataDescriptor" id="dataDescriptor" />
  <button type="button" onclick="sendPaymentDataToAnet()">Pay</button>
</form>

<script type="text/javascript">

  function sendPaymentDataToAnet() {
    var authData = {};
      authData.clientKey = "MY_CLIENT_KEY";
      authData.apiLoginID = "MY_LOGIN_ID";

    var cardData = {};
      cardData.cardNumber = document.getElementById("cardNumber").value;
      cardData.month = document.getElementById("expMonth").value;
      cardData.year = document.getElementById("expYear").value;
      cardData.cardCode = document.getElementById("cardCode").value;

    // If using banking information instead of card information,
    // build a bankData object instead of a cardData object.
    //
    // var bankData = {};
    //     bankData.accountNumber = document.getElementById('accountNumber').value;
    //     bankData.routingNumber = document.getElementById('routingNumber').value;
    //     bankData.nameOnAccount = document.getElementById('nameOnAccount').value;
    //     bankData.accountType = document.getElementById('accountType').value;

    var secureData = {};
      secureData.authData = authData;
      secureData.cardData = cardData;
      // If using banking information instead of card information,
      // send the bankData object instead of the cardData object.
      //
      // secureData.bankData = bankData;

    Accept.dispatchData(secureData, responseHandler);
  }

  function responseHandler(response) {
      if (response.messages.resultCode === "Error") {
          var i = 0;
          while (i < response.messages.message.length) {
              console.log(
                  response.messages.message[i].code + ": " +
                  response.messages.message[i].text
              );
              i = i + 1;
          }
      } else {
          paymentFormUpdate(response.opaqueData);
      }
  }
  

  function paymentFormUpdate(opaqueData) {
    document.getElementById("dataDescriptor").value = opaqueData.dataDescriptor;
    document.getElementById("dataValue").value = opaqueData.dataValue;

    // If using your own form to collect the sensitive data from the customer,
   // blank out the fields before submitting them to your server.
    document.getElementById("cardNumber").value = "";
    document.getElementById("expMonth").value = "";
    document.getElementById("expYear").value = "";
    document.getElementById("cardCode").value = "";
    //document.getElementById("accountNumber").value = "";
    //document.getElementById("routingNumber").value = "";
    //document.getElementById("nameOnAccount").value = "";
    //document.getElementById("accountType").value = "";

    document.getElementById("paymentForm").submit();
  }
</script>

错误表现

收到「需要安全HTTPS连接」的提示,对应截图显示DNS相关错误(推测与HTTPS安全保护缺失有关)


排查方向建议

  1. 匹配Accept.js环境:当前使用的是sandbox环境脚本https://jstest.authorize.net/v1/Accept.js,若测试正式账户,必须切换到生产环境脚本https://js.authorize.net/v1/Accept.js,环境不匹配会触发安全校验错误。
  2. 配置表单action地址:该占位符需替换为你服务器上的后端处理脚本地址。Accept.js仅负责将信用卡信息转换为加密的dataValue和dataDescriptor,表单提交后需后端脚本调用Authorize.net的API(如createTransaction)完成实际扣款。若暂未开发后端脚本,可临时注释表单提交逻辑,避免因地址无效导致的跳转错误被误判为HTTPS问题。
  3. 校验HTTPS完整性:
    • 用浏览器开发者工具(F12)的「安全」标签页,检查页面是否存在混合内容(HTTP资源),或证书是否有警告——即使全站HTTPS,只要存在HTTP资源,浏览器会标记页面不安全,Accept.js会拒绝执行。
    • 检查服务器HTTPS配置,确认证书链完整、是否开启HSTS。
  4. 检查Accept.js调用逻辑:
    • 确认authData中的clientKey和apiLoginID与当前环境(sandbox/生产)完全匹配,禁止混用不同环境的密钥与脚本。
    • 在responseHandler中打印完整response对象,查看具体错误代码(如E00003),对应Authorize.net错误码文档排查更精准原因。
  5. 排除浏览器限制:
    • 关闭广告拦截、隐私保护插件,这类工具可能干扰Accept.js的加密通信。
    • 用不同浏览器测试,排除单一浏览器的兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:25:16