Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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
Php 使用cURL向webservices发送xml_Php_Xml_Wordpress_Curl_Gravity Forms Plugin - Fatal编程技术网

Php 使用cURL向webservices发送xml

Php 使用cURL向webservices发送xml,php,xml,wordpress,curl,gravity-forms-plugin,Php,Xml,Wordpress,Curl,Gravity Forms Plugin,为了让你大致了解我在这里要完成的工作,我正在运行一个带有自定义主题的WordPress站点,并利用Gravity表单插件在该站点上创建所有表单 我们正在将网站上的所有(2)表单与外部lead管理服务集成。当然,他们关于如何与他们的Web服务交互的文档远远没有得到很好的记录 提供的PDF说明: 假定第三方供应商熟悉创建XML文件,了解XSD文档以创建格式良好的XML文档,并拥有通过Web服务提交和接收XML文档所需的适当工具 Web服务URL: Web服务方法 插入流量 InsertTraffi

为了让你大致了解我在这里要完成的工作,我正在运行一个带有自定义主题的WordPress站点,并利用Gravity表单插件在该站点上创建所有表单

我们正在将网站上的所有(2)表单与外部lead管理服务集成。当然,他们关于如何与他们的Web服务交互的文档远远没有得到很好的记录

提供的PDF说明:

假定第三方供应商熟悉创建XML文件,了解XSD文档以创建格式良好的XML文档,并拥有通过Web服务提交和接收XML文档所需的适当工具

Web服务URL:

Web服务方法

插入流量

InsertTraffic是第三方供应商将用于将单个流量插入Yardi PopCard的PopCard应用程序的一种方法。这一条流量可能代表潜在客户在ILS网站上填写联系表,或者代表潜在客户接到由呼叫中心接听的电话。-PDF中的方法描述

我一直与该公司联系,知道我试图推送到他们的Web服务中的XML是正确的,但是潜在客户没有进入系统

<?php 
add_action("gform_after_submission", "submit_contact_lead", 10, 2);

function submit_contact_lead($entry, $form){

  $fname = $entry['1.3'];
  $lname = $entry['1.6'];
  $userEmail = $entry['2'];
  if ($entry['3']) {
    $comments = $entry['3'];
  } else {
    $comments = '';
  }
  $date = date('Y-m-d\TH:i');
  $baseURL = 'http://interface.webservices.popcard.ltsolutions.com/service.asmx/InsertTraffic';
  $xmlRequest = '<?xml version="1.0" encoding="utf-8"?>
    <traffic 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        contactdatetime="'.$date.'" 
        transactiondatetime="'.$date.'">
    <trafficsource>
        <vendorid>551d12d8a1de</vendorid>
        <emailaddress></emailaddress>
        <sourcename></sourcename>
        <propertyname>CityView</propertyname>
    </trafficsource>
    <prospect>
        <firstname>'.$fname.'</firstname>
        <middlename></middlename>
        <lastname>'.$lname.'</lastname>
        <streetaddress1></streetaddress1>
        <streetaddress2></streetaddress2>
        <city></city>
        <state></state>
        <zipcode></zipcode>
        <daytimephone></daytimephone>
        <eveningphone></eveningphone>
        <cellphone></cellphone>
        <otherphone></otherphone>
        <emailaddress>'.$userEmail.'</emailaddress>
        <comments>'.$comments.'</comments>
      </prospect>
    <prospectpreferences>
        <pricerangemin></pricerangemin>
        <pricerangemax></pricerangemax>
        <numberofoccupants></numberofoccupants>
        <pets></pets>
        <dateneeded></dateneeded>
        <appointmentdate></appointmentdate>
        <appointmenttime></appointmenttime>
        <numberofbedsdesired></numberofbedsdesired>
        <numberofbathsdesired></numberofbathsdesired>
    </prospectpreferences>
    </traffic>';

    $xmlRequest = preg_replace( "/\r|\n/", "", $xmlRequest );

    // Set up cURL request directly in this funtion
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://interface.webservices.popcard.ltsolutions.com/service.asmx');
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "InsertTraffic=" . $xmlRequest);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); // set to 300 after testing purposes
    curl_setopt($ch, CURLOPT_TIMEOUT, 0); // set to 300 after testing purposes
    $result = curl_exec($ch);
    curl_close($ch);

    // $array_data = json_decode(json_encode(simplexml_load_string($data)), true);

    error_log('PopCards Submission | Contact/Reserve Submission for '.$lname.', '. $fname.'.');
    error_log($xmlRequest);
    error_log($result);
}

好的,我们将一步一步地进行。

运行服务的服务拒绝了您的请求

我们需要从curl获取您的请求标头。

将超时设置为300,零=从不超时,如果没有响应,它将挂起,直到(如果)PHP超时。

我希望yu添加的这些选项都不会影响您的请求,它们仅用于测试和调试。

更改:

