php - 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() 显示之前表单中的正确变量。事实上,所有变量都正确输出。我只是不明白为什么它不起作用。它没有给我一个错误,它只是没有发布。
仅供参考:我尝试过使用 javascript SOAP,但遇到了类似的问题。代码是正确的,变量是正确的,但是添加到系统中并没有通过。
我愿意尝试任何事情。
解决方案
SoapClient 类的初始化
首先以正确的方式初始化您的肥皂客户端。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 不是由客户端编译的,这些可以是空的。
推荐阅读
- firebase - 如何以编程方式形成 Firestore 查询?
- laravel - 将数组转换为集合 laravel
- java - CompletableFuture 总是抛出超时异常
- scala - 在我的本地机器上执行时尝试使用 Spark 和 Scala 创建决策树时出现 Task not Serializable 错误
- azure - 在 Azure CDN 标准 Verizon 中从 HTTP 重定向到 HTTPS
- angular - 如何在多选primeng angular中添加清除按钮以进行过滤
- c++ - 如何返回数字的数组列表的总和等于给定的数字
- r - 如何为绘图中的不同区域设置不同的 ggplot2 背景
- syntax-error - 新手 Solidity 错误/问题 - 'ParserError: Expected identifier but got 'function'...'
- azure - 创建可以处理多个队列的 Azure.Storage.Queues 客户端