ThinkPHP3.2微信JSSDK签名配置config信息

2023-11-10

ThinkPHP3.2  controller代码

/*
 *
 * 微信jssdk踩坑记:
 * 必须在服务器部署才有用
 * 1.配置js接口安全域名不要加http://等(大坑)
 * 2.用appid和appsecret发起请求换取access_token并将其全局缓存
 * 3.用换取到的access_token发起请求换取ticket
 * 4.签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。
 * 5.将wxConfig(配置信息)返回
 *
 * */
//显示首页
public function index(){
    $wxConfig=$this->wxconfig(); //调用生成签名方法:返回配置信息
    $this->assign('wxConfig',$wxConfig);
    $this->display('index');
}


//签名算法并将配置信息返回
public function wxconfig(){
    $appid=C("appid"); //获取config中的appid
    $appsecret=C("appsecret");  //获取config中的appsecret
    //如果session中不存在token则发起请求,如果存在则获取session中的token
    if(!session("?token")){
        //拼接获取access_token请求路径
        $access_token_url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
        //发起请求,并将返回的json对象转为数组
        $access_token_result=json_decode($this->https_request($access_token_url),ture);
        session('token',$access_token_result['access_token']);//全局缓存token
    }
    $token=session('token');
    //如果session中不存在ticket则发起请求,如果存在则获取session中的ticket
    if(!session("?ticket")){
        //拼接获取jsapi_ticket请求路径
        $jsapi_ticket_url="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=$token&type=jsapi";
        //发起请求,并将返回的json对象转为数组
        $jsapi_ticket_result=json_decode($this->https_request($jsapi_ticket_url),true);
        session('ticket',$jsapi_ticket_result['ticket']); //全局缓存ticket
    }
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
    $currentUrl = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";//当前url
    $jsapi_ticket=session('ticket');  //jsapi_ticket
    $time=time();  //当前时间戳
    $randomStr=$this->createNonceStr();  //随机16位字符串
    //按照ASCII 码从小到大排序拼接
    $string = "jsapi_ticket=$jsapi_ticket&noncestr=$randomStr&timestamp=$time&url=$currentUrl";
    //对string进行sha1签名
    $signature = sha1($string);
    //wxjssdk配置信息
    $wxConfig=array(
        'appid'      =>  $appid,
        'timestamp'  =>  $time,
        'nonceStr'   =>  $randomStr,
        'signature'  =>  $signature,
    );
    return $wxConfig;
}
//生成16位随机字符串
public function createNonceStr($length = 16) {
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    $str = "";
    for ($i = 0; $i < $length; $i++) {
        $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    }
    return $str;
}
//自定义函数,访问url返回结果
public function https_request($url){
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl,  CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($curl);
    if (curl_errno($curl)){
        return 'ERROR'.curl_error($curl);
    }
    curl_close($curl);
    return $data;
}

 

config代码:

//微信公众号配置项

'appid'=>'APPID', //将此处appid改为正式公众号appid

'appsecret'=>'APPSECRET', //将此处appsecret改为正式公众号appsecret

html代码:(通过config接口注入权限验证配置)

