微信开发之获取JSAPI TICKET


Posted in PHP onJuly 07, 2017

一、获取流程

1、获取 access_token

2、通过access_token换取 jsapi_ticket

3、签名算法

签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。

二、具体实现方式

1、获取access_token

/**
 * [getAccessToken description] 获取access_token
 * @return [type] [description] */private function getAccessToken() {
  $data = $this->getFile($this->accessTokenFile);  if(time() - $data['time'] > 0){
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this->appID}&secret={$this->appsecret}";
    $re = $this->httpGet($url);
    $access_token = $re['access_token'];    
    if(isset($access_token)){
      $data['access_token'] = $access_token;
      $data['time'] = time() + 7200;
      $this->setFile($this->accessTokenFile,json_encode($data));
    }
  }else{
    $access_token = $data['access_token'];
  }  return $access_token;
}

access_token 的有效时间是7200s,故可以采用文件存储的方法进行保存,避免多次请求;

2、获取jsapi_ticket

/**
 * [getJsapiTicket description] 获取jsapi_ticket
 * @return [type] [description] */private function getJsapiTicket() {
  $access_token = $this->getAccessToken();
  $jsapi_ticket = $this->getFile($this->jsapiTicketFile);  if(time() - $jsapi_ticket['time'] > 0) {
    $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={$access_token}&type=jsapi";
    $re = $this->httpGet($url);
    $this->preArr($re);
    $jsapi_ticket = $re['ticket'];    
    if(isset($jsapi_ticket)){
      $data['jsapi_ticket'] = $jsapi_ticket;
      $data['time'] = time() + 7200;
      $this->setFile($this->jsapiTicketFile, json_encode($data));
    }
  }else{
    $jsapi_ticket = $jsapi_ticket['jsapi_ticket'];
  }  return $jsapi_ticket;
}

通过access_token进行交换,得到jsapi_ticket,有效期也是7200s;

3、生成签名

/**
 * [getSignpackage description] 获取签名
 * @return [type] [description] */public function getSignpackage(){
  $jsapi_ticket = $this->getJsapiTicket();  // 注意 URL 一定要动态获取,不能 hardcode.
  $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
  $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
  $noncestr = $this->createNonceStr();
  $timestamp = time();

  $string1 = "jsapi_ticket={$jsapi_ticket}&noncestr={$noncestr}×tamp={$timestamp}&url={$url}";
  $signature = sha1($string1);  
  $signPackage = array(    
    'appId'   => $this->appID,    
    'nonceStr' => $noncestr,    
    'timestamp' => $timestamp,    
    'signature' => $signature,
  );  
  return $signPackage;
}

签名算法

使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1:

对string1进行sha1签名,得到signature:

注意事项:

1.签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。

2.签名用的url必须是调用JS接口页面的完整URL。

3.出于安全考虑,开发者必须在服务器端实现签名的逻辑。

 详情参考:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
Oct 09 PHP
PHP中的extract的作用分析
Apr 09 PHP
php一句话cmdshell新型 (非一句话木马)
Apr 18 PHP
php实现监听事件
Nov 06 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
May 08 PHP
php过滤html标记属性类用法实例
Sep 23 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
Oct 15 PHP
PHP中if和or运行效率对比
Dec 12 PHP
Zend Framework框架路由机制代码分析
Mar 22 PHP
php实现表单提交上传文件功能
May 28 PHP
PHP实现字符串大小写转函数的功能实例
Feb 06 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
Dec 03 PHP
Yii2第三方类库插件Imagine的安装和使用
Jul 06 #PHP
一个实用的php验证码类
Jul 06 #PHP
万能的php分页类
Jul 06 #PHP
PHP 实现从数据库导出到.csv文件方法
Jul 06 #PHP
php文件上传类的分享
Jul 06 #PHP
PHP图片水印类的封装
Jul 06 #PHP
php生出随机字符串
Jul 06 #PHP
You might like
咖啡知识大全
2021/03/03 新手入门
php数据库连接
2006/10/09 PHP
php内核解析:PHP中的哈希表
2014/01/30 PHP
js 单引号 传递方法
2009/06/22 Javascript
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
js中使用replace方法完成某个字符的转换
2014/08/20 Javascript
详解JavaScript的表达式与运算符
2015/11/30 Javascript
jQuery页面加载初始化的3种方法(推荐)
2016/06/02 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
2016/06/26 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
利用纯Vue.js构建Bootstrap组件
2016/11/03 Javascript
javaScript中定义类或对象的五种方式总结
2016/12/04 Javascript
DropDownList控件绑定数据源的三种方法
2016/12/24 Javascript
快速掌握jQuery插件开发
2017/01/19 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
2017/02/21 Javascript
原生JS改变透明度实现轮播效果
2017/03/24 Javascript
激动人心的 Angular HttpClient的源码解析
2017/07/10 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
JavaScript中创建原子的方法总结
2018/08/26 Javascript
如何自动化部署项目?折腾服务器之旅~
2019/04/16 Javascript
使用vue自定义指令开发表单验证插件validate.js
2019/05/23 Javascript
深入解析koa之异步回调处理
2019/06/17 Javascript
基于JS实现操作成功之后自动跳转页面
2020/09/25 Javascript
Python使用PIL库实现验证码图片的方法
2016/03/11 Python
python数据清洗系列之字符串处理详解
2017/02/12 Python
解决python "No module named pip" 的问题
2018/10/13 Python
Python中@property的理解和使用示例
2019/06/11 Python
python字符串Intern机制详解
2019/07/01 Python
使用phonegap进行本地存储的实现方法
2017/03/31 HTML / CSS
Black Halo官方网站:购买连衣裙、礼服和连体裤
2018/06/13 全球购物
印度手工编织服装和家居用品商店:Fabindi
2019/10/07 全球购物
人力资源管理专业毕业生推荐信
2013/11/07 职场文书
搬家公司的创业计划书
2014/01/01 职场文书
妇女工作先进事迹
2014/08/17 职场文书
简单租房协议书(范本)
2014/10/13 职场文书