基于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 常用函数库和一些实用小技巧
Jan 01 PHP
php之curl设置超时实例
Nov 03 PHP
php采用file_get_contents代替使用curl实例
Nov 07 PHP
yii中widget的用法
Dec 03 PHP
php常见的魔术方法详解
Dec 25 PHP
PHP实现动态web服务器方法
Jul 29 PHP
修改WordPress中文章编辑器的样式的方法详解
Dec 15 PHP
简单实现PHP留言板功能
Dec 21 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
Jan 17 PHP
php生成HTML文件的类方法
Oct 11 PHP
PHP 命名空间和自动加载原理与用法实例分析
Apr 29 PHP
windows系统php环境安装swoole具体步骤
Mar 04 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 之 没有mysql支持时的替代方案
2006/10/09 PHP
php 动态添加记录
2009/03/10 PHP
php pki加密技术(openssl)详解
2013/07/01 PHP
THINKPHP项目开发中的日志记录实例分析
2014/12/01 PHP
php验证码实现代码(3种)
2015/09/07 PHP
PHP请求Socket接口测试实例
2016/08/12 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
五个jQuery图片画廊插件 推荐
2011/05/12 Javascript
优化innerHTML操作(提高代码执行效率)
2011/08/20 Javascript
一个JavaScript去除字符串末尾的空白实例代码
2014/09/22 Javascript
JS+CSS实现仿雅虎另类滑动门切换效果
2015/10/13 Javascript
jQuery获取多种input值的简单实现方法
2016/06/20 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
React组件之间的通信的实例代码
2017/06/27 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
vue axios整合使用全攻略
2018/05/24 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
2018/09/25 Javascript
使用FormData实现上传多个文件
2018/12/04 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
浅谈vuex的基本用法和mapaction传值问题
2019/11/08 Javascript
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
python 解压pkl文件的方法
2018/10/25 Python
Python简单处理坐标排序问题示例
2019/07/11 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
Python any()函数的使用方法
2019/10/28 Python
使用npy转image图像并保存的实例
2020/07/01 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
波兰化妆品和护肤品购物网站:eKobieca
2019/08/30 全球购物
毕业求职自荐信格式是什么
2013/11/19 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
员工年终自我评价
2014/09/14 职场文书
护理专业自荐信范文
2015/03/06 职场文书
2015迎新晚会开场白
2015/05/29 职场文书
信用卡工资证明范本
2015/06/19 职场文书
六年级作文之关于梦
2019/10/22 职场文书