1

对于那些不熟悉 MindBody ( http://www.mindbodyonline.com ) 的人来说,它是一个方便的商家处理工具,适用于我工作的瑜伽工作室等健康和保健中心。它可以跟踪客户和管理员工以及各种很棒的东西。一段时间以来,我一直在使用 nuSOAP 和 MindBody SOAP API v0.4 生成报告。当我的客户要求我生成需要更新的 MindBody SOAP API v0.5 的报告时,我决定放弃 nuSOAP 以使用 PHP5 的本机 SOAP。然后我听说 Zend 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);
?>

我不确定我做错了什么。该页面只是不断加载和加载,但从不加载。我希望有人可以查看 WSDL 或 API Docs 并告诉我我缺少什么。这是 API Docs 的链接http://api.mindbodyonline.com/Doc我在这个例子中尝试使用客户端服务。

如果我注释掉 $result = $client->GetClients~ 行然后页面加载并且 $client 的 var_dump 返回这个

object(Zend_Soap_Client)#1 (28) { ["_encoding:protected"]=> string(5) "UTF-8" ["_classmap:protected"]=> NULL ["_faultExceptions:protected"]=> array(0 ) { } ["_soapVersion:protected"]=> int(2) ["_uri:protected"]=> NULL ["_location:protected"]=> NULL ["_style:protected"]=> NULL ["_use: protected"]=> NULL ["_login:protected"]=> NULL ["_password:protected"]=> NULL ["_proxy_host:protected"]=> NULL ["_proxy_port:protected"]=> NULL ["_proxy_login: protected"]=> NULL ["_proxy_password:protected"]=> NULL ["_local_cert:protected"]=> NULL ["_passphrase:protected"]=> NULL ["_compression:protected"]=> NULL ["_connection_timeout:protected"]=> NULL ["_stream_context:protected"]=> NULL ["_features:protected"]=> NULL ["_cache_wsdl:protected"]=> NULL ["_user_agent:protected"]=> NULL [" _wsdl:protected"]=> 字符串(58) "https://api.mindbodyonline.com/0_5/ClientService.asmx?WSDL" ["_soapClient:protected"]=> NULL ["_lastMethod:protected"]=> 字符串(0) "" ["_soapInputHeaders:protected"]=> 数组(0) { } ["_permanentSoapInputHeaders:protected"]=> 数组(0) { } ["_soapOutputHeaders:protected"]=> 数组(0) { } }NULL ["_user_agent:protected"]=> NULL ["_wsdl:protected"]=> 字符串(58) "https://api.mindbodyonline.com/0_5/ClientService.asmx?WSDL" ["_soapClient:protected"] => NULL ["_lastMethod:protected"]=> string(0) "" ["_soapInputHeaders:protected"]=> array(0) { } ["_permanentSoapInputHeaders:protected"]=> array(0) { } [" _soapOutputHeaders:protected"]=> 数组(0) { } }NULL ["_user_agent:protected"]=> NULL ["_wsdl:protected"]=> 字符串(58) "https://api.mindbodyonline.com/0_5/ClientService.asmx?WSDL" ["_soapClient:protected"] => NULL ["_lastMethod:protected"]=> string(0) "" ["_soapInputHeaders:protected"]=> array(0) { } ["_permanentSoapInputHeaders:protected"]=> array(0) { } [" _soapOutputHeaders:protected"]=> 数组(0) { } }受保护的"]=> 数组(0) { } ["_soapOutputHeaders:protected"]=> 数组(0) { } }受保护的"]=> 数组(0) { } ["_soapOutputHeaders:protected"]=> 数组(0) { } }

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

4

1 回答 1

0

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

ini_set("user_agent", "FOOBAR");

那么你需要创建一个 Zend_Soap_Client,soap_version 设置为 SOAP_1_1。创建要发送的参数数组。然后调用你想要的函数,在这种情况下你传入一个数组( "Reqest"=>$params )

$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));

编辑:有关更多信息,请查看我写的关于如何在 30 分钟内开始使用 MINDBODY API 的文章

于 2012-05-17T02:59:53.983 回答