我有这个表单,我试图用来将数据发布到外部网址。我确实有一些非常基本的使用php curl的知识。到目前为止,如果我使用我编写的代码:
<?php
if ($_POST['request_callback'])
{
$customer_name = cleaninput($_REQUEST['customer_name'],"text");
$debtor_id = cleaninput($_REQUEST['debtor_id'],"number");
$telephone_number = cleaninput($_REQUEST['customer_number'],"number");
if ($_POST['callme_now'] == '1') {
$callback_time = date('y-m-d ' . $_POST['hour_select'] . ':' . $_POST['minute_select'] . ':s');
} else {
$callback_time = date('y-m-d H:i:s');
}
// Send using CURL
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, "http://www.myjoomla.eo/test.php"); // URL to post
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, "Name=$customer_name&Debtor_ID=$debtor_id&Telephone_Number=$telephone_number&CallBack_Time=$callback_time");
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
$result = curl_exec( $ch ); // runs the post
curl_close($ch);
echo "Reply Response: " . $result; // echo reply response
}
?>
到目前为止,它会发布到文件并显示结果。现在,如何格式化已发布为xml格式的数据?理想情况下,我试图实现像这样的xml,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<CallRequest>
<ProjectName>Test</ProjectName>
<ContactNumberToDial>07843088348</ContactNumberToDial>
<DateTimeToDial></DateTimeToDial>
<ListSource>WebLead</ListSource>
<AgentName></AgentName>
<AddToList>False</AddToList>
<SpecificAgent>False</SpecificAgent>
<DBField>
<FieldName>Name</FieldName>
<FieldValue>Testing</FieldValue>
</DBField>
</CallRequest>
任何人都知道该怎么做?
谢谢,
詹姆斯
答案 0 :(得分:1)
我过去使用的XML库允许您使用PHP创建XML XmlWriter。该库最初编写为与PHP4一起使用。您会发现它的名称与内置PHP5类的名称冲突,因此您需要将类声明和构造函数更改为其他内容。
希望有所帮助!
答案 1 :(得分:0)
我同意jkndrkn - 似乎cURL是正确的,这是test.php输出的问题。 IBM有一篇很棒的文章,关于用PHP check it out here读取/编写/解析XML。
答案 2 :(得分:0)
嗨抱歉花了一些时间回来。一直试图以一些方式解决这个问题。我被告知的是客户端想要将xml字符串发布到给定的URL。在查看示例页面时,他们有3个可能的示例。 SOAP 1.1有一个示例,它显示请求和响应,SOAP 1.2请求和响应的示例,HTTP GET请求和响应示例以及HTTP POST请求和响应示例。
我选择了后者,我觉得这是最容易使用的,我使用的是PHP curl。
HTTP POST示例如下:
请求:
POST /ClickToCall/CallRequest.asmx/Call HTTP/1.1
Host: 194.217.1.2
Content-Type: application/x-www-form-urlencoded
Content-Length: length
xmlString=string
响应:
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">string</string>
当我在网址的测试页面上输入xmlString手册时,我得到了必要的回复。
xmlString如下所示:
<?xml version="1.0" encoding="utf-8"?><CallRequest><ProjectName>Noble Test</ProjectName><ContactNumberToDial>07843088348</ContactNumberToDial><DateTimeToDial>2009-12-10 18:30:53</DateTimeToDial><ListSource>WebLead</ListSource><AgentName></AgentName><AddToList>False</AddToList><SpecificAgent>False</SpecificAgent><DBField><FieldName>Name</FieldName><FieldValue>NobleTesting</FieldValue></DBField></CallRequest>
但是当我使用我的代码时,我根本没有回复。
这是我正在使用的代码:
<?php
if ($_POST['request_callback'])
{
$customer_name = cleaninput($_REQUEST['customer_name'],"text");
$debtor_id = cleaninput($_REQUEST['debtor_id'],"number");
$telephone_number = cleaninput($_REQUEST['customer_number'],"number");
if ($_POST['callme_now'] == '1') {
$callback_time = date('y-m-d ' . $_POST['hour_select'] . ':' . $_POST['minute_select'] . ':s');
} else {
$callback_time = date('y-m-d H:i:s');
}
// XML data as string
$request = '<?xml version="1.0" encoding="utf-8"?>';
$request .= '<CallRequest>';
$request .= '<ProjectName>Nobel Test</ProjectName>';
$request .= '<ContactNumberToDial>' . $telephone_number . '</ContactNumberToDial>';
if (isset($_POST['callme_now'])) {
$request .= '<DateTimeToDial></DateTimeToDial>';
} else {
$request .= '<DateTimeToDial>' . date('Y-m-d ' . $_POST['hour_select'] . ':' . $_POST['minute_select'] . ':s') . '</DateTimeToDial>';
}
$request .= '<ListSource>WebLead</ListSource>';
$request .= '<AgentName></AgentName>';
$request .= '<AddToList>False</AddToList>';
$request .= '<SpecificAgent>False</SpecificAgent>';
$request .= '<DBField>';
$request .= '<FieldName>Customer Name</FieldName>';
$request .= '<FieldValue>' . $customer_name . '</FieldValue>';
$request .= '</DBField>';
$request .= '</CallRequest>';
// Create Headers
$header[] = "Host: www.myjoomla.eo";
$header[] = "Content-type: application/x-www-form-urlencoded";
$header[] = "Content-length: ". strlen($request) . "\r\n";
$header[] = $request;
$loginUsername = "username";
$loginPassword = "password";
// Send using CURL
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, "http://194.217.1.2/ClickToCall/CallRequest.asmx/Call"); // URL to post
curl_setopt($ ch,CURLOPT_USERPWD,“$ loginUsername:$ loginPassword”); //登录 curl_setopt($ ch,CURLOPT_HTTPAUTH,CURLAUTH_ANY);
curl_setopt($ ch,CURLOPT_RETURNTRANSFER,1); //返回变量 curl_setopt($ ch,CURLOPT_POST,1); curl_setopt($ ch,CURLOPT_SSL_VERIFYPEER,0); curl_setopt($ ch,CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($ ch,CURLOPT_POSTFIELDS,$ header);
$ result = curl_exec($ ch); //运行帖子 curl_close($ CH);
echo“回复回复:”。 $结果; //回复回复响应 echo“
”; echo“
"; print_r($header); echo "”;
//返回$ result; }
有没有人看到上述代码?感谢