首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要将xml字符串发送到第三方api,使用重力表单

需要将xml字符串发送到第三方api,使用重力表单
EN

Stack Overflow用户
提问于 2014-02-20 02:50:14
回答 1查看 1.7K关注 0票数 0

我需要有一个gform提交后,作为xmldata第三方api。

数据需要发布到的Url:

https://www.3rdparty.com/api/lead/insertRecord?apiauthkey=yourapikey&secretkey=yoursecretkey&xmlData=yourxmldata

所需的XML格式:

代码语言:javascript
复制
<crcloud>
  <lead>
    <type>Client</type>
    <firstname>Scott</firstname>
    <lastname>James</lastname>
    <client_assigned_to>Bill Smith</client_assigned_to>
  </lead>
</crcloud>

我写了一个curl函数,但我在发布时收到一个解析错误。我已经验证了xml,它是正确的。我还可以将打印出来的xml数据直接粘贴到我的url后面,并获得我想要的结果。

代码语言:javascript
复制
<?php

add_action("gform_after_submission", "set_post_content", 10, 2);
function set_post_content($entry, $form){

function post_to_url($url, $post) {
$fields = '';
foreach($post as $key => $value) {
$fields .= $key . '=' . $value . '&';
}
rtrim($fields, '&');

$url = 'https://www.3rdparty.com/api/lead/insertRecord?apiauthkey=yourapikey&secretkey=yoursecretkey&xmlData=yourxmldata';

$post = curl_init();

curl_setopt($post, CURLOPT_URL, $url);
curl_setopt($post, CURLOPT_POST, count($data));
curl_setopt($post, CURLOPT_POSTFIELDS, $fields);
curl_setopt($post, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($post, CURLOPT_SSL_VERIFYPEER, 0);

$result = curl_exec($post);
echo $post; //Resource id #*** currently
echo $result; //False 4404 XML parsing error currently
curl_close($post);
}

if($form["id"] == 2){//sign up now

$data = array(
"type" =>     $entry["31"],      
"firstname" =>     $entry["3"], 
"lastname" =>     $entry["4"], 
"client_assigned_to" =>     $entry["34"]);       

$xml = new SimpleXMLElement('<crcloud/>');
$lead = $xml->addchild('lead');
$data = array_flip($data);
array_walk_recursive($data, array ($xml, 'addChild'));

print $xml->asXML();

post_to_url($url, $xml);

}
}
?>
EN

回答 1

Stack Overflow用户

发布于 2014-02-20 03:01:17

同时添加这个curl标头,让服务器知道您正在向他们发送xml

代码语言:javascript
复制
curl_setopt($post, CURLOPT_HTTPHEADER, 
    array('Content-Type: application/xml')
);

在任何情况下,如果您没有发送XML数据(在您的示例中,我没有看到您发送xml)。这就是它:

代码语言:javascript
复制
$post_data = "<crcloud>
  <lead>
    <type>$client</type>
    <firstname>$user</firstname>
    <lastname>$name</lastname>
    <client_assigned_to>$assigned</client_assigned_to>
  </lead>
</crcloud>";

curl_setopt($post, CURLOPT_POSTFIELDS, $post_data);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21889631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档