Php 使用cURL向webservices发送xml
为了让你大致了解我在这里要完成的工作,我正在运行一个带有自定义主题的WordPress站点,并利用Gravity表单插件在该站点上创建所有表单 我们正在将网站上的所有(2)表单与外部lead管理服务集成。当然,他们关于如何与他们的Web服务交互的文档远远没有得到很好的记录 提供的PDF说明: 假定第三方供应商熟悉创建XML文件,了解XSD文档以创建格式良好的XML文档,并拥有通过Web服务提交和接收XML文档所需的适当工具 Web服务URL: Web服务方法 插入流量 InsertTraffic是第三方供应商将用于将单个流量插入Yardi PopCard的PopCard应用程序的一种方法。这一条流量可能代表潜在客户在ILS网站上填写联系表,或者代表潜在客户接到由呼叫中心接听的电话。-PDF中的方法描述 我一直与该公司联系,知道我试图推送到他们的Web服务中的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
<?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>