Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.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 将表单数据发送到SOAP API,can';无法正确获取--soapCall的格式_Php_Arrays_Xml_Soap - Fatal编程技术网

Php 将表单数据发送到SOAP API,can';无法正确获取--soapCall的格式

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

我正在使用php表单将数据发送到CRM以收集数据,并将其放在CRM的正确位置,以通知公司的正确部门。其他人编写了API来收集信息,他们向我提供了SOAP URL。他们向我提供了示例XML,该示例XML在SOAPUI中工作,以返回正确的GUID响应

我编写了PHP代码来收集表单中的数据,并将其放入用于在SOAP API中测试API的相同xml代码中。我很难获得正确的提交代码。我的问题与此处的页面类似:。但是,使用$client->Submit会给我一个错误,说明这不是一个函数。 所以我回到了SOAP1.2规范,并尝试了uuSOAPCall(函数(数组))。 我没有得到任何回应。我已经尝试了一些其他的方法,但这似乎应该奏效

要发送的xml示例:

    <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);