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

