ThinkPHP5怎么集成JS-SDK实现微信自定义分享功能

jssdk类库

1、文件名及位置

名字:Jssdk.php
位置:extendutilJssdk.php

微信 WeLM 微信 WeLM

WeLM不是一个直接的对话机器人,而是一个补全用户输入信息的生成模型。

微信 WeLM 33 查看详情 微信 WeLM

2、代码

appid . $this->secret);        //定义存储文件路径        // $filename = __DIR__ . '/cache/' . $name . '.php';$filename = '../runtime/temp/' . $name . '.php';        //判断文件是否存在,如果存在,就取出文件中的数据值,如果不存在,就向微信端请求        if (is_file($filename) && filemtime($filename) + 7100 > time()){            $result = include $filename;            //定义需要返回的内容$data            $data = $result['access_token'];        }else{            // https请求方式: GET// https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET            // 调用curl方法完成请求            $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->appid.'&secret=' . $this->secret;            $result = $this->curl($url);            //将返回得到的json数据转成php数组            $result = json_decode($result,true);            //将内容写入文件中            file_put_contents($filename,"");            //定义需要返回的内容            $data = $result['access_token'];        }        //将得到的access_token的值返回        return $data;    }    /**     *     * 获取临时票据方法     *     * @return mixed     */    public function getJsapiTicket(){        //存入文件中,定义文件的名称和路径        $name = 'ticket_' . md5($this->appid . $this->secret);        //定义存储文件路径        //$filename = __DIR__ . '/cache/' . $name . '.php';$filename = '../runtime/temp/' . $name . '.php';        //判断是否存在临时票据的文件,如果存在,就直接取值,如果不存在,就发送请求获取并保存        if (is_file($filename) && filemtime($filename) + 7100 > time()){            $result = include $filename;        }else{            //定义请求地址            $url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.$this                    ->getAccessToken().'&type=jsapi';            //使用curl方法发送请求,获取临时票据            $result = $this->curl($url);            //转换成php数组            $result = json_decode($result,true);            //将获取到的值存入文件中            file_put_contents($filename,"");        }        //定义返回的数据        $data = $result['ticket'];        //将得到的临时票据结果返回        return $data;    }    /**     * 获取签名方法     */    public function sign(){        //需要定义4个参数,分别包括随机数,临时票据,时间戳和当前url地址        $nonceStr = $this->makeStr();        $ticket = $this->getJsapiTicket();        $time = time();        //组合url//$url = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];        $url = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];        //将4个参数放入一个数组中        $arr = [            'noncestr=' . $nonceStr,            'jsapi_ticket=' . $ticket,            'timestamp=' . $time,            'url=' . $url        ];        //对数组进行字段化排序        sort($arr,SORT_STRING);        //对数组进行组合成字符串        $string = implode('&',$arr);        //将字符串加密生成签名        $sign = sha1($string);        //由于调用签名方法的时候不只需要签名,还需要生成签名的时候的随机数,时间戳,所以我们应该返回由这些内容组成的一个数组        $reArr = [            'appId' => $this->appid,            'timestamp' => $time,            'nonceStr' => $nonceStr,            'signature' => $sign,            'url' => $url        ];        //将数组返回        return $reArr;    }    /**     *     * 生成随机数     *     * @return string     */    protected function makeStr(){        //定义字符串组成的种子        $seed = 'www512wayanbao1qasxianrendong5tgblaochaguan8ik9500net';        //通过循环来组成一个16位的随机字符串        //定义一个空字符串 用来接收组合成的字符串内容        $str = '';        for ($i = 0;$i getAccessToken();//echo $data;//测试获取jsapiticket方法//$obj = new Wx();//$data = $obj->getJsapiTicket();//echo $data;//测试生成签名方法//$obj = new Wx();//$data = $obj->sign();//echo '
';//print_r($data);?>

后台控制器处理