curl_setopt($ch, CURLOPT_HEADER, true);
      curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));
添加以下内容:

curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_FAILONERROR,true);
添加此代码:

  $result = curl_exec($ch);
  if (curl_errno($ch)){
      $data .= 'Retreive Base Page Error: ' . curl_error($ch);
  }
  else {
    $skip = intval(curl_getinfo($ch, CURLINFO_HEADER_SIZE)); 
    $responseHeader = substr($result ,0,$skip);
    $result = substr($result ,$skip);
    $info = var_export(curl_getinfo($ch),true);
   }
  $fp = fopen('xml.log','w');
  fwrite($fp,"$responseHeader\n$info\n$result ");
  fclose($fp);
发布此xml.log而不是您的日志。我认为这将包括你所拥有的以及更多。重要的东西更多。


更新

更改:

curl_setopt($ch, CURLOPT_HEADER, true);
      curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));
致:

这是为什么?也许吧。

contactdatetime="$date" transactiondatetime="$date"
Heredoc格式优于串联
“.$date.”
。太容易错过双引号或其他问题。

将名称空间(xmlns)全部放在一行上,不需要编辑器EOL问题

 $xmlRequest = <<<EOX
<?xml version="1.0" encoding="utf-8"?>
<traffic xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" contactdatetime="$date" transactiondatetime="$date">
  <trafficsource>
    <vendorid>551d12d8a1de</vendorid>
    <emailaddress></emailaddress>
    <sourcename></sourcename>
    <propertyname>CityView</propertyname>
  </trafficsource>
  <prospect>
    <firstname>$fname</firstname>
    <middlename></middlename>
    <lastname>$lname</lastname>
    <streetaddress1></streetaddress1>
    <streetaddress2></streetaddress2>
    <city></city>
    <state></state>
    <zipcode></zipcode>
    <daytimephone></daytimephone>
    <eveningphone></eveningphone>
    <cellphone></cellphone>
    <otherphone></otherphone>
    <emailaddress>$userEmail</emailaddress>
    <comments>$comments</comments>
  </prospect>
  <prospectpreferences>
    <pricerangemin></pricerangemin>
    <pricerangemax></pricerangemax>
    <numberofoccupants></numberofoccupants>
    <pets></pets>
    <dateneeded></dateneeded>
    <appointmentdate></appointmentdate>
    <appointmenttime></appointmenttime>
    <numberofbedsdesired></numberofbedsdesired>
    <numberofbathsdesired></numberofbathsdesired>
  </prospectpreferences>
</traffic>
EOX;

$xmlRequest=我以前做过同样的SOAP请求,标准的Microsoft垃圾。如果您需要我的帮助,并且您有我发布的xml.log,请给我发送一条消息。@误解了,我应该将xml.log文件放在哪里?我把它放在与包含上述函数的文件相同的目录中,xml.log文件中没有记录任何内容。我只想看看它的内容。或者您可以
echo“$responseHeader\n$info\n$result”
并将其粘贴到此处。很可能curl不是执行此任务的最佳工具,如果您不想先了解所有SOAP内部结构,请使用标准的SOAPClient。这正是您编写的文档中没有很好记录的部分:他们没有向您解释整个SOAP,这是他们用这句话所说的全部内容。至少在您的错误报告中,您应该提供HTTP状态代码。大概500?这通常意味着你把请求搞砸了。首先尝试使用SOAP客户机使其工作,然后捕获工作请求的HTTP流量,然后可以使用curl重新构建。
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
 <soap:Body>
  <traffic xmlns="http://tempuri.org/PopCardInterfaceWebservice/Service1">
    <trafficsource>     
      <vendorid>551d12d8a1de</vendorid>     
      <emailaddress></emailaddress>     
      <sourcename></sourcename>      
      <propertyname>CityView</propertyname> 
    </trafficsource>    
    <prospect>      
      <firstname>John</firstname>       
      <middlename></middlename>     
      <lastname>Doe</lastname>      
      <streetaddress1></streetaddress1>     
      <streetaddress2></streetaddress2>     
      <city></city>     
      <state></state>       
      <zipcode></zipcode>       
      <daytimephone></daytimephone>     
      <eveningphone></eveningphone>     
      <cellphone></cellphone>       
      <otherphone></otherphone>     
      <emailaddress>johndoe@gmail.com</emailaddress>        
      <comments></comments>   
    </prospect> 
    <prospectpreferences>       
      <pricerangemin></pricerangemin>       
      <pricerangemax></pricerangemax>       
      <numberofoccupants></numberofoccupants>       
      <pets></pets>     
      <dateneeded></dateneeded>     
      <appointmentdate></appointmentdate>       
      <appointmenttime></appointmenttime>       
      <numberofbedsdesired></numberofbedsdesired>       
      <numberofbathsdesired></numberofbathsdesired> 
    </prospectpreferences>  
  </traffic>
 </soap:Body>
</soap:Envelope>