基于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 基本语法格式
Dec 15 PHP
PHP IF ELSE简化/三元一次式的使用
Aug 22 PHP
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
Oct 31 PHP
PHP中去除换行解决办法小结(PHP_EOL)
Nov 27 PHP
关于js与php互相传值的介绍
Jun 25 PHP
ThinkPHP缓存方法S()概述
Jun 13 PHP
php从字符串创建函数的方法
Mar 16 PHP
使用GD库生成带阴影文字的图片
Mar 27 PHP
PHP实现一个简单url路由功能实例
Nov 05 PHP
PHP使用数组实现矩阵数学运算的方法示例
May 29 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
Apr 21 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 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 将bmp图片转为jpg等其他任意格式的图片
2009/06/29 PHP
PHP中文URL编解码(urlencode()rawurlencode()
2010/07/03 PHP
将博客园(cnblogs.com)数据导入到wordpress的代码
2013/01/06 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
基于jquery的可多选的下拉列表框
2012/07/20 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
JavaScript实现班级随机点名小应用需求的具体分析
2014/05/12 Javascript
Javascript中的delete操作符详细介绍
2014/06/06 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
ThinkJS中如何使用MongoDB的CURD操作
2016/12/13 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
微信小程序 确认框的实现(附代码)
2019/07/23 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
webpack 如何解析代码模块路径的实现
2019/09/04 Javascript
Vue el-autocomplete远程搜索下拉框并实现自动填充功能(推荐)
2019/10/25 Javascript
js实现九宫格抽奖
2020/03/19 Javascript
python常规方法实现数组的全排列
2015/03/17 Python
python获取本地计算机名字的方法
2015/04/29 Python
Python使用MONGODB入门实例
2015/05/11 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
2018/01/11 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
python爬虫 2019中国好声音评论爬取过程解析
2019/08/26 Python
Series和DataFrame使用简单入门
2019/11/13 Python
Python 实现自动获取种子磁力链接方式
2020/01/16 Python
Python lxml库的简单介绍及基本使用讲解
2020/12/22 Python
优秀员工自荐信范文
2013/10/05 职场文书
任命书格式模板
2015/09/22 职场文书
2016年“六一儿童节”校园广播稿
2015/12/17 职场文书
年中了,该如何写好个人述职报告?
2019/07/02 职场文书
2019年教师节祝福语精选,给老师送上真诚的祝福
2019/09/09 职场文书
vue首次渲染全过程
2021/04/21 Vue.js
Node与Python 双向通信的实现代码
2021/07/16 Javascript
python之PySide2安装使用及QT Designer UI设计案例教程
2021/07/26 Python
Python中的 Set 与 dict
2022/03/13 Python