Php Zend肥皂和MindBody

Php Zend肥皂和MindBody,php,api,zend-framework,soap,zend-soap,Php,Api,Zend Framework,Soap,Zend Soap,对于那些不熟悉MindBody()的人来说,它是一个方便的商业处理工具,适用于像我工作的瑜伽工作室这样的健康和健康中心。它可以跟踪客户,管理员工和各种各样的好东西。我使用nuSOAP和MindbodySOAPAPIV0.4生成报告已有一段时间了。当我的客户要求我生成一份需要更新的MindBody SOAP API v0.5的报告时,我决定放弃PHP5原生SOAP的nuSOAP。然后我听说Zend Soap提供了与本机Soap相同的速度,但也有许多其他好处,因此我编写了以下代码 <?php

对于那些不熟悉MindBody()的人来说,它是一个方便的商业处理工具,适用于像我工作的瑜伽工作室这样的健康和健康中心。它可以跟踪客户,管理员工和各种各样的好东西。我使用nuSOAP和MindbodySOAPAPIV0.4生成报告已有一段时间了。当我的客户要求我生成一份需要更新的MindBody SOAP API v0.5的报告时,我决定放弃PHP5原生SOAP的nuSOAP。然后我听说Zend Soap提供了与本机Soap相同的速度,但也有许多其他好处,因此我编写了以下代码

<?php
require_once 'Zend/Soap/Client.php';
$sourceCredentials = array('SourceName'=>'****', 'Password'=>"****", 'SiteIDs'=>array('****'));

try {
  $client = new Zend_Soap_Client('https://api.mindbodyonline.com/0_5/ClientService.asmx?WSDL');
  $result = $client->GetClients(array("SourceCredentials"=>$sourceCredentials, "XMLDetail"=>"Basic", "PageSize"=>"10", "CurrentPageIndex"=>"0", "ClientIDs"=>array("100009536")));
  echo $client->getLastRequest();

} catch (SoapFault $s) {
  die('ERROR: [' . $s->faultcode . '] ' . $s->faultstring);
} catch (Exception $e) {
  die('ERROR: ' . $e->getMessage());
}
var_dump($client);
var_dump($result);
?>
“基本”、“页面大小”=>“10”、“当前页面索引”=>“0”、“客户端ID”=>数组(“100009536”);
echo$client->getLastRequest();
}捕获(SoapFault$s){
die('ERROR:['.$s->faultcode.].$s->faultstring);
}捕获(例外$e){
die('ERROR:'。$e->getMessage());
}
var_dump($客户);
var_dump($结果);
?>
我不确定我做错了什么。页面只是不断加载,但从未加载。我希望有人能看看WSDL或API文档,告诉我我缺少了什么。这里是指向API文档的链接,我在本例中尝试使用客户机服务

如果我注释掉$result=$client->GetClients~行,那么页面将加载,$client的var_dump将返回这个值

对象(Zend_Soap_客户端)#1(28){[“_编码:受保护”]=>字符串(5) “UTF-8”[“\u类映射:受保护”]=>NULL [“_faultExceptions:protected”]=>array(0){} [“\u soapVersion:protected”]=>int(2)[“\u uri:protected”]=>NULL [“\u位置:受保护”]=>NULL[“\u样式:受保护”]=>NULL [“\u使用:受保护”]=>NULL[“\u登录:受保护”]=>NULL [“\u密码:受保护”]=>NULL[“\u代理\u主机:受保护”]=>NULL [“\u proxy\u port:protected”]=>NULL[“\u proxy\u login:protected”]=>NULL [“\u proxy\u password:protected”]=>NULL[“\u local\u cert:protected”]=>NULL [“\u密码短语:受保护”]=>NULL[“\u压缩:受保护”]=>NULL [“\u连接\u超时:受保护”]=>NULL [“\u stream\u context:protected”]=>NULL[“\u features:protected”]=>NULL [“\u cache\u wsdl:protected”]=>NULL[“\u user\u agent:protected”]=>NULL [“_wsdl:protected”]=>字符串(58) "https://api.mindbodyonline.com/0_5/ClientService.asmx?WSDL" [“\u soapClient:protected”]=>NULL[“\u lastMethod:protected”]=>string(0) “”[“\u soapinputhreaders:protected”]=>array(0){} [“\u permanentsoapinputhreaders:protected”]=>array(0){} [“_soapOutputHeaders:protected”]=>array(0){}


我不确定这些值应该是什么,但所有这些空值在我看来都很糟糕。我已经尝试了嵌套传递给$client->GetClients的数组的不同组合,并且我还尝试了访问GetClients之外的不同函数

好吧,对于那些碰巧在谷歌上看到这个并想要答案的人来说。出于某种原因,您必须将用户代理字符串添加到页面标题中,才能使其与API一起工作。将此代码添加到PHP页面的顶部

ini_set("user_agent", "FOOBAR");
然后您需要创建一个Zend_Soap_客户端,将Soap_版本设置为Soap_1_1。创建要发送的参数数组。然后调用所需的函数,在本例中传入一个数组(“Reqest”=>$params)


编辑:有关更多信息,请查看我正在撰写的文章

OMG!你怎么知道的?实际上,我今天早些时候花了大约20分钟试图解决这个问题,尝试了一个解决类似问题的解决方案。我没有运气,但看到你回答中提到的两项解决了问题,我感到非常惊讶!哈哈,很高兴这有帮助!我已经忘记了用户代理的事情,因为这发生在不久前,当时我还在使用nuSOAP,我把它添加到我的代码中,并忘记了它。更改soap_版本只是一种猜测。
$client = new Zend_Soap_Client('https://api.mindbodyonline.com/0_5/ClientService.asmx?WSDL', array("soap_version"=>SOAP_1_1));
$sourceCredentials = array('SourceName'=>'****', 'Password'=>"****", 'SiteIDs'=>array('****'));
$params = array("SourceCredentials"=>$sourceCredentials, "XMLDetail"=>"Basic", "PageSize"=>"10", "CurrentPageIndex"=>"0", "ClientIDs"=>array("123456789","123456789"));
$result = $client->GetClients(array("Request"=>$params));