PHP实现POST请求API接口并传递XML参数方法
在开发网站时,有时需要使用API接口来获取数据。请求API接口时,一般有二种方法:一种是GET请求,一种是POST请求。
大多数API接口只需要传入JSON参数就可以了,但有些接口需要传入XML参数。这对于一些新手就有一定难度了。下面学做网站论坛介绍一下PHP实现POST请求API接口并传递XML参数方法。(如果是wordpress网站,可以直接使用wp_remote_post来请求)
具体代码如下:
<?php
//XML参数
$data = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.gUnit_marry_mzb_webservice.topsuntech.com">
<soapenv:Header>
<AuthenticationToken>
<Username>marry</Username>
<Password>123456</Password>
</AuthenticationToken>
</soapenv:Header>
<soapenv:Body>
<ser:GetMarryInfo>
<ser:in0>123456</ser:in0>
<ser:in1></ser:in1>
<ser:in2></ser:in2>
<ser:in3></ser:in3>
</ser:GetMarryInfo>
</soapenv:Body>
</soapenv:Envelope>';
//接口地址
$api ='http://10.161.166.164:61001/baseifsys/thirdparty/restful/send?_servicecode=20220606174225';
$curl = curl_init();//初始化一个cURL会话(curl 就是模拟浏览器请求)
curl_setopt($curl, CURLOPT_URL, $api);//设置一个cURL传输选项。连接接口
//curl_setopt($curl, CURLOPT_HEADER, 1);// 设置header
//curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)');
curl_setopt($curl, CURLOPT_POST, 1);//启用时会发送一个常规的POST请求
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);//要发送的数据,这是传给BODY
//忽略证书
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
//CURL发送头部信息 一定要是Content-Type: text/xml;
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/xml;charset=UTF-8', 'Content-Length: ' . strlen($data)));
//curl_setopt($curl, CURLOPT_HEADER, 0);//忽略header头信息
curl_setopt($curl, CURLOPT_TIMEOUT, 0);//设置超时时间
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
$content_obj = curl_exec($curl);// 运行cURL,请求网页
curl_close($curl);// 关闭URL请求
print_r($content_obj);
?>
通过上面的代码就可以通过POST将XML参数传给API接口来请求数据了。
也可以直接传递JSON格式的数据,不需要转成数组。
$data = '{
"serviceID": "S10-00000020",
"senderID": "C10-00000011",
"serviceDescript": {
"data": {},
"serviceName": "{"accessId":"Sw1cnAhZ","accessKey":"ab6af3d50db74cbea478edd103c719bb","jtglywdxsfzmhm":"'.$_POST['shengfenzheng'].'"}",
"serviceMethod": "get"
}
}';
这时headers的信息要修改成'Content-Type' => 'application/json'才可以。