where('id',$id)->find();        $catinfo = getCatInfoById($catid);        $p_catname = getCatInfoById($catinfo['parentid'],'catname');$obj = new Jssdk();$data = $obj->sign();        $this->assign('infos',$info);        $this->assign('catids',$catid);        $this->assign('catnames',$catinfo['catname']);        $this->assign('p_catnames',$p_catname);$this->assign('data',$data);        return view('../application/index/view/default/index/' . $modelInfo['show_template']);    }}?>

微信事件响应

// 通过config接口注入权限验证配置wx.config({debug: false, appId: '{$data.appId}',timestamp: '{$data.timestamp}',nonceStr: '{$data.nonceStr}', signature: '{$data.signature}',jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage']});// 通过ready接口处理成功验证wx.ready(function(){// 分享到朋友圈wx.onMenuShareTimeline({title: '{$info.title}',link: '{$data.url}', imgUrl: 'http://m.psnav.com/uploads/image/{$info.thumb}', success: function () {// 用户点击了分享后执行的回调函数}});// 分享给朋友wx.onMenuShareAppMessage({title: '{$info.title}', desc: '{$info.description}', link: '{$data.url}', imgUrl: 'http://m.psnav.com/uploads/image/{$info.thumb}', type: 'link', // 分享类型,music、video或link,不填默认为linkdataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空success: function () {// 用户点击了分享后执行的回调函数}});});

 全部分享接口

// 通过config接口注入权限验证配置wx.config({debug: true, appId: '{$data.appId}',timestamp: '{$data.timestamp}',nonceStr: '{$data.nonceStr}', signature: '{$data.signature}',jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone']});// 通过ready接口处理成功验证wx.ready(function(){// 分享到朋友圈wx.onMenuShareTimeline({title: '{$info.title}',link: '{$data.url}', imgUrl: 'http://m.psnav.com/uploads/image/{$info.thumb}', success: function () {// 用户点击了分享后执行的回调函数}});// 分享给朋友wx.onMenuShareAppMessage({title: '{$info.title}', desc: '{$info.description}', link: '{$data.url}', imgUrl: 'http://m.psnav.com/uploads/image/{$info.thumb}', type: 'link', // 分享类型,music、video或link,不填默认为linkdataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空success: function () {// 用户点击了分享后执行的回调函数}});// 分享到QQwx.onMenuShareQQ({title: '{$info.title}', desc: '{$info.description}', link: '{$data.url}', imgUrl: 'http://m.psnav.com/uploads/image/{$info.thumb}', success: function () {// 用户确认分享后执行的回调函数},cancel: function () {// 用户取消分享后执行的回调函数}});// 分享到腾讯微博wx.onMenuShareWeibo({title: '{$info.title}',desc: '{$info.description}', link: '{$data.url}', imgUrl: 'http://m.psnav.com/uploads/image/{$info.thumb}', success: function () {// 用户确认分享后执行的回调函数},cancel: function () {// 用户取消分享后执行的回调函数}});// 分享到QQ空间wx.onMenuShareQZone({title: '{$info.title}', desc: '{$info.description}', link: '{$data.url}', imgUrl: 'http://m.psnav.com/uploads/image/{$info.thumb}', success: function () {// 用户确认分享后执行的回调函数},cancel: function () {// 用户取消分享后执行的回调函数}});});

以上就是ThinkPHP5怎么集成JS-SDK实现微信自定义分享功能的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/310989.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
《战地6》新增“休闲突破”模式 每个队伍有16个bots
上一篇 2026年10月29日 00:46:08
天正建筑菜单的显示与关闭方法
下一篇 2025年12月3日 11:00:23

相关推荐

  • thinkphp框架如何查询数据

    一、基本查询 在ThinkPHP框架中,可以使用模型类的find、select、where、order等方法进行基本的查询操作。 (1)find方法 find方法用于查询一条数据记录,可以直接根据主键进行查询。例如: 立即学习“PHP免费学习笔记(深入)”; $user = UserModel::f…

    2026年10月29日
    500
  • thinkphp5模板中怎么调用控制器文件

    一、ThinkPHP 5 中的控制器 ThinkPHP 5中的控制器是一个至关重要的组成部分,其主要职责是接收请求并作出相应的响应。我们可以通过在控制器中定义方法来实现不同的业务逻辑。下面是一个简单的示例: namespace appindexcontroller;class Index{ publ…

    2026年10月29日
    000
  • thinkphp参数不正确问题如何解决

    一、什么是“参数不正确” 通常,当我们在使用ThinkPHP进行数据操作时,这个问题可能出现在我们的表单提交、API访问等等多个场景。当我们传递了错误的参数时,这个问题就会出现。具体来说,“参数不正确”指的是,我们的程序无法正确地解析、处理或使用请求附带的参数,导致程序不能正常执行。 常见的错误参数…

    2026年10月29日
    000
  • thinkphp插件钩子的实现机制是什么

    现在主流的cms或者blog等系统中,都内置的有插件系统,但是层层深入、剖析实现的方式,其实都是最简单的钩子的复杂化的实现。 前言 插件的执行通过钩子来触发;可以把插件看作挂在钩子上的东西;插件只有在成功实现相应钩子方法并被正确安装启用后才能执行。 开发者也可以用hook(‘test&#…

    2026年10月28日
    000
  • thinkphp如何修改数据库

    一、ThinkPHP数据库操作 在ThinkPHP中,我们可以通过它提供的数据库操作类来进行对数据库的操作。常用的数据库操作类有: Db类 在ThinkPHP中,我们可以使用Db类来进行对数据库的增、删、改、查等操作。其使用示例如下: 立即学习“PHP免费学习笔记(深入)”; where(‘id’,…

    2026年10月28日
    000
  • thinkphp显示连接错误如何解决

    首先,我们需要了解这个问题的原因。显示连接错误,一般是因为数据库连接失败或者数据库配置有误。因此,我们需要检查一下自己的数据库配置是否正确。寻找下列代码需要进入config目录下的database.php文件: // 数据库类型’type’ => ‘mysql’,// 服务器地址’hostna…

    2026年10月28日
    000
  • ThinkPHP中如何设置构造函数

    一、什么是构造函数 构造函数是一个在实例化一个对象时自动调用的特殊函数。它的作用是对对象进行初始化,设置属性的初始值等。在PHP中,构造函数的名称必须为__construct()。 二、在ThinkPHP中设置构造函数的步骤 首先我们需要创建一个类文件,比如说我们可以创建一个PHP文件,命名为tes…

    2026年10月28日
    200
  • ThinkPHP怎么获取发布者地址标注

    一、使用 IP 地址获取发布者地址标注 在获取发布者地址标注时,可以使用其 IP 地址进行定位。在 ThinkPHP 中,可以通过 getRequest() 方法获取当前请求的 IP 地址,再利用第三方地理位置服务(如百度地图 API)进行解析,获取对应的地理位置信息。 代码示例: // 获取当前请…

    2026年10月28日
    000
  • 怎么关闭ThinkPHP的日志记录

    ThinkPHP的日志记录 我们首先来了解一下ThinkPHP的日志记录功能。在ThinkPHP中,日志记录分为应用程序日志和运行时日志两种类型。应用程序日志是由开发人员手动记录的日志,用于调试和性能分析。它能够记录应用程序运行时的多种信息,包括数据库查询、执行时间、响应时间等。应用程序自动生成的日…

    2026年10月28日
    000
  • thinkphp如何避免SQL注入攻击

    一、什么是 SQL 注入攻击 SQL 注入攻击是黑客对网站进行攻击时经常使用的一种手段。SQL注入攻击是指攻击者通过恶意构造的SQL语句,来修改、插入或删除数据库中的数据。在 WEB 应用程序中,大多数情况下以用户输入的参数为基础,开发者未进行有效的过滤和字符转义,使得攻击者可以通过输入恶意字符串获…

    2026年10月28日
    000
  • ThinkPHP中的表查询语句如何使用

    一、查询单个字段 要查询表中的某个字段,我们可以通过 table() 函数来指定要查询的表,而 find() 函数则表示只查询一条结果,类似于 MySQL 中的 SELECT * FROM table_name WHERE column_name = ‘value’ LIMI…

    2026年10月28日
    000
  • thinkphp加路径访问不到如何解决

    一、问题原因 当我们在页面中加入路径时,例如: 如果发现页面中未加载样式表,则可能是由于路径设置有误或无法访问。可能是由于“__PUBLIC__”别名在ThinkPHP框架中未正确设置导致的。 “__PUBLIC__”这个路径别名指的是应用程序的公共文件夹路径,它位于应用程序…

    2026年10月28日
    000
  • thinkphp路由不转换问题如何解决

    一、问题描述 在我们使用ThinkPHP进行开发时,有时会遇到这样的情况:当我们进行一些路由操作时,页面并未跳转至我们所期望的界面。 例如,我们希望通过URL“www.example.com/home/do”来访问“HomeController.php”中的“do”方法,但我们实际上却无法访问到此方…

    2026年10月28日
    000
  • thinkphp如何进行模糊查询

    首先,在ThinkPHP中,我们可以通过Db类来操作数据库。我们可以使用Db类的table方法来指定要操作哪个数据表,然后调用相应的查询方法进行操作。在进行模糊查询时,我们可以使用like方法。需要模糊匹配的字段名称作为该方法的第一个参数,需要匹配的字符串作为第二个参数。例如,我们要查询名字包含“张…

    2026年10月28日
    500
  • 怎么使用thinkphp框架实现登录功能

    第一步:创建登录页面 要开始,必须先建立一个登录页面。该页面需要含有用户和密码栏位,以及“登录”按钮。构建页面时,应该使用HTML和Bootstrap,并在视图路径中进行定义。以下是一个示例: Login Login Username: Password: Login 第二步:创建控制器Action…

    2026年10月28日
    000
  • thinkphp阿帕奇路由无法访问的原因是什么及怎么解决

    一、原因分析 在开发网站时,我们经常使用ThinkPHP的路由功能。而路由则分为静态路由和动态路由两种方式,而阿帕奇路由是动态路由的一种。当我们使用阿帕奇路由时,有时候会遇到无法访问的情况。 造成这种情况的原因有很多,下面为大家介绍其中几种主要原因: 规则定义错误 立即学习“PHP免费学习笔记(深入…

    2026年10月28日
    000
  • thinkphp5怎么加layui实现图片上传功能

    网站中很多表单都会用到上传图片,logo,照片,用户也会上传图片,这个时候网站就需要一个上传图片的功能,而且在上传后希望能预览一下看上传的对不对。 thinkphp5加layui实现图片上传功能(带图片预览)思路,异步传输图片并预览,将异步上传后的值返回表单隐藏域再提交。 1、引入文件 首先,要引入…

    2026年10月28日
    000
  • ThinkPHP5中查询方法怎么使用

    一、查询之和的使用方法 ThinkPHP5中可以通过query和sum方法实现查询之和。query方法被用于建立SQL语句,而sum方法则用于执行SQL语句并从查询结果中获取总和。 具体而言,查询之和的使用方法如下: //导入命名空间use thinkDb;//构建SQL语句$result = Db…

    2026年10月28日
    000
  • ThinkPHP中怎么实现分布式应用系统

    一、什么是分布式应用系统 分布式应用系统是指由多台机器组成的应用系统。系统中的每台机器都有自己的资源和可用性等级。不同的机器可以拓展系统的资源容量,同时也可以提升系统的可用性和应对高流量的能力,从而保障系统的延展性和稳定性。 二、如何实现分布式应用系统 数据库分库分表 立即学习“PHP免费学习笔记(…

    2026年10月28日
    200
  • thinkphp admin的写法是什么

    thinkphp admin的写法是“<?php namespace appadmincontroller;class Index{public function index(){return '…';}}”;在thinkphp5的public目录下有一个ind…

    2026年10月28日
    100

发表回复

登录后才能评论
关注微信