<?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;
}
}

最新文章

  1. Lambda
  2. PHP 字符串的隐式转换规则以及针对包含字母的字符串的递增/递减操作
  3. android service 学习
  4. common
  5. oracle pde文件导入
  6. java Spring使用配置文件读取jdbc.properties
  7. VS 2015 update2 装xamarin后,编辑axml文件无智能提示的解决方法。
  8. .NET获取英文月份缩写名(可获取其他国家)
  9. HDU4514(非连通图的环判断与图中最长链)
  10. Linux 学习之网络故障排查
  11. AJAX 中JSON 和JSONP 的区别 以及请求原理
  12. 使用Gradle发布SNAPSHOT版本到JCenter(oss.jfrog.org)
  13. linux_批量关闭进程
  14. BATJ等大厂最全经典面试题分享
  15. 从零开始学习VoltDB
  16. 修改BUG心得
  17. [POJ1741]Tree(点分治)
  18. Java基于Tomcat Https keytool 自签证书
  19. NOIP2017结束了
  20. EXCEL vlookup和small 综合运用

热门文章

  1. nrf开发笔记一开发软件
  2. emacs写cnblog博客
  3. 64位程序调用32DLL解决方案
  4. 包含min函数的栈 【微软面试100题 第二题】
  5. day01_12.字符串
  6. Linux中的more命令
  7. js中的原型哲学思想
  8. Timer和TimerTask详解
  9. 让Android软键盘默认进入英文键盘
  10. node命令行开发