Php 将表单数据发送到SOAP API,can';无法正确获取--soapCall的格式
我正在使用php表单将数据发送到CRM以收集数据,并将其放在CRM的正确位置,以通知公司的正确部门。其他人编写了API来收集信息,他们向我提供了SOAP URL。他们向我提供了示例XML,该示例XML在SOAPUI中工作,以返回正确的GUID响应 我编写了PHP代码来收集表单中的数据,并将其放入用于在SOAP API中测试API的相同xml代码中。我很难获得正确的提交代码。我的问题与此处的页面类似:。但是,使用$client->Submit会给我一个错误,说明这不是一个函数。 所以我回到了SOAP1.2规范,并尝试了uuSOAPCall(函数(数组))。 我没有得到任何回应。我已经尝试了一些其他的方法,但这似乎应该奏效 要发送的xml示例:Php 将表单数据发送到SOAP API,can';无法正确获取--soapCall的格式,php,arrays,xml,soap,Php,Arrays,Xml,Soap,我正在使用php表单将数据发送到CRM以收集数据,并将其放在CRM的正确位置,以通知公司的正确部门。其他人编写了API来收集信息,他们向我提供了SOAP URL。他们向我提供了示例XML,该示例XML在SOAPUI中工作,以返回正确的GUID响应 我编写了PHP代码来收集表单中的数据,并将其放入用于在SOAP API中测试API的相同xml代码中。我很难获得正确的提交代码。我的问题与此处的页面类似:。但是,使用$client->Submit会给我一个错误,说明这不是一个函数。 所以我回到了SOA
<soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:header>
<soapenv:body>
<tem:addnewlead>
<!--Optional-->
<tem:firstname>test</tem:firstname>
<!--Optional-->
<tem:lastname>test2</tem:lastname>
<!--Optional-->
<tem:emailaddress>test@test.com</tem:emailaddress>
<!--Optional-->
<tem:mainphone>555-555-5555</tem:mainphone>
<!--Optional-->
<tem:companyname>testtest</tem:companyname>
<!--Optional-->
<tem:interest>testtesttest</tem:interest>
<!--Optional-->
<tem:requesttype>test</tem:requesttype>
<!--Optional-->
<tem:requestdetails>testtesttest</tem:requestdetails>
</tem:addnewlead>
</soapenv:body>
</soapenv:header>
</soapenv:envelope>
如果是黑色的,我应该从API获得一个确认代码
谢谢你的帮助。
多谢各位
当提交不起作用时,我也收到了此xml响应:
/**
*类别GF\U服务\U API
*
*访问服务请求数据的API
*
*@自1.0.0以来
*/
//如果直接访问,则退出
如果(!defined('ABSPATH'))退出;
ini设置(“默认套接字超时”,120);
类别GF\U服务\U API{
/**
*@var GF_Services_API$endpoint我们ping数据的端点
*@自1.0.0以来
*/
私人$0http://xxxxxxxxxxxxxxxx/Alpha.svc?wsdl';
/**
*GF_服务_API构造函数。
*
*@自1.0.0以来
*/
函数_u构造(){
}
/**
*我想这比在正则表达式中使用捕获组稍微容易一些。。。?
*也许它更有效,不要觉得运行基准测试。这就是它的开始。
*
*@param string$haystack要搜索的输入
*@param string$开始打开标记
*@param string$结束标记
*
*@access-private
*@自1.0.0以来
*@开始标记和结束标记之间的返回字符串
*/
$haystack、$start、$end)之间的私有函数子字符串{
if(strpos($haystack,$start)==false||
strpos($haystack,$end)==false){
返回false;
}
否则{
$start_position=strpos($haystack,$start)+strlen($start);
$end_position=strpos($haystack,$end);
返回substr($haystack、$start\u position、$end\u position-$start\u position);
}
}
/**
*使用票证号从API获取信息
*
*@param string$票号票号
*
*@access-public
*@自1.0.0以来
*@返回票证号的数组API数据
*/
公共函数按票号获取信息($ticket票号=“”){
$return_array=array();
如果($ticket_number!=''){
试一试{
$wsdl=$this->endpoint;
//PHP5.6.5中的OpenSSL选项
$opts=数组(
“ssl”=>数组(
“密码”=>“RC4-SHA”,
“验证对等方”=>false,
“验证\u对等\u名称”=>false
)
);
//SOAP1.2客户端
$params=数组(
'编码'=>'UTF-8',
“verifypeer”=>false,
“verifyhost”=>false,
//'soap_version'=>soap_1_2,soap v1.2不支持我们需要的文本/html
“跟踪”=>1,
“例外情况”=>1,
“连接超时”=>180,
'stream\u context'=>stream\u context\u create($opts)
);
$cliente=newsoapclient($wsdl,$params);
$data=数组(
“TicketNo”=>$ticket\u编号,
“Key1”=>“76xxxxxxxxxxxxxx94”,
“键2”=>“6x-xxxxxxxxxxxxx 4xxxxxxxxxxxxx16”
);
<?php
$URL = 'http://zzzzzzzz.com/APIService.svc';
$send = "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>
<soapenv:Header/>
<soapenv:Body>
<tem:ADDNEWLEAD>
<!--Optional-->
<tem:FirstName>test</tem:FirstName>
<!--Optional-->
<tem:LastName>test2</tem:LastName>
<!--Optional-->
<tem:emailAddress>test@test.com</tem:emailAddress>
<!--Optional-->
<tem:MainPhone>555-555-5555</tem:MainPhone>
<!--Optional-->
<tem:CompanyName>testtest</tem:CompanyName>
<!--Optional-->
<tem:Interest>testtesttest</tem:Interest>
<!--Optional-->
<tem:RequestType>test</tem:RequestType>
<!--Optional-->
<tem:RequestDetails>testtesttest</tem:RequestDetails>
</tem:ADDNEWLEAD>
</soapenv:Body>
</soapenv:Envelope>";
print_r($send);
try {
$client = new SoapClient("http://zzzzzzzz.com/APIService.svc?WSDL",array(
'location' => $URL,
'uri' => "http://zzzzzzz.com/",
'trace' => 1,
'exceptions' => true
));
$return = $client->__soapCall(array('ADDNEWLEAD' => $send));
$functions = $client->__getFunctions();
// Some other code that I thought I would try as I am not the best SOAP API writer as you can tell by now.
// $return = $client->__soapCall(array(DoWork $xml, ADDNEWLEAD $send));
// $return = $client->DoWork(ADDNEWLEAD($send));
// $return = $client->__soapCall('DoWork',array('DoWork' => null,'ADDNEWLEAD' => $send));
echo '<pre>'; //show response on screen
echo '<br>-';
print_r($functions);
echo '<br>+';
print_r($return);
echo '</pre>';
} catch(SoapFault $e) {
echo '<h3>Exception</h3>';
echo '<pre>';
print_r($e);
echo '</pre>';
}
die(); ?>
Array
(
[0] => DoWorkResponse DoWork(DoWork $parameters)
[1] => ADDNEWLEADResponse ADDNEWLEAD(ADDNEWLEAD $parameters)
)
stdClass Object (
[ADDNEWLEADResult] => )
/**
* Class GF_Services_API
*
* Accesses the API for Service Request data
*
* @since 1.0.0
*/
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) exit;
ini_set('default_socket_timeout', 120);
class GF_Services_API {
/**
* @var GF_Services_API $endpoint The Endpoint that we ping for data
* @since 1.0.0
*/
private $endpoint = 'http://xxxxxxxxxxxxxxxx/Alpha.svc?wsdl';
/**
* GF_Services_API constructor.
*
* @since 1.0.0
*/
function __construct() {
}
/**
* I guess this is marginally easier than using Capture Groups in Regex...?
* Maybe it is more efficient, don't feel like running a benchmark. This is how it was to begin with.
*
* @param string $haystack Input to Search
* @param string $start Opening Tag
* @param string $end Closing Tag
*
* @access private
* @since 1.0.0
* @return string String between the opening and closing Tag
*/
private function substring_between( $haystack, $start, $end ) {
if ( strpos( $haystack, $start ) === false ||
strpos( $haystack, $end ) === false) {
return false;
}
else {
$start_position = strpos( $haystack, $start ) + strlen( $start );
$end_position = strpos( $haystack, $end );
return substr( $haystack, $start_position, $end_position - $start_position );
}
}
/**
* Grab Information from the API using a Ticket Number
*
* @param string $ticket_number Ticket Number
*
* @access public
* @since 1.0.0
* @return array API Data for the Ticket Number
*/
public function get_information_by_ticket_number( $ticket_number = '' ) {
$return_array = array();
if ( $ticket_number != '' ) {
try {
$wsdl = $this->endpoint;
// options for OpenSSL in php 5.6.5
$opts = array(
'ssl' => array(
'ciphers' => 'RC4-SHA',
'verify_peer' => false,
'verify_peer_name' => false
)
);
// SOAP 1.2 client
$params = array(
'encoding' => 'UTF-8',
'verifypeer' => false,
'verifyhost' => false,
//'soap_version' => SOAP_1_2, SOAP v1.2 doesn't support text/html which we need
'trace' => 1,
'exceptions' => 1,
'connection_timeout' => 180,
'stream_context' => stream_context_create( $opts )
);
$cliente = new SoapClient( $wsdl, $params );
$data = array(
"TicketNo" => $ticket_number,
"Key1" => '76xxxxxxxxxxxxxx94',
"Key2" => '6x-xxxxxxxxxxxxxxx4xxxxxxxxxxxxx16'
);
$result = $cliente->__call( 'CheckServiceTicket', array( $data ) );
$result_data = $result->CheckServiceTicketResult->any;
$return_array['serial_number'] = $this->substring_between( $result_data, '<serial_no>', '</serial_no>' );
$return_array['descr'] = $this->substring_between( $result_data, '<descr>', '</descr>' );
$return_array['contract_id'] = $this->substring_between( $result_data, '<Contract_ID>', '</Contract_ID>' );
$return_array['contract_status'] = $this->substring_between( $result_data, '<Contract_Status>', '</Contract_Status>' );
$return_array['contract_expiry_date'] = $this->substring_between( $result_data, '<Contract_Expiry_date>', '</Contract_Expiry_date>' );
$return_array['address_1'] = $this->substring_between( $result_data, '<address_1>','</address_1>');
$return_array['address_2'] = $this->substring_between( $result_data, '<address_2>', '</address_2>' );
$return_array['address_3'] = $this->substring_between( $result_data, '<address_3>', '</address_3>' );
$return_array['city'] = $this->substring_between( $result_data, '<city>', '</city>' );
$return_array['state'] = $this->substring_between( $result_data, '<state>', '</state>' );
$return_array['zip'] = $this->substring_between( $result_data, '<zip>', '</zip>' );
$return_array['country'] = $this->substring_between( $result_data, '<country>', '</country>' );
$return_array['company_name'] = $this->substring_between( $result_data, '<Company_Name>', '</Company_Name>' );
$return_array['device_type'] = $this->substring_between( $result_data, '<Device_Type>', '</Device_Type>' );
$return_array['state'] = $this->get_us_state_name( $return_array['state'] );
$return_array['contract_expiry_date'] = date( "F d, Y", strtotime( $return_array['contract_expiry_date'] ) );
}
catch ( Exception $e ) {
echo "Error: " . $e->getMessage();
}
}
return $return_array;
}
/**
* Gets an Array of Service Requests Information (Including Status) via an Email Address
*
* @param string $email Email Address
*
* @access public
* @since 1.0.0
* @return array Array of Service Request Info
*/
public function get_information_by_email_address( $email = '' ) {
$return_array = array();
if ( $email != '' ) {
try {
$wsdl = $this->endpoint;
// options for OpenSSL in php 5.6.5
$opts = array(
'ssl' => array(
'ciphers' => 'RC4-SHA',
'verify_peer' => false,
'verify_peer_name' => false
)
);
// SOAP 1.2 client
$params = array(
'encoding' => 'UTF-8',
'verifypeer' => false,
'verifyhost' => false,
//'soap_version' => SOAP_1_2, SOAP v1.2 doesn't support text/html which we need
'trace' => 1,
'exceptions' => 1,
'connection_timeout' => 180,
'stream_context' => stream_context_create( $opts )
);
$client = new SoapClient( $wsdl, $params );
$data = array(
"Email" => $email,
"Key1" => '7x',
);
$result = $client->__call( 'QueryTicketInfo', array( $data ) );
$xml = $result->QueryTicketInfoResult->any;
// Remove namespaces
$xml = str_replace( array( "diffgr:", "msdata:" ), '', $xml );
$xml = "<package>" . $xml . "</package>";
$data = simplexml_load_string( $xml );
$tickets = $data->diffgram->DocumentElement->WS0002;
foreach ( $tickets as $ticket ) {
$_result = array();
$_result['Opened'] = (string) $ticket->Opened;
$_result['LastAction'] = (string) $ticket->LastAction;
$_result['Enteredby'] = (string) $ticket->Enteredby;
$_result['TicketNumber'] = (string) $ticket->TicketNumber;
$_result['ProblemDescription'] = (string) $ticket->ProblemDescription;
$_result['CurrentStatus'] = (string) $ticket->CurrentStatus;
$_result['CustomerName'] = (string) $ticket->CustomerName;
$_result['CalledInBy'] = (string) $ticket->CalledInBy;
$_result['Email'] = (string) $ticket->Email;
$_result['ServiceAgent'] = (string) $ticket->ServiceAgent;
$_result['PartNumber'] = (string) $ticket->PartNumber;
$_result['PartDescription'] = (string) $ticket->PartDescription;
$_result['SerialNumber'] = (string) $ticket->SerialNumber;
$_result['City'] = (string) $ticket->City;
$_result['State'] = (string) $ticket->State;
$_result['LastActivity'] = (string) $ticket->LastActivity;
$_result['DO'] = (string) $ticket->DO;
$return_array[] = $_result;
}
}
catch ( Exception $e ) {
echo "Error: " . $e->getMessage();
}
}
return $return_array;
}
}
$addNewLeadRequest = new \stdClass();
$addNewLeadRequest->FirstName = 'test';
$addNewLeadRequest->LastName = 'test2';
$addNewLeadRequest->emailAddress = 'test@test.com';
$addNewLeadRequest->MainPhone = '555-555-5555';
$addNewLeadRequest->CompanyName = 'testtest';
$addNewLeadRequest->Interest = 'testtesttest';
$addNewLeadRequest->RequestType = 'test';
$addNewLeadRequest->RequestDetails = 'testtesttest';
$addNewLeadResponse = $client->ADDNEWLEAD($addNewLeadRequest);