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

hash_hmac 签名的更多相关文章

  1. HMAC-SHA1算法签名及Authorization头认证

    使用PHP进行HMAC-SHA1签名,并通过Authorization头认证Deom $app_id = 'id'; $host = "test.abc.com"; $port = ...

  2. 关于下载SAE日志签名认证的方法——PHP版

    之前需要下载SAE上的日志存入数据库,因此研究了下SAE的签名认证和日志下载.这个链接是SAE官方给出的API文档.https://www.sinacloud.com/doc/api.html#qia ...

  3. PHP生成腾讯云COS请求签名

    目标 使用 PHP 创建 COS 接口所需要的请求签名 步骤 按照官方示例(也许是我笨,我怎么读都觉得官方文档结构费劲,示例细节互相不挨着,容易引起歧义),请求签名应用在需要身份校验的场景,即非公有读 ...

  4. php签名认证

    一.概述 开年第一篇,该篇主要讲述了接口开发中,如何安全认证.如何用php签名认证. 二.说说历史 签名认证是什么?为什么要做签名认证?签名认证哪里会用到?no.no.no.....是不是,是不是,一 ...

  5. PHP HMAC_SHA1 算法 生成算法签名

    HMAC_SHA1(Hashed Message Authentication Code, Secure Hash Algorithm)是一种安全的基于加密hash函数和共享密钥的消息认证协议. 它可 ...

  6. 认证加密算法php hash_hmac和java hmacSha1的问题

    public class Test{ public static void main(String[] args) throws Exception { String postString = &qu ...

  7. 阿里云OSS Web端直传 服务器签名C#版

    最近用到队里OSS的文件上传,然后阿里官方给的四个服务器签名有Java PHP Python Go四个版本,就是没C#(话说写个C#有多难?) 百度了一下好像也没有,既然这样只能自己动手照着Java版 ...

  8. python通过sha1和base64生成签名

    一.python生成时间戳 # 案例 生成时间戳 import time t = time.time() print(t) # 原始时间数据 print(int(t)) # 秒级时间戳 print(i ...

  9. 微信退款通知,退款回调数据解密.SHA256签名AEAD_AES_256_GCM解密

    $xmlResult = file_get_contents("php://input");//获取微信的数据$result = $this->xmlToArray($xml ...

随机推荐

  1. 全面掌握Node命令选项

    全面掌握Node命令选项 译者按:作为Node.js开发者,有必要全面了解一下节点命令的所有选项,这样在关键时刻才能得心应手. 原文:掌握Node.js的CLI和命令行选项 译者:Fundebug 为 ...

  2. PHP 无限极分类下拉列表实现

    1. 递归实现下拉列表 /** * @param 递归 实现下拉列表 分类 */ include('db.inc.php'); function getList($pid = 0,&$resu ...

  3. 使用eclipse初步学习vue.js基础==》v-for的使用 ②

    一.步骤演示 1. 新建一个jsp文件 2. 把vue.js放到Web的js目录下 3. 在jsp中引入vue.js <script src="${pageContext.reques ...

  4. php小程序登录时解密getUserInfo获取openId和unionId等敏感信息

    在获取之前先了解一下openId和unionId openId : 用户在当前小程序的唯一标识 unionId : 如果开发者拥有多个移动应用.网站应用.和公众帐号(包括小程序),可通过unionid ...

  5. 李飞飞确认将离职!谷歌云AI总帅换人,卡耐基·梅隆老教授接棒

    https://mp.weixin.qq.com/s/i1uwZALu1BcOq0jAMvPdBw 看点:李飞飞正式回归斯坦福,新任谷歌云AI总帅还是个教授,不过这次是全职. 智东西9月11日凌晨消息 ...

  6. Spinner的简单使用

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  7. Pycharm基本设置和插件安装

    Pycharm调节主题和字体 调节主题:File - Setting - Editor - Color Scheme - 选择个人喜欢的风格 调节字体大小,感觉默认字体有点小,对我这样的老人家,至少要 ...

  8. 记CSS格式化上下文

    fomatting context 引言 主要讲解的是BFC上下文 本文是查看 史上最全面.最透彻的BFC原理剖析 的笔记 所以不会详解BFC, 只是记录学习心得, 以及重要规则避免原文失效 简介 F ...

  9. go 利用orm简单实现接口分布式锁

    在开发中有些敏感接口,例如用户余额提现接口,需要考虑在并发情况下接口是否会发生问题.如果用户将自己的多条提现请求同时发送到服务器,代码能否扛得住呢?一旦没做锁,那么就真的会给用户多次提现,给公司带来损 ...

  10. Spark之UDF

    package big.data.analyse.udfudaf import org.apache.spark.sql.types.{IntegerType, StringType, StructF ...