从 Zendesk(javascript) 连接到 Acumatica(IIS)
Posted
技术标签:
【中文标题】从 Zendesk(javascript) 连接到 Acumatica(IIS)【英文标题】:Connect from Zendesk(javascript) to Acumatica(IIS) 【发布时间】:2018-03-03 22:02:05 【问题描述】:我正在尝试使用以下代码从 javascript 连接到 Acumatica:
var xmlhttp = new XMLHttpRequest();
URL = "h ttps://demo.mytestwebsite.com/entity/auth/login/";
xmlhttp.open("POST", URL, false);
xmlhttp.setRequestHeader("Authorization", "Basic " + btoa("Admin:hgfjk"));
xmlhttp.send();
得到错误:
VM2372:7 选项 https://demo.mytestwebsite.com/entity/auth/login/ 405(不允许的方法) 连接@VM2372:7 (匿名)@ VM2374:1 VM2372:7 XMLHttpRequest 无法加载 http://demo.mytestwebsite.com/entity/auth/login/。预检响应具有无效的 HTTP 状态代码 405 连接@VM2372:7 (匿名)@ VM2374:1 VM2372:7 未捕获的 DOMException:无法在“XMLHttpRequest”上执行“发送”:无法加载“http s://demo.mytestwebsite.com/entity/auth/login/”。 连接时 (:7:15) 在:1:1
【问题讨论】:
连接到此端点时,您不应使用基本授权。 I210 课程提供了一些示例。 【参考方案1】:尝试使用用户名、密码、公司、分支机构和语言环境(公司、分支机构和语言环境是可选的)作为请求正文,而不是使用基本身份验证,如下例所示:
URL = "http://10.211.55.3/***/entity/auth/login"; //Your URL
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", URL, false);
xmlhttp.setRequestHeader("Content-Type", "application/json");
var params = " name: '<username>', password: '<password>' ";
xmlhttp.send(params);
【讨论】:
我试过了:connect = function() var xmlhttp = new XMLHttpRequest(); URL = "demo.mytestwebsite.com/entity/auth/login"; xmlhttp.open("POST", URL, false); xmlhttp.setRequestHeader("Content-Type", "application/json"); var params = ' "name":"Admin","password":"lpoio","company":"Demo88","branch":"ZZ"'; xmlhttp.send(参数); 但得到以下错误: XMLHttpRequest 无法加载 demo.mytestwebsite.com/entity/auth/login。对预检请求的响应未通过访问控制检查:“Access-Control-Allow-Origin”标头包含多个值“*,hhhhhh.zendesk.com”,但只允许一个。因此,Origin 'hhhhhhh.zendesk.com' 不允许访问。连接@ VM2468:8(匿名)@ VM2470:1 VM2468:8未捕获的DOMException:无法在“XMLHttpRequest”上执行“发送”:无法加载“mytestwebsite.com/entity/auth/login”。在连接时 (:8:15) 在 :1:1 “Access-Control-Allow-Origin”标头包含多个值的问题之前已在 ***.com/questions/22343384/… 中讨论过【参考方案2】:此问题是由 CORS 引起的,即 Web 浏览器没有从托管 Acumatica 的 IIS 获得必要的响应来满足 CORS。 CORS 是一种提高浏览器安全性的机制。
遇到此问题时,您还可能遇到以下错误:
预检响应包含无效的 HTTP 状态代码 500 对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头从 Acumatica 版本 6.10.0945 开始,这是您配置 IIS 以使其 CORS 与 Acumatica 兼容以满足此类要求的方式。
在 IIS 中添加以下 HTTP 响应标头。
名称: Access-Control-Allow-Origin 值: http://5.5.5.5(将连接到 Acumatica 的站点的 IP 地址或 URL - 例如。https://mycompany.zendesk.com)李> 名称: Access-Control-Allow-Headers 值: Content-Type、缓存控制 名称: Access-Control-Allow-Credentials 值: true从 Internet 信息服务 (IIS) 管理器添加值时,它们也会作为自定义标题出现在 Acumatica 应用程序文件夹中的 web.config 文件中。例如 - C:\Program Files (x86)\Acumatica ERP\MainAcumatica\web.config
我在将条目直接添加到 web.config 时遇到了问题,因此建议通过 IIS 完成。
其次,需要在与 web.config 位于同一目录的 Global.asax 文件中创建一个条目
这是完整的文件,其中插入的函数是 Application_BeginRequest():
<%@ Application Language="C#" Inherits="PX.Web.PXApplication" %>
<script RunAt="server">
protected override void MergeAdditionalAssemblyResources()
PX.Web.UI.AssemblyResourceProvider.MergeAssemblyResourcesIntoWebsite<PX.Web.Controls.PXResPanelEditor>();
protected override void Initialization_ProcessApplication()
Initialization.ProcessApplication();
protected void Application_BeginRequest()
if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
Response.Flush();
</script>
此文件中的函数 Application_BeginRequest() 正在刷新应用程序为 CORS OPTIONS 请求生成的响应,并让 IIS 使用其标头配置来处理它。
OPTIONS 请求由 Web 浏览器中的 CORS 机制发出,称为“预检”,以确认请求的目标服务器符合 CORS。
这些设置将解决报告的问题。
【讨论】:
以上是关于从 Zendesk(javascript) 连接到 Acumatica(IIS)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用自签名证书从 Javascript 连接到 SSL 服务器?
我可以从浏览器中运行的 JavaScript 直接连接到 Redis 服务器吗?