基于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模拟HTTP认证
Oct 09 PHP
PHP strtok()函数的优点分析
Mar 02 PHP
php class中self,parent,this的区别以及实例介绍
Apr 24 PHP
php变量作用域的深入解析
Jun 03 PHP
PHP使用GIFEncoder类处理gif图片实例
Jul 01 PHP
PHP使用memcache缓存技术提高响应速度的方法
Dec 26 PHP
Yii实现简单分页的方法
Apr 29 PHP
Yii视图CGridView列表用法实例分析
Jul 12 PHP
php利用递归实现删除文件目录的方法
Sep 23 PHP
php根据数据id自动生成编号的实现方法
Oct 16 PHP
php7性能提升的原因详解
Oct 13 PHP
浅谈PHP7中的一些小技巧
May 29 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
《逃离塔科夫》——“萌新劝退,老手自嗨”的硬核FPS游戏
2020/04/03 其他游戏
php cc攻击代码与防范方法
2012/10/18 PHP
PHP数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
php+mysqli使用面向对象方式更新数据库实例
2015/01/29 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
Linux下编译redis和phpredis的方法
2016/04/07 PHP
php组合排序简单实现方法
2016/10/15 PHP
PHP中的self关键字详解
2019/06/23 PHP
CL vs ForZe BO5 第三场 2.13
2021/03/10 DOTA
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
动态加载jQuery的方法
2015/06/16 Javascript
谈谈impress.js初步理解
2015/09/09 Javascript
使用JavaScriptCore实现OC和JS交互详解
2017/03/28 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
2017/07/23 Javascript
Angularjs中数据绑定的实例详解
2017/08/25 Javascript
JavaScript私有变量实例详解
2019/01/24 Javascript
微信小程序基于picker实现级联菜单
2019/02/15 Javascript
vue.js多页面开发环境搭建过程
2019/04/24 Javascript
seajs和requirejs模块化简单案例分析
2019/08/26 Javascript
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
PyTorch线性回归和逻辑回归实战示例
2018/05/22 Python
python高阶爬虫实战分析
2018/07/29 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
python函数不定长参数使用方法解析
2019/12/14 Python
基于logstash实现日志文件同步elasticsearch
2020/08/06 Python
Omio俄罗斯:一次搜索公共汽车、火车和飞机的机票
2018/11/17 全球购物
英国亚马逊官方网站:Amazon.co.uk
2019/08/09 全球购物
一加手机美国官方网站:OnePlus美国
2019/09/19 全球购物
Jar包的作用是什么
2014/03/30 面试题
JAVA中运算符的分类及举例
2015/09/12 面试题
2014年前台文员工作总结
2014/12/08 职场文书
服装区域经理岗位职责
2015/04/10 职场文书
MySQL 自定义变量的概念及特点
2021/05/13 MySQL