• 技术文章 >后端开发 >php教程

    基于thinkPHP实现的微信自定义分享功能

    不言不言2018-06-06 15:27:21原创2435
    这篇文章主要介绍了基于thinkPHP实现的微信自定义分享功能,结合实例形式分析了thinkPHP调用微信接口实现自定义分享功能的相关操作技巧,需要的朋友可以参考下

    本文实例讲述了基于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.'&timestamp='.$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;
    }

    相关推荐:

    thinkphp实现excel数据的导入导出(附完整案例)

    thinkphp项目如何自定义微信分享描述内容

    以上就是基于thinkPHP实现的微信自定义分享功能的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:thinkphp实现excel数据的导入导出(附完整案例) 下一篇:php如何获取文件后缀名的方法
    php培训_php实战培训【立即报名】-php中文网第20期

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• PHP高端课程,php高端_PHP教程• php实现的验证码文件类实例,_PHP教程• PHP生成plist数据的方法,php生成plist_PHP教程• php中smarty变量修饰用法实例分析_PHP教程• php自己实现memcached的队列类_PHP教程
    1/1

    PHP中文网