wx.config({

debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。

appId: "{$wxConfig['appid']}", // 必填,公众号的唯一标识

timestamp: "{$wxConfig['timestamp']}", // 必填,生成签名的时间戳

nonceStr: "{$wxConfig['nonceStr']}", // 必填,生成签名的随机串

signature: "{$wxConfig['signature']}",// 必填,签名

jsApiList: [



] // 必填,需要使用的JS接口列表

});

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ThinkPHP3.2微信JSSDK签名配置config信息 的相关文章

  • 吴恩达深度学习笔记五:卷积神经网络 人脸识别和风格迁移部分

    1 人脸识别 人脸验证 Face Verification 输入图片和模板图片是否为同一人 一对一问题 人脸识别 Face Recognition 输入图片 检测是否为多个模板图片中的一个 一对多问题 一般来说 人脸验证由于范围较小难度较小
  • MyBatis实现乐观锁和悲观锁

    使用mysql做数据库 mybatis做orm的系统中 mybatis的乐观锁和悲观锁实际上就是mysql的乐观锁和悲观锁 实例中使用springboot整合mybatis 一并记录了 添加依赖
  • 【数据压缩】LZW编解码原理及算法实现

    一 LZW简介 LZW压缩 LZW compression 是一种由Abraham Lempel Jacob Ziv和Terry Welch发明的基于表查寻算法把文件压缩成小文件的无损压缩方法 LZW算法又叫 串表压缩算法 就是通过建立一个
  • 计算机毕业论文选题 - 毕设选题推荐

    文章目录 0 前言 1 java web 管理系统 毕设选题 2 java web 平台 业务系统 毕设选题 3 游戏设计 动画设计类 毕设选题 适合数媒的同学 4 算法开发 5 数据挖掘 毕设选题 6 大数据处理 云计算 区块链 毕设选题
  • npm 常用的命令

    目录 npm是什么 npm install 安装模块 npm uninstall 卸载模块 npm update 更新模块 npm outdated 检测模块是否过时 npm ls 查看安装的模块 npm init 初始化package j
  • Ubuntu +ros 的node的详解

    1 rosrun turtlesim turtlesim node 启用一个新的节点 2 rosnode list 就会发现一个新的节点 3 rosnode info turtlesim 查看节点的相关信息 4 就会看到发布者 以及相应的主
  • 原生js本地存储?看这一篇就够了!!!

    JS cookie 1 概述 cookie也叫HTTP Cookie 最初是客户端与服务器端进行会话 Session 使用的 如果没写expires 那么下次打开网页 cookie就会消失 这个就是会话机制 2 格式 name value
  • C++中基类和派生类之间的转换实例

    本文实例讲解了C 中基类和派生类之间的转换 对于深入理解C 面向对象程序设计有一定的帮助作用 此处需要注意 本文实例讲解内容的前提是派生类继承基类的方式是公有继承 关键字public 具体分析如下 以下程序为讲解示例 1 2 3 4 5 6
  • OSG学习笔记22——设置物体透明,再恢复

    设置物体透明 trans是透明度的设置 这里如果没有setRenderingHint 虽然看起来是透明的 但模型还是会遮挡其他模型 然后就是BLEND要打开 光照和深度测试要关掉 模型的材质也要事先设置 并将材质保存起来以便恢复的时候调用
  • 虚拟机磁盘挂载和扩容

    磁盘挂载 查看磁盘状态 lsblk 格式化磁盘 主意上一步查看的磁盘格式 下面以ext4为例 mkfs ext4 dev vdb 挂载磁盘 mount dev vdb root 修改文件 vi etc fstab 在最后一行加上 dev v
  • 命令行发送UDP

    https www cnblogs com Dennis mi articles 6866762 html 如果往本地UDP端口發送數據 那麼可以使用以下命令 echo hello gt dev udp 192 168 1 81 5060
  • linux 7 虚拟机安装,CentOS 7上使用virt-manager安装虚拟机

    KVM Kernel based Virtual Machine 是基于x86架构上Linux操作系统的全虚拟化解决方案 在CentOS7中 KVM已经被集成到内核中 相当于使用内核来做虚拟机管理程序 由于KVM本身就工作内核环境中 所以执
  • arthas常用命令整理

    官网链接 Arthas Install Arthas 3 5 4 文档Arthas Install Arthas 3 5 4 文档 今天是1024程序员节 昨天研究了下arthas整理一下笔记 常用命令 watch watch Arthas

