首页 > 解决方案 > 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,但遇到了类似的问题。代码是正确的,变量是正确的,但是添加到系统中并没有通过。

我愿意尝试任何事情。

标签: phpsoap

解决方案


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 不是由客户端编译的,这些可以是空的。


推荐阅读