基于thinkPHP实现的微信自定义分享功能示例


Posted in PHP onSeptember 23, 2016

本文实例讲述了基于thinkPHP实现的微信自定义分享功能。分享给大家供大家参考,具体如下:

在许多大的网站我们都会看到点击分享就可以把数据分享到微信或QQ或其它的平台了,下面我们来看一段php版微信自定义分享代码,代码参考官方开发的没有任何问题.

分享需要认证微信订阅号或者服务号.

php 代码(thinkphp):

$appid='xxx';
$appsecret='xxxx';
$timestamp = time();
$noncestr = $this->getRandStr(15);
// dump();
$url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='. $this->get_token($appid,$appsecret) .'&type=jsapi';
$ret_json = $this->curl_get_contents($url);
$ret = json_decode($ret_json);
$ticket = $ret-> ticket;
//var_dump($ret);
$strvalue = 'jsapi_ticket='.$ticket.'&noncestr='.$noncestr.'×tamp='.$timestamp.'&url=http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$signature = sha1($strvalue);
$this->assign('timestamp',$timestamp);
$this->assign('nonceStr',$noncestr);
$this->assign('signature',$signature);
function get_token($appid,$appsecret){
 if(S('access_token')) return S('access_token');
 $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
 $ret_json = $this->curl_get_contents($url);
 $ret = json_decode($ret_json);
 if($ret -> access_token){
 S('access_token',$ret -> access_token,7200);
 return $ret -> access_token;
 }
}
function is_weixin(){
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false ) {
return true;
}
return false;
}
function getRandStr($length){
 $str = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 $randString = '';
 $len = strlen($str)-1;
 for($i = 0;$i < $length;$i ++){
 $num = mt_rand(0, $len);
 $randString .= $str[$num];
 }
 return $randString;
}
function curl_get_contents($url){
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_TIMEOUT, 1);
 curl_setopt($ch, CURLOPT_MAXREDIRS, 200);
 curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);
 curl_setopt($ch, CURLOPT_REFERER, _REFERER_);
 @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
 $r = curl_exec($ch);
 curl_close($ch);
 return $r;
}

js代码:需要引入:http://res.wx.qq.com/open/js/jweixin-1.0.0.js

wx.config({
 debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
 appId: 'wxae7c36a1349c5868', // 必填,公众号的唯一标识
 timestamp: '{$timestamp}', // 必填,生成签名的时间戳
 nonceStr: '{$nonceStr}', // 必填,生成签名的随机串
 signature: '{$signature}',// 必填,签名,见附录1
 jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
wx.ready(function(){
wx.onMenuShareTimeline({
 title: '{$contentInfo.title}', // 分享标题
 link: window.location.href, // 分享链接
 imgUrl: 'http://'+window.location.host+'{$categoryInfo.image}', // 分享图标
 success: function () {
 // 用户确认分享后执行的回调函数
 //alert(1111);
 //fxfunc();
 },
 cancel: function () {
 // 用户取消分享后执行的回调函数
 //alert("您取消了分享");
 }
});
wx.onMenuShareAppMessage({
 title: '{$contentInfo.title}', // 分享标题
 desc: removeHTMLTag('{$contentInfo.content}'), // 分享描述
 link: window.location.href, // 分享链接
 imgUrl: 'http://'+window.location.host+'{$categoryInfo.image}', // 分享图标
 type: '', // 分享类型,music、video或link,不填默认为link
 dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
 success: function () {
 // 用户确认分享后执行的回调函数
 //fxfunc();
 },
 cancel: function () {
 //alert("您取消了分享");
 // 用户取消分享后执行的回调函数
 }
});
 // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});
function removeHTMLTag(str) {
 str = str.replace(/<\/?[^>]*>/g,''); //去除HTML tag
 str = str.replace(/[ | ]*\n/g,'\n'); //去除行尾空白
 //str = str.replace(/\n[\s| | ]*\r/g,'\n'); //去除多余空行
 str=str.replace(/ /ig,'');//去掉 
 return str;
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP提取字符串中的图片地址[正则表达式]
Nov 12 PHP
php的hash算法介绍
Feb 13 PHP
php实现webservice实例
Nov 06 PHP
php格式化日期实例分析
Nov 12 PHP
php读取文件内容的方法汇总
Jan 24 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
Jul 19 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
基于swoole实现多人聊天室
Jun 14 PHP
PHP命名空间(namespace)原理与用法详解
Dec 11 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
Dec 13 PHP
Yii2框架中一些折磨人的坑
Dec 15 PHP
PHP数组实际占用内存大小原理解析
Dec 11 PHP
php版微信自动登录并获取昵称的方法
Sep 23 #PHP
php中使用websocket详解
Sep 23 #PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 #PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
Sep 23 #PHP
thinkphp制作404跳转页的简单实现方法
Sep 22 #PHP
thinkphp3.2.3版本的数据库增删改查实现代码
Sep 22 #PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
Sep 22 #PHP
You might like
比较好用的PHP防注入漏洞过滤函数代码
2012/04/11 PHP
PHP中extract()函数的定义和用法
2012/08/17 PHP
php 模拟get_headers函数的代码示例
2013/04/27 PHP
thinkPHP5框架设置404、403等http状态页面的方法
2018/06/05 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
2020/01/26 PHP
JS保存、读取、换行、转Json报错处理方法
2013/06/14 Javascript
javascript:json数据的页面绑定示例代码
2014/01/26 Javascript
JavaScript中的console.dir()函数介绍
2014/12/29 Javascript
jquery图片切换实例分析
2015/04/15 Javascript
简述JavaScript中正则表达式的使用方法
2015/06/15 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
nodejs中art-template模板语法的引入及冲突解决方案
2017/11/07 NodeJs
webpack引入eslint配置详解
2018/01/22 Javascript
Express之托管静态文件的方法
2018/06/01 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
微信小程序实现图片压缩
2019/12/03 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
2020/11/11 Javascript
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
2015/04/25 Python
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
2017/12/12 Python
Linux下Python安装完成后使用pip命令的详细教程
2018/11/22 Python
浅谈pycharm的xmx和xms设置方法
2018/12/03 Python
Python中Numpy mat的使用详解
2019/05/24 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
python使用ctypes库调用DLL动态链接库
2020/10/22 Python
HTML5 window/iframe跨域传递消息 API介绍
2013/08/26 HTML / CSS
YBF Beauty官网:美丽挚友,美国知名彩妆品牌
2020/11/22 全球购物
奢华时尚的创新平台:Baltini
2020/10/03 全球购物
学生手册家长评语
2014/02/10 职场文书
消防标语大全
2014/06/07 职场文书
公务员政审材料范文
2014/12/23 职场文书
个人先进事迹材料
2014/12/29 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
Python线程池与GIL全局锁实现抽奖小案例
2022/04/13 Python