随机推荐

  • 上传jar包到nexus私有仓库

    通常在项目开发过程中 免不了需要上传公共组件包到nexus私有仓库 尽管前期有专人来搭建nexus私有仓库并上传好公共组件包 但后期免不了会自研一些组件包要自己上传 本篇文章就针对命令上传jar包到nexus私服仓库中心做个简单记录 便于后
  • 写需求套路/组件使用套路

    写需求套路 1 html css 2 数据铺设 数据绑定 数据微调 3 js交互 gt 事件 正则 组件使用套路 1 找组件 引组件 2 用组件 标签和js复制 读 删 改
  • python实现opencv学习四:numpy操作数组输出图片

    读取一张图片 并将像素取反 代码 coding GBK import cv2 as cv def access pixles image print image shape height image shape 0 width image
  • 处理el-table大数据卡顿的问题,包含tree型数据格式

    文章目录 概要 技术细节 小结 概要 如果你有更丰富的表格需求 可以查看我另一篇文章 关于vxe table的使用心得及扩展 1 现象 有时候el table的数据可能有成千上万条 而且又要在一页显示完 这时候页面渲染的dom太多了 可能会
  • Java如何保证集合是线程安全的?(代码实践抛砖引玉)

    在Java中绝大部分的集合像什么ArrayList HashMap等绝大部分不是线程安全的 仅有的线程安全的实现 像HashTable Vector等在性能上又不好 但是不要怕啊 我们大Java还有并发包 Java util concurr
  • (汇编:20H~7FH 单元数据清0)

    函数功能 20H 7FH 单元数据清0 ORG 000H 从000H单元开始 MOV A 02H 把1赋值给寄存器A MOV R1 20H 清零数据首地址为20H MOV R2 60H 需要置1的次数 LOOP MOV R1 A 采用间接寻
  • 【postgres】备份还原数据库

    备注 数据库密码都是一个 su postgres 导出数据库 pg dump p 15432 数据库名 gt 备份名 sql 创建数据库 su root psql p 15432 U postgres W 注意一定要加 号 create d
  • eclipse生成webservice客户端代码以及通过客户端访问服务端

    最近工作中需要用到webservice调用其他服务 没接触过这个 研究了几天 做个记录 1 eclipse生成webservice客户端 打开eclipse File gt gt New gt gt Other 2 Web Services
  • MySQL 复制数据到另外一张表(新建空表、已建空表)

    一 仅复制表结构到新建表 说明 example new为新创建表 example old为旧表 操作完成后仅把旧表结构复制到新建表 create table example new like example old 二 复制结构与数据到新建
  • 翁凯c语言作业10-1

    include
  • 搭建一个简单的https服务

    为了测试ab工具压测https接口 简单搭了一下https 记录一下过程 环境准备 在docker中建了3个容器 A 证书颁发 CA B 服务端 C 客户端 docker run d name ca centos centos7 bin b
  • mac解决mysql忘记密码的问题(亲测有效)

    打开终端依次执行如下命令 第一步 进入mysql服务 sudo usr local mysql support files mysql server stop 第一步 进入mysql的bin目录 cd usr local mysql bin
  • nginx多级代理

    文章目录 一 实验步骤 1 docker config创建3台nginx配置文件 2 集群node节点打标签 3 docker compose编排文件 4 在manager节点创建目录 5 部署服务 6 访问测试 总结 测试环境说明 基于d
  • 解决git:fatal:Unable to create".../.git/index.lock" 的错误

    问题描述 在使用git 进行提交时 出现上面这个报错 导致无法提交 报错大致意思就是创建index lock文件失败 因为已经存在index lock文件了 index lock文件是在 git下面 而 git是一般是隐藏的 那么可以通过以
  • std::enable_shared_from_this消除异步回调引发的野指针问题

    std enable shared from this这个C 组件完美解决了异步回调发生时宿主对象销毁的问题 C 提供了lambda表达式和各种异步函数 std thread std async或者其他框架api都提供了异步回调方法 特别是
  • js实现数组去重、比较两数组得出重复部分

    数组去重的两种方法 1 用新对象来存储 对象的key值为数组元素 var removeDup function old var arr 1 2 3 4 3 4 5 var o for var i 0 i lt arr length i va
  • Android MVC MVP MVVM

    浅谈 MVP in Android MVP模式解析实践 Android DataBinding库 MVVM设计模式
  • 浏览器兼容性测试工具

    相关连接 浏览器兼容性概述 目录 一 浏览器兼容性测试工具 1 0 IETester 免费 exe 1 1 SuperPreview 收费 exe 1 2 Adobe Browserlab 在线测试 1 3 BrowserStack 在线测
  • 从HTTP 2.0想到的关于传输层协议的一些事

    0 HTTP协议的历史我也不知道 1 关于HTTP 2 0收到了订阅的邮件 头版是说HTTP 2 0的内容 我本人不是很关注HTTP这一块儿 但是闲得无聊时也会瞟两眼的 HTTP 2 0的最大改进我觉得有两点 第一 新增了帧层 帧层的好处在
  • ThinkPHP3.2微信JSSDK签名配置config信息

    ThinkPHP3 2 controller代码 微信jssdk踩坑记 必须在服务器部署才有用 1 配置js接口安全域名不要加http 等 大坑 2 用appid和appsecret发起请求换取access token并将其全局缓存 3 用