禁止通过 PHP Curl 在 Dynamics 365 AX 上调用方法

我正在尝试通过 PHP curl 通过 WSDL 从动态 SOAP 调用方法。


我的 webapp 和 SOAPUI 都收到此错误。可能是什么问题呢?从具有相同凭据的 .NET 测试程序访问时,它工作正常。刚刚面临 PHP 方面的问题,说禁止使用 1317 代码。指定的帐号不存在


我一直在尝试调用该方法并面临不同的问题,我遇到的最后一个问题是这个问题。我想也许用户代理我改变了它我使用了 SOAPUI。一样。我所知道的是用户已在 Azure AD 中注册,并且应该拥有该应用程序的授权。


POST是


POST /soap/services/servicemethodname?wsdl 

HTTP/1.1 

Host: domainname.sandbox.ax.dynamics.com 

Accept: text/xml 

Accept-Encoding: gzip,deflate 

Connection: Keep-Alive 

Content-type: text/xml 

User-Agent: Apache-HttpClient 

Authorization: Bearer longTokenString

Soapaction: "http://tempuri.org/webservice/method" 

Content-Length: 795 

回应是


 HTTP/1.1 500 Internal Server Error Cache-Control: private 

 Content-Type: text/xml; charset=utf-8 

 Server: Microsoft-IIS/10.0 

 Strict-Transport-Security: max-age=31536000; includeSubDomains 

 Set-Cookie: ASP.NET_SessionId=hghtgkuhlihkjg; path=/; secure; 

 HttpOnly Set-Cookie: 

 ms-dyn-csrftoken= someTokenSTring; path=/; secure 

 ms-dyn-fqhn: 

 ms-dyn-namespace: namespace 

 ms-dyn-tenant: tenantidstring 

 ms-dyn-role: 

 ms-dyn-aid: aidString 

 X-Powered-By: ASP.NET 

 X-Content-Type-Options: nosniff 

 X-Frame-Options: SAMEORIGIN 

 p3p: CP="No P3P policy defined. Read the Microsoft privacy statement at https://go.microsoft.com/fwlink/?LinkId=271135" 

 Strict-Transport-Security: max-age=31536000; 

 includeSubDomains Date: Thu, 01 Aug 2019 19:24:52 GMT Content-Length: 1112 

 a:ForbiddenForbidden1317System.ComponentModel.Win32ExceptionThe specified account does not exist0-2147467259

我需要能够无错误地调用该方法并获取它发送的值。


HUH函数
浏览 113回答 1
1回答

宝慕林4294392

好吧,终于找到了解决方案。它有助于阅读有关您使用的类和使用的不同系统的文档。就我而言,我试图将我的应用程序与 microsoft dynamics 365 ax 集成,所以我也必须仔细阅读。我阅读了很多文件,其中一些与不同的动态服务相关,但这个帮助最大由于soap服务需要授权标头,因为他们使用的是Windows身份验证,我们需要从oAuth链接中获取令牌。https://login.windows.net/$tenantDomainName/oauth2/tokenPS:我从github PHPConsoleApplication知道的 oauth2 链接我使用 PHP CURL 来获取我的授权令牌,然后使用 PHP 的 SoapClient 类创建了一个客户端。确保在标头中添加授权令牌,如下所示:$arrayOpt = array(    'stream_context'  => stream_context_create(                            array('http' =>'Authorization: Bearer tokenString') ));$client = new SoapClient($wsdl, $arrayOpt);$response = $client->serviceMethod($parameters);var_dump($response);您将获得该方法的值。
打开App,查看更多内容
随时随地看视频慕课网APP