Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
soapapi:PHP代码不';不起作用,但soapui起作用_Php_Soap - Fatal编程技术网

soapapi:PHP代码不';不起作用,但soapui起作用

soapapi:PHP代码不';不起作用,但soapui起作用,php,soap,Php,Soap,我正在尝试为我的工作网站创建一个租赁模块。当我在SmartBear的SOAP UI中使用相同的参数时,它就工作了。所以,我假设这与我的代码有关,但我找不到错误 <?php //Submit Reservation require("connect.php"); $sessionId = $_SESSION['sessionId']; $moveInDate = date("yy-m-d", strtotime($_POST['moveIn']));

我正在尝试为我的工作网站创建一个租赁模块。当我在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客户机类采用多个选项来调试应用程序。在下面的示例中,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客户端已初始化,则可以使用内置方法
\uu getLastRequest()
\uu getLastResponse()
查看发送和接收的xml的外观。请记住,如果xml不是由客户端编译的,那么这些方法可能是空的。

makeReceiverCall方法是一个“name”/“value”系统。因此,上面的$rentalOptions数组应该是这样做的。这项技术目前正在发挥作用,并且在执行过程中完美无缺

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

这就是我遇到的错误,最后我发现了。感谢所有试图提供帮助的人。

我只在soap中遇到过几次,但是如果您将参数构造成一个由WSDL参数名称
$client->makeReceiverCall(数组('sessionKey'=>$sessionId,'dsReceiver'=>…)键入的数组,会怎么样呢?
@Scuzzy,不。似乎不起作用。谢谢你的建议。