基于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 相关文章推荐
基于mysql的bbs设计(三)
Oct 09 PHP
php下安装配置fckeditor编辑器的方法
Mar 02 PHP
基于PHP常用字符串的总结(待续)
Jun 07 PHP
PHP答题类应用接口实例
Feb 09 PHP
php字符串按照单词进行反转的方法
Mar 14 PHP
Laravel 5框架学习之数据库迁移(Migrations)
Apr 08 PHP
PHP数据库连接mysql与mysqli对比分析
Jan 04 PHP
PHP执行linux命令常用函数汇总
Feb 02 PHP
php注册登录系统简化版
Dec 28 PHP
php常用字符函数实例小结
Dec 29 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
Feb 08 PHP
PHP基于GD2函数库实现验证码功能示例
Jan 27 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初学者的8点有效建议
2010/11/20 PHP
在PHP中使用redis
2013/11/04 PHP
那些年我们错过的魔术方法(Magic Methods)
2014/01/14 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
2015/01/28 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
简单的php+mysql聊天室实现方法(附源码)
2016/01/05 PHP
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
Div自动滚动到末尾的代码
2008/10/26 Javascript
JQuery操作单选按钮以及复选按钮示例
2013/09/23 Javascript
通过onmouseover选项卡实现img图片的变化
2014/02/12 Javascript
百度判断手机终端并自动跳转js代码及使用实例
2014/06/11 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
jQuery实现的登录浮动框效果代码
2015/09/26 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
js字符限制(字符截取) 一个中文汉字算两个字符
2017/09/12 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
NodeJS多种创建WebSocket监听的方式(三种)
2020/06/04 NodeJs
vuex的使用和简易实现
2021/01/07 Vue.js
[37:23]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第二局
2016/03/04 DOTA
Python selenium 三种等待方式详解(必会)
2016/09/15 Python
python中单例常用的几种实现方法总结
2018/10/13 Python
python打造爬虫代理池过程解析
2019/08/15 Python
Python PO设计模式的具体使用
2019/08/16 Python
浅谈Python 递归算法指归
2019/08/22 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
python中random模块详解
2021/03/01 Python
Lookfantastic美国/加拿大:英国知名美妆购物网站
2019/03/27 全球购物
毕业自我鉴定范文
2013/11/06 职场文书
铁路个人事迹材料
2014/01/30 职场文书
师德师风个人反思
2014/04/28 职场文书
2014年林业工作总结
2014/12/05 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
Django开发RESTful API实现增删改查(入门级)
2021/05/10 Python
如何vue使用el-table遍历循环表头和表体数据
2022/04/26 Vue.js
python 学习GCN图卷积神经网络
2022/05/11 Python