- <?php
- class HelloTop
- {
- static private $instance = null;
- static public function instance()
- {
- if (static::$instance === null)
- static::$instance = new static;
- return static::$instance;
- }
- //不分析错误直接获取数据...
- static function factory(array $arr)
- {
- $top = static::instance();
- return $top->exec($arr)->analyze();
- }
- private $appSecret, $appKey, $url, $paramArr, $jsonData;
- protected function __construct()
- {
- $this->appKey = 'top.app.key';
- $this->appSecret = 'top.app.secret';
- $this->url = false ? 'http://gw.api.tbsandbox.com/router/rest'
- : 'http://gw.api.taobao.com/router/rest';
- $this->paramArr = array(
- 'app_key' => $this->appKey,
- 'format' => 'json',
- 'v' => '2.0',
- 'sign_method'=>'md5',
- 'timestamp' => date('Y-m-d H:i:s')
- );
- }
- //单例重置
- private function reset()
- {
- $this->errno = 0;
- $this->errmsg= null;
- $this->jsonData = null;
- }
- //执行
- public function exec(array $arr)
- {
- $this->reset();
- if (!array_key_exists('method', $arr) || !$arr['method'])
- throw new Exception('没有方法??');
- $paramArr = array_merge($this->paramArr, $arr);
- $sign = $this->createSign($paramArr);
- $strParam = http_build_query($paramArr) . '&sign=' . $sign;
- $url = $this->url . '?' . $strParam;
- $ctx = stream_context_create(array(
- 'http' => array(
- 'timeout' => 5 //设置一个超时时间,单位为秒
- )
- )
- );
- $result = file_get_contents($url, 0, $ctx);
- $json = json_decode(preg_replace("/[\\r\\n]/", '', $result), true); //desc的数据有问题
- $this->jsonData = array_key_exists('rsp', $json) ? $json['rsp'] : $json;
- return $this;
- }
- //获取json数据
- public function data()
- {
- return $this->jsonData;
- }
- private $errno, $errmsg;
- //分析数据,错误返回false,自行使用 errmsg 方法获取错误提示
- public function analyze()
- {
- if (array_key_exists('error_response', $this->jsonData)){
- $this->errno = $this->jsonData['error_response']['code'];
- $this->errmsg= $this->jsonData['error_response']['sub_msg'];
- return false;
- }else{
- return $this->data();
- }
- }
- public function errmsg()
- {
- return $this->errmsg;
- }
- //签名函数
- protected function createSign ($paramArr) {
- $sign = $this->appSecret;
- ksort($paramArr);
- foreach ($paramArr as $key => $val)
- if ($key != '' && $val != '') {
- $sign .= $key.$val;
- }
- $sign .= $this->appSecret;
- $sign = strtoupper(md5($sign));
- return $sign;
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/170620134076.html
来源: http://www.codesnippet.cn/detail/170620134076.html