hash_hmac 签名


<?php /** * =========================================================== * Model_Base * Description * Model_Base * @Author wzhu.email@gmail.com * @Version 1.0 * @Copyright Zhuweiwei * Copyright © 2008-2012 * China. All Rights Reserved. * =========================================================== */ namespace Action; use ZW\Utility as Utility; use ZW\Http\Client as HttpClient; class Expo { CONST URL_BASE = 'https://api.webexpotec.cn'; CONST URL_EVENT = '/v1/event'; //登录
    CONST URL_AUTH_SIGNIN = '/v1/auth/signin'; //获取验证码和验证验证码
    CONST URL_AUTH_VCODE = '/v1/auth/vcode'; //下订单
    CONST URL_ORDER = '/v1/order'; //生成凭证
    CONST URL_ADMISSION = '/v1/admission'; //查询用户是否已经有凭证
    CONST URL_ADMISSION_LISTING = '/v1/admission/listing'; //二维码
    CONST URL_QR = '/v1/qr'; //问卷调查
    CONST URL_QURESTION = '/v1/question/listing'; //提交问题
    CONST URL_SURVEY = '/v1/survey/submit'; //lifecbd 接口路径
    CONST URL_ARTICLE           = '/v1/article'; /* protected $app_key = '1467721313'; protected $app_secret = '21e122dba62dcd9aed1488aced61f2c2'; protected $eventid = '1440860341';// protected $ticketid = '1463800736';//票务ID*/

    protected $app_key    = '1467721309'; protected $app_secret = '567aa793d2cfb865eec8623dc7b9de92'; protected $eventid    = '1440860340';//活动id
    protected $ticketid   = '000000';//票务ID--随便写


    protected $app_ver = '1.0.0'; protected $app_uuid = 'ABCDEFG'; protected $sig_method = 'HMAC-SHA1'; protected $il8n_lang = 'zh-cn'; public function decodeQrcode($string) { $arrParam = array( 'string' => $string, ); return $this->get(self::URL_QR, $arrParam); } public function getSignin($arrParam = array()) { $arrParam = array( 'username'    => '13436919765',
            'password'    => '919765',
            'countrycode' => 'CN', ); return $this->get(self::URL_AUTH_SIGNIN, $arrParam); } //登录
    public function getEventListing(array $arrParam = array(), $start = 0, $num = 100, $scope = 0) { $arrParam['start'] = (int)$start; $arrParam['num']   = (int)$num; $arrParam['scope'] = $scope; $url               = sprintf('%s/listing', self::URL_EVENT); return $this->get($url, $arrParam); } //获取活动内容
    public function getEvent($eventId, $scopes = 1) { $url      = sprintf('%s/%d', self::URL_EVENT, $eventId); $arrParam = array( 'id'     => (int)$eventId,
            'scopes' => (int)$scopes, ); return $this->get($url, $arrParam); } //获取验证码
    public function getAuthVcode($username, $type = 4, $countryCode = 'CN') { $arrParam = array( 'username'    => $username,
            'countrycode' => $countryCode,
            'type'        => $type, ); return $this->get(self::URL_AUTH_VCODE, $arrParam); } /** *读取列表数据 */
    public function getArticleList($channel, $start = 0, $num = 20, $type = 0){ $arrParam = array( 'channel'    => $channel,
            'type'       => $type,
            'start'      => $start,
            'num'        => $num, ); $url = sprintf('%s/listing', self::URL_ARTICLE); return $this->get($url, $arrParam); } /**读取文章数据 * @param $articleId 文章id */
    public function getArticle($articleId){ $url = sprintf('%s/%d', self::URL_ARTICLE, $articleId); return $this->get($url, array()); } //校验验证码
    public function chkAuthVcode($username, $vcode = '', $type = 0, $countryCode = 'CN') { if (empty($vcode)) { $vcode = "abcdfg"; } $arrParam = array( 'username'    => $username,
            'countrycode' => $countryCode,
            'type'        => $type,
            'vcode'       => $vcode, ); return $this->post(self::URL_AUTH_VCODE, $arrParam); } //提交注册表单
    public function orderForm($arr) { $goods    = [ 'id'  => $arr['id'],
            'num' => $arr['num'], ]; $goods    = '[' . json_encode($goods) . ']'; $arrParam = array( 'type'        => $arr['type'],
            'goods'       => $goods,
            'realname'    => $arr['realname'],
            'cellphone'   => $arr['cellphone'],
            'email'       => $arr['email'],
            'corp'        => $arr['corp'],
            'title'       => $arr['title'],
            'address'     => $arr['address'],
            'countrycode' => $arr['countrycode'],
            'adminmemo'   => $arr['adminmemo'],
            'promocode'   => $arr['promocode'], ); return $this->post(self::URL_ORDER, $arrParam); } //检查订单状态
    public function chkOrder($orderid) { $arrParam = array( 'orderid' => $orderid, ); return $this->get(self::URL_ORDER . "/" . $orderid, $arrParam); } //注册凭证
    public function registerAdmission($ticketnoid, $arr) { $arrParam = array( 'ticketno'    => $ticketnoid,
            'realname'    => $arr['realname'],
            'cellphone'   => $arr['cellphone'],
            'email'       => $arr['email'],
            'corp'        => $arr['corp'],
            'title'       => $arr['title'],
            'countrycode' => 'CN',
            'extdata'     => $arr['adminmemo'], ); return $this->post(self::URL_ADMISSION, $arrParam); } public function getUserAdmissionList($arrParam) { $arrParam['eventid']  = $this->eventid; $arrParam['ticketid'] = $this->ticketid; return $this->get(self::URL_ADMISSION_LISTING, $arrParam); } //获取问题列表
    public function getQuestionList($token, $suveryid) { $arrParam = array('surveyid' => (int)$suveryid,
                          'token'    => $token,); return $this->get(self::URL_QURESTION, $arrParam); } //提交问题列表
    public function submitSuvery($id, $answers) { return $this->post(self::URL_SURVEY . '/' . $id, $answers); } ////////////////////////////////////////////////////////////////////////// //stdClass Object转array 
    public function objectArray($array) { if (is_object($array)) { $array = (array)$array; } else if (is_array($array)) { foreach ($array as $key => $value) { $array[$key] = $this->objectArray($value); } } return $array; } //get组装curl字符串
    protected function urlGetstr($url, $arrParam) { $url = $url . "?" . $this->arrayTostr($arrParam); return $url; } //curl调用接口
    protected function httpCurlExce($url, $arrParam = array(), $method) { //如果是get提交需要组装url,post的则不需要
        if ($method == 'get') { $url = $this->urlGetstr($url, $arrParam); } //echo $url; //curl发送
        $curl = curl_init(); //设置抓取的url
        curl_setopt($curl, CURLOPT_URL, $url); //设置头文件的信息作为数据流输出
        curl_setopt($curl, CURLOPT_HEADER, 1); //设置获取的信息以文件流的形式返回,而不是直接输出。
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //绕过ssl验证 //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //在尝试连接时等待的秒数
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 90); //最大执行时间
        curl_setopt($curl, CURLOPT_TIMEOUT, 90); if ($method == 'post') { //设置post方式提交
            curl_setopt($curl, CURLOPT_POST, 1); //设置post数据
            curl_setopt($curl, CURLOPT_POSTFIELDS, $arrParam); } //执行命令
        $data = curl_exec($curl); //处理头信息 // 获得响应结果里的:头大小
        $headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE); // 根据头大小去获取头信息内容
        $ret = substr($data, $headerSize); //关闭URL请求
        curl_close($curl); //stdClass Object转array
        $ret = json_decode($ret); $ret = $this->objectArray($ret); //echo "<pre>"; //print_r($data);
        return $ret; } //签名算法
    protected function getSignature($str, $key) { $signature = ""; if (function_exists('hash_hmac')) { //$signature = bin2hex(hash_hmac("sha1", $str, $key, true));
            $signature = hash_hmac("sha1", $str, $key, true); } else { $blocksize = 64; $hashfunc  = 'sha1'; if (strlen($key) > $blocksize) { $key = pack('H*', $hashfunc($key)); } $key  = str_pad($key, $blocksize, chr(0x00)); $ipad = str_repeat(chr(0x36), $blocksize); $opad = str_repeat(chr(0x5c), $blocksize); $hmac = pack( 'H*', $hashfunc( ($key ^ $opad) . pack( 'H*', $hashfunc( ($key ^ $ipad) . $str ) ) ) ); //$signature = bin2hex($hmac);
            $signature = $hmac; } return $signature; } //base64UrlEncode
    protected function base64UrlEncode($str) { $search  = array('+', '/', '='); $replace = array('*', '-', ''); $basestr = base64_encode($str); return str_replace($search, $replace, $basestr); } /** * 将数组中的值,按照键值排序,之后将每个元素拼接成url样式 * @param $arrParam:数组 * @return $str : 拼接的url地址 */
    protected function arrayTostr($arrParam) { $i   = $arr_num = 0; $str = ""; ksort($arrParam, SORT_NATURAL); $arr_num = count($arrParam); foreach ($arrParam as $key => $val) { $i++; if ($i < $arr_num) { $str .= $key . '=' . urlencode($val) . '&'; } else { $str .= $key . '=' . urlencode($val); } } return $str; } protected function buildSignature($arrParam) { $str       = $this->arrayTostr($arrParam);//url地址拼接
        $signature = $this->getSignature($str, $this->app_secret);//hash_hmac 签名
        $signature = $this->base64UrlEncode($signature);//base64加密
        return $signature; } protected function getRandStr() { $str = ''; for ($i = 1; $i <= 10; $i++) { $str .= chr(rand(65, 90)); } return $str; } protected function adaptSysParam(array $arrParam) { $arrParam['app_key']    = $this->app_key; $arrParam['timestamp']  = NOW_TIME; $arrParam['sig_method'] = $this->sig_method; $arrParam['app_uuid']   = $this->app_uuid; $arrParam['app_ver']    = '1.0.0'; $arrParam['il8n_lang']  = $this->il8n_lang; $arrParam['req_uuid']   = $this->getRandStr(); $arrParam['signature']  = $this->buildSignature($arrParam); return $arrParam; } /** * @param :$url url地址 * @param :adaptSysParam 组合需要的传参,最后生成签名:签名方法:将数组组成url参数,生成hmac签名,base64加密 * @param :httpCurlExce curl获取接口内容 */
    protected function get($url, array $arrParam) { $arrParam = $this->adaptSysParam($arrParam); $arr      = $this->httpCurlExce(self::URL_BASE . $url, $arrParam, 'get'); return $arr; } protected function post($url, array $arrParam) { $arrParam = $this->adaptSysParam($arrParam); $arr      = $this->httpCurlExce(self::URL_BASE . $url, $arrParam, 'post'); return $arr; } }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM