侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

微信开发之获取JSAPI TICKET

微信(小程序)  /  管理员 发布于 3年前   412

一、获取流程

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

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

您可能感兴趣的文章:

  • 微信封装的调用微信签名包的类库
  • 微信JSAPI支付操作需要注意的细节
  • 微信支付java版本之JSAPI支付+发送模板消息
  • 微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
  • Java通过JsApi方式实现微信支付
  • 微信JSAPI Ticket接口签名详解


  • 上一条:
    vue实现图片上传预览功能
    下一条:
    微信小程序静默登录的实现代码
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 2023年9月1日起:微信小程序必须备案才能上线运营(0个评论)
    • 腾讯官方客服回应了:微信好友上限约10000个!(0个评论)
    • 2023年做微信小程序的老铁注意:新增收费项、微信小程序获取手机号也收费了(0个评论)
    • 小程序开发之跳转微信直播示例api(0个评论)
    • 在uni_app中开发小程序之常用功能示例代码汇总(0个评论)
    • 近期文章
    • 在Nuxt3中如何减少import model声明及初始化加载models快速开发秘诀(0个评论)
    • 适用于 Laravel 的表单请求测试程序包(0个评论)
    • Laravel 10.25版本发布(0个评论)
    • 在go语言中实现生成文件的校验和功能代码示例(0个评论)
    • Laravel 11版本抢先看,看将有什么新功能发布(0个评论)
    • goose数据库迁移工具介绍及使用流程步骤(0个评论)
    • 中国程序员“翻墙”为海外软件公司打工,105.8万工资被罚没!转知乎(0个评论)
    • 在go语言gin框架中使用Sharding(Gorm分表中间件)实现分表流程步骤(0个评论)
    • 在PHP提高性能方式之开启OPCache扩展及OPCache配置参数详解(0个评论)
    • 在js的websocket客户端开发中遇到代码割裂情况解决方案(0个评论)
    • 近期评论
    • 路人 在

      php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..
    • 博主 在

      科学上网翻墙之v2rayN-Core客户端免费公益节点使用教程中评论 @ mashrdn 多切换几个节点测试,免费ssr是没那么稳..
    • mashrdn 在

      科学上网翻墙之v2rayN-Core客户端免费公益节点使用教程中评论 V2rayn免费节点添加上去了,youtobe无法打开网页,是怎么回事..
    • 张伟 在

      科学上网翻墙之v2rayN-Core客户端免费公益节点使用教程中评论 3q!有用,不过免费节点隔天就要去git上复制新的导进去..
    • 博主 在

      科学上网翻墙访问Google , 上外网神器佛跳墙VPN(永久免费)使用流程步骤中评论 该篇教程已不能用了,告知大家,免的老有老铁问我!..
    • 2016-10
    • 2017-10
    • 2018-01
    • 2020-03
    • 2021-06
    • 2021-10
    • 2022-03
    • 2023-02
    • 2023-06
    • 2023-07
    • 2023-08
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客