为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
HUH函数 2021-11-13 10:38:09
我正在尝试通过 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 longTokenStringSoapaction: "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我需要能够无错误地调用该方法并获取它发送的值。
查看完整描述

1 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

好吧,终于找到了解决方案。它有助于阅读有关您使用的类和使用的不同系统的文档。就我而言,我试图将我的应用程序与 microsoft dynamics 365 ax 集成,所以我也必须仔细阅读。

我阅读了很多文件,其中一些与不同的动态服务相关,但这个帮助最大

由于soap服务需要授权标头,因为他们使用的是Windows身份验证,我们需要从oAuth链接中获取令牌。

https://login.windows.net/$tenantDomainName/oauth2/token

PS:我从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);

您将获得该方法的值。


查看完整回答
反对 回复 2021-11-13
  • 1 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信