我们正在尝试使用报告API从Five9的服务器访问数据.我们在下面编写了代码,但没有得到任何结果.对我来说,看起来问题是使用Authentication to Five9的服务器.请检查帮助我们了解我们如何定期为特定广告系列提取数据,并将其存储在数据仓库中.
- <?PHP
- $soapUser = "USERNAME"; // username
- $soapPassword = "DEMOPASSWORD"; // password
- $soap_options = array( 'login' => $soapUser,'password' => $soapPassword );
- $auth_details = base64_encode($soapUser.":".$soapPassword);
- $client = new SoapClient("https://api.five9.com/wsadmin/v2/AdminWebService?wsdl",$soap_options);
- $header = new SoapHeader("https://api.five9.com/wsadmin/v2/AdminWebService/getCallLogReport","authentication","Basic $auth_details");
- //echo "Response:\n" . $client->__getLastResponse() . "\n";
- $client->__setSoapHeaders($header);
- $xml_data = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v2="http://service.admin.ws.five9.com/v2/AdminWebService/getCallLogReport">
- <soapenv:Header/>
- <soapenv:Body>
- <v2:getCallLogReport>
- <campaigns>Campaign1</campaigns>
- </v2:getCallLogReport>
- </soapenv:Body>
- </soapenv:Envelope>';
- echo $result = $client->getCallLogReport($xml_data,"https://api.five9.com/wsadmin/v2/AdminWebService?wsdl","https://api.five9.com/wsadmin/v2/AdminWebService/getCallLogReport",0);
- ?>
示例XML
- <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v2="http://service.admin.ws.five9.com/v2/">
- <soapenv:Header/>
- <soapenv:Body>
- <v2:getCallLogReport>
- <!--Optional:-->
- <time>
- <!--Optional:-->
- <end>?</end>
- <!--Optional:-->
- <start>?</start>
- </time>
- <!--Optional:-->
- <criteria>
- <!--Optional:-->
- <ANI>?</ANI>
- <!--Zero or more repetitions:-->
- <agents>?</agents>
- <!--Zero or more repetitions:-->
- <callTypes>?</callTypes>
- <!--Zero or more repetitions:-->
- <campaigns>?</campaigns>
- <!--Optional:-->
- <DNIS>?</DNIS>
- <!--Zero or more repetitions:-->
- <dispositions>?</dispositions>
- <!--Zero or more repetitions:-->
- <lists>?</lists>
- <!--Zero or more repetitions:-->
- <skillGroups>?</skillGroups>
- </criteria>
- </v2:getCallLogReport>
- </soapenv:Body>
- </soapenv:Envelope>
看起来您的问题是您在soap标头中发送base64编码的用户名/密码.它实际上需要包含在http标头中.我的解决方案是ruby,但希望它可以帮助你.
- soap_client = Savon.client(
- endpoint: "https://api.five9.com/wsadmin/AdminWebService/",namespace: "http://service.admin.ws.five9.com/",headers: { "Authorization" => "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" },env_namespace: :soapenv,namespace_identifier: :ser,ssl_verify_mode: :none
- )
- message = {
- "lookupCriteria" => {
- "criteria" => {
- "field" => "email_address","value" => "something@example.com"
- }
- }
- }
- response = soap_client.call(:getContactRecords,message: message)
- p response.body
所以你的XML最终看起来像这样.
- SOAP request: https://api.five9.com/wsadmin/AdminWebService/
- Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==,SOAPAction: "getContactRecords",Content-Type: text/xml;charset=UTF-8,Content-Length: 471
- <?xml version="1.0" encoding="UTF-8"?>
- <soapenv:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ser="http://service.admin.ws.five9.com/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
- <soapenv:Body>
- <ser:getContactRecords>
- <lookupCriteria>
- <criteria>
- <field>email_address</field>
- <value>something@example.com</value>
- </criteria>
- </lookupCriteria>
- </ser:getContactRecords>
- </soapenv:Body>
- </soapenv:Envelope>
- HTTPI POST request to api.five9.com (httpclient)
- SOAP response (status 200)
- <env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
- <env:Header></env:Header>
- <env:Body>
- <ns2:getContactRecordsResponse xmlns:ns2="http://service.admin.ws.five9.com/" xmlns:ns3="http://service.admin.ws.five9.com/v1/">
- <return>
- <fields>number1</fields>
- <fields>email_address</fields>
- <records>
- <values>
- <data>5555555555</data>
- <data>something@example.com</data>
- </values>
- </records>
- </return>
- </ns2:getContactRecordsResponse>
- </env:Body>
- </env:Envelope>