SOAP API:PHP 代码不起作用,但 SOAP UI 有效



我正试图为我的作品网站创建一个租赁模块。当我在SmartBear的SOAP UI中使用相同的参数时,它就起作用了。所以,我假设这与我的代码有关,但我找不到错误。

<?php //Submit Reservation
require("connect.php");
$sessionId = $_SESSION['sessionId'];
$moveInDate = date("yy-m-d", strtotime($_POST['moveIn']));
$billDate = date("d", strtotime($_POST['moveIn']));
$rentalOptions = array(
"customer.company" =>$company,
"account.startDate"=> $moveInDate,
"contact.firstName"=>$_POST['fname'],
"contact.lastName"=>$_POST['lname'],
"contact.companyName"=>$_POST['companyName'],
"contact.street1"=>$_POST['street'],
"contact.street2"=>"",
"contact.city"=>$_POST['city'],
"contact.state"=>$_POST['state'],
"contact.zip"=>$_POST['zip'],
"contact.country"=>"US",
"phone.1" => $_POST['mobile'],
"contact.email"=>$_POST['email'],
"account.currency"=>"1",
"account.billDay"=> $billDate,
"user.paymentMethod"=>"1",
"user.draftDay"=>"",
"unit.id"=>$_POST['unit-name'],
"postAccount"=>"Y",
"promotionId"=>$_POST['promo'],
"insuranceId"=>$_POST['insurance']
);
var_dump($rentalOptions);
echo "<br/>". $sessionId ."<br/><a href="teststorage.php">Return</a>";
$client = new SoapClient("https://api.doorswap.com/service/system.wsdl");
// Make API Call
$dsReceiver = "customer";
$dsAction = "saveNewCustomer";
$result = $client->makeReceiverCall($sessionId, $dsReceiver, $dsAction, $rentalOptions);
//if($result["success"] == "true") {    
//}
?>

var_dump((和print_r((显示上一个表单中正确的变量。事实上,所有变量都是正确输出的。我只是不明白为什么它不起作用。它没有给我一个错误,只是没有张贴。

仅供参考:我曾尝试过使用JavaScriptSOAP,但也遇到过类似的问题。代码是对的,变量是正确的,但添加到系统中的操作没有完成。

我愿意尝试任何东西。

SoapClient类的初始化

首先,以正确的方式将您的soap客户端小型化。soap客户端类使用几个选项来调试应用程序。在下面的示例中,soap客户端通过一些选项进行了初始化,这将使您在测试时的生活更加轻松。

try {
$client = new SoapClient('https://api.doorswap.com/service/system.wsdl', [
'exceptions' => true,
'trace' => true,
]);
} catch (SoapFault $fault) {
var_dump($fault->getMessage());
if ($client instanceof SoapClient) {
var_dump(
$client->__getLastRequest(),
$client->__getLastResponse()
);
}
}

正如您所看到的,soap客户端类是用不同的选项参数初始化的。exception选项设置为true,以便在发生错误时soap客户端类抛出异常。这就是代码被封装在try-and-catch块中的原因。trace选项允许我们查看最后一个请求和响应的样子。如果soap客户端已初始化,则可以使用内置方法__getLastRequest()__getLastResponse()来查看发送和接收的xml的样子。请记住,如果xml不是由客户端编译的,那么这些值可能是空的。

makeReceiverCall方法是一个"name"/"值";系统所以上面的$rentalOptions数组应该是这样做的。这项工作目前正在进行中,并且在执行过程中完美无瑕。

$rentalOptions = array(
array("name"=> "customer.company","value"=> $company),
array("name"=> "account.startDate", "value"=> $moveInDate),
...
);

这就是我遇到的错误,我终于想通了。感谢所有试图提供帮助的人。

最新更新