php curl xml传输和转换
2024-08-29 21:18:23
<?php /**
* API
* User: sgfoot
* Date: 2017/3/20
* Time: 18:05
*/
class apiCurl
{
private $config = array(
'key' => '7D86A79BA5C4C278E5264D5E910B3A64',
);
public function execute($url, $params)
{
$baseParams = $this->getParams();
$apiPrams = array_merge($baseParams, $params);
$apiPrams['sign'] = $this->getSign($apiPrams);
$xml = $this->arrayToXml($apiPrams);
$xml_result = Cpost($url, $xml);
$result = $this->xmlToArray($xml_result);
return $result;
} /**
* 获取基础参数
* @author: wzl
* @date: 2017
* @return array
*/
protected function getParams()
{
$params = array(
'nonce_str' => $this->getNonce(),
'sign_type' => 'MD5',
);
return $params;
} /**
* 作用:生成签名
*/
protected function getSign($Obj)
{
foreach ($Obj as $k => $v) {
$Parameters[$k] = $v;
}
//签名步骤一:按字典序排序参数
ksort($Parameters);
$String = $this->formatBizQueryParaMap($Parameters, false);
//echo '【string1】'.$String.'</br>';
//签名步骤二:在string后加入KEY
$String = $String . "&key=" . $this->config['key'];
//echo "【string2】".$String."</br>";
//签名步骤三:MD5加密
$String = md5($String);
//echo "【string3】 ".$String."</br>";
//签名步骤四:所有字符转为大写
$result_ = strtoupper($String);
//echo "【result】 ".$result_."</br>";
return $result_;
} /**
* 作用:格式化参数,签名过程需要使用
*/
protected function formatBizQueryParaMap($paraMap, $urlencode)
{
$buff = "";
ksort($paraMap);
foreach ($paraMap as $k => $v) {
if ($urlencode) {
$v = urlencode($v);
}
$buff .= $k . "=" . $v . "&";
}
$reqPar = '';
if (strlen($buff) > 0) {
$reqPar = substr($buff, 0, strlen($buff) - 1);
}
return $reqPar;
}
/**
* 作用:将xml转为array
*/
protected function xmlToArray($xml)
{
//将XML转为array
$array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $array_data;
}
/**
* 作用:array转xml
*/
protected function arrayToXml($arr)
{
$xml = "<xml>";
foreach ($arr as $key=>$val)
{
if (is_numeric($val))
{
$xml.="<".$key.">".$val."</".$key.">"; }
else
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
}
$xml.="</xml>";
return $xml;
}
}
最新文章
- Lambda
- PHP 字符串的隐式转换规则以及针对包含字母的字符串的递增/递减操作
- android service 学习
- common
- oracle pde文件导入
- java Spring使用配置文件读取jdbc.properties
- VS 2015 update2 装xamarin后,编辑axml文件无智能提示的解决方法。
- .NET获取英文月份缩写名(可获取其他国家)
- HDU4514(非连通图的环判断与图中最长链)
- Linux 学习之网络故障排查
- AJAX 中JSON 和JSONP 的区别 以及请求原理
- 使用Gradle发布SNAPSHOT版本到JCenter(oss.jfrog.org)
- linux_批量关闭进程
- BATJ等大厂最全经典面试题分享
- 从零开始学习VoltDB
- 修改BUG心得
- [POJ1741]Tree(点分治)
- Java基于Tomcat Https keytool 自签证书
- NOIP2017结束了
- EXCEL vlookup和small 综合运用