基于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 相关文章推荐
截获网站title标签之家内容的例子
Oct 09 PHP
用PHP程序实现支持页面后退的两种方法
Jun 30 PHP
php 301转向实现代码
Sep 18 PHP
php使用指定编码导出mysql数据到csv文件的方法
Mar 31 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
Apr 30 PHP
php生成Android客户端扫描可登录的二维码
May 13 PHP
php+jQuery递归调用POST循环请求示例
Oct 14 PHP
php及codeigniter使用session-cookie的方法(详解)
Apr 06 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
May 29 PHP
PHP从尾到头打印链表实例讲解
Sep 27 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
May 06 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 5.3.0 安装分析心得
2009/08/07 PHP
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
微信公众号实现会员卡领取功能
2017/06/08 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
FCK调用方法..
2006/12/21 Javascript
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
基于JQUERY的两个ListBox子项互相调整的实现代码
2011/05/07 Javascript
JavaScript实现打字效果的方法
2015/07/10 Javascript
JS实现带鼠标效果的头像及文章列表代码
2015/09/27 Javascript
基于JS实现的笛卡尔乘积之商品发布
2016/05/13 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
JavaScript数据类型转换的注意事项
2016/07/31 Javascript
jquery横向纵向鼠标滚轮全屏切换
2017/02/27 Javascript
webpack学习--webpack经典7分钟入门教程
2017/06/28 Javascript
Nodejs实现文件上传的示例代码
2017/09/26 NodeJs
ES6 javascript中class类的get与set用法实例分析
2017/10/30 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
零基础写python爬虫之使用Scrapy框架编写爬虫
2014/11/07 Python
Python的Flask框架中web表单的教程
2015/04/20 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
python应用Axes3D绘图(批量梯度下降算法)
2020/03/25 Python
Python configparser模块操作代码实例
2020/06/08 Python
Python自定义sorted排序实现方法详解
2020/09/18 Python
Python 求向量的余弦值操作
2021/03/04 Python
Under Armour安德玛德国官网:美国高端运动科技品牌
2019/03/09 全球购物
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
普通大学毕业生自荐信范文
2014/02/23 职场文书
2014年党员加强作风建设思想汇报
2014/09/15 职场文书
党干部专题民主生活会对照检查材料思想汇报
2014/10/06 职场文书
写给妈妈的感谢信
2015/01/22 职场文书
MySQL大小写敏感的注意事项
2021/05/24 MySQL
javascript拖曳互换div的位置实现示例
2021/06/28 Javascript