分享jssdk分享主要3块 1用Jssdk类来运算加密签名等 (传给js里) 2在需要分享的html页面调用 js(微信配置的js)3在1和2里面传参数(把js需要的参数通过jssdk类给js)
appId和appSecret是肯定需要的
此次用的thinkphp5
这张图是引入jssdk3
Jssdk3代码如下:
<?php namespace fast; class Jssdk3 { private $appId; private $appSecret; public function __construct($appId, $appSecret) { //参数是这里传进来的 小和QQ496631085 $this->appId = $appId; $this->appSecret = $appSecret; } public function getSignPackage() { $jsapiTicket = $this->getJsApiTicket(); $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; $timestamp = time(); $nonceStr = $this->createNonceStr(); // 这里参数的顺序要按照 key 值 ASCII 码升序排序 $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url"; $signature = sha1($string); $signPackage = array( "appId" => $this->appId, "nonceStr" => $nonceStr, "timestamp" => $timestamp, "url" => $url, "signature" => $signature, "rawString" => $string ); return $signPackage; } private function createNonceStr($length = 16) { $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str = ""; for ($i = 0; $i < $length; $i++) { $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } return $str; } private function getJsApiTicket() { // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例 $data = json_decode($this->getCacheTicket(),true); // dump($data); if ($data[\'expire_time\'] < time()) { $accessToken = $this->getAccessToken(); $url = "http://api.weixin.qq.com/cgi-bin/ticket/getticket?type=1&access_token=$accessToken"; $res = json_decode($this->httpGet($url)); $ticket = $res->ticket; if ($ticket) { $data[\'expire_time\'] = time() + 7000; $data[\'jsapi_ticket\'] = $ticket; $this->setCacheTicket(json_encode($data)); } } else { $ticket = $data[\'jsapi_ticket\']; } return $ticket; } private function getAccessToken() { // access_token 应该全局存储与更新,以下代码以写入到文件中做示例 $data = json_decode($this->getCacheToken(),true); if ($data[\'expire_time\'] < time()) { $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret"; $res = json_decode($this->httpGet($url)); $access_token = $res->access_token; if ($access_token) { $data[\'expire_time\'] = time() + 7000; $data[\'access_token\'] = $access_token; $this->setCacheToken(json_encode($data)); } } else { $access_token = $data[\'access_token\']; } return $access_token; } private function httpGet($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_TIMEOUT, 500); curl_setopt($curl, CURLOPT_URL, $url); $res = curl_exec($curl); curl_close($curl); return $res; } private function getCacheToken() { return file_get_contents(\'weixin_share_token.json\'); } private function setCacheToken($token) { return file_put_contents(\'weixin_share_token.json\', $token); // return MEM::mset("weixin_share_token",$token,7000); //QQ496631085 } private function getCacheTicket() { return file_get_contents(\'jsapi_ticket.json\'); //缓存获取,也可自己放入数据库存储 } private function setCacheTicket($ticket) { return file_put_contents(\'jsapi_ticket.json\', $ticket); //设置缓存 } }
然后在你需要的页面传入参数我的是在index.php 里面的public function_initialize函数里面 就是进来就执行_initialize函数里面的
$this->jssdk = new Jssdk3($this->appId,$this->appSecret); //这里就是传你的微信参数哈QQ496631085 $this->getsign = $this->jssdk->getSignPackage(); // dump($this->getsign ); $this->view->assign(\'appid\',$this->appId ); $this->view->assign(\'wxsign\',$this->getsign); $share[\'title\'] = "一元抵一千元,三网合一、自适应型定制网站";//分享标题 $share[\'sharedesc\'] = "您企业网络营销的一部分QQ496631085";//分享简介 $share[\'icourl\'] = "http://xiaohe520.club/assets/img/ico.png"; //这里是你的图片 $this->view->assign(\'share\',$share);//这个就是把变量传到html里面的
我写的是share.html 这个是公共的 那个页面用就直接调用
<script type="text/javascript" src="https://res2.wx.qq.com/open/js/jweixin-1.4.0.js "></script> <script> wx.config({ debug: false,//false,true appId: \'{$appid}\', timestamp: {$wxsign.timestamp}, // 必填,生成签名的时间戳 nonceStr: \'{$wxsign.nonceStr}\',// 必填,生成签名的随机串 signature: \'{$wxsign.signature}\',// 必填,签名 jsApiList: [ \'checkJsApi\', \'onMenuShareTimeline\', \'onMenuShareAppMessage\', \'onMenuShareQQ\', \'onMenuShareWeibo\', \'onMenuShareQZone\', \'hideMenuItems\', \'showMenuItems\', // \'hideAllNonBaseMenuItem\', // \'showAllNonBaseMenuItem\', // \'translateVoice\', // \'startRecord\', // \'stopRecord\', // \'onVoiceRecordEnd\', // \'playVoice\', // \'onVoicePlayEnd\', // \'pauseVoice\', // \'stopVoice\', // \'uploadVoice\', // \'downloadVoice\', // \'chooseImage\', // \'previewImage\', // \'uploadImage\', // \'downloadImage\', // \'getNetworkType\', // \'openLocation\', // \'getLocation\', // \'hideOptionMenu\', // \'showOptionMenu\', // \'closeWindow\', // \'scanQRCode\', // \'chooseWXPay\', // \'openProductSpecificView\', // \'addCard\', // \'chooseCard\', \'openCard\' ] }); </script> <!-- <script type="text/javascript" src="__XIAOHE__/js/demo.js"></script> --> <script type="text/javascript"> var shareTitle = \'{$share.title}\', sharelink = \'{$share.sharelink}\',//这里就是分享的连接 下面是简介 上面是标题等 QQ496631085 sharedesc = \'{$share.sharedesc}\', myimgUrl = \'{$share.icourl}\'; wx.ready(function () { wx.onMenuShareAppMessage({ title: shareTitle, // 分享标题 desc: sharedesc, // 分享描述 link: sharelink, // 分享链接 imgUrl: myimgUrl, // 分享图标 success: function (res) { alert(\'已分享\'); }, cancel: function (res) { alert(\'这么好的活动,确定不要分享吗?\'); } }); wx.onMenuShareTimeline({ title: shareTitle, // 分享标题 desc: sharedesc, // 分享描述 link: sharelink, // 分享链接 imgUrl: myimgUrl, // 分享图标 success: function (res) { }, cancel: function (res) { } }); wx.onMenuShareQQ({ title: shareTitle, // 分享标题 desc: sharedesc, // 分享描述 link: sharelink, // 分享链接 imgUrl: myimgUrl, // 分享图标 success: function (res) { alert(\'谢谢您的分享\'); }, cancel: function (res) { } }); wx.onMenuShareQZone({ title: shareTitle, // 分享标题 desc: sharedesc, // 分享描述 link: sharelink, // 分享链接 imgUrl: myimgUrl, // 分享图标 success: function (res) { }, cancel: function (res) { } }); }); wx.error(function (res) { var resss = JSON.stringify(res); layer.open({ content: resss, skin: \'mag\', time: 2 }); }); // wx.ready(function(){ // // 1 判断当前版本是否支持指定 JS 接口,支持批量判断 // // document.querySelector(\'#checkJsApi\').onclick = function () { // // wx.checkJsApi({ // // jsApiList: [ // // \'getNetworkType\', // // \'previewImage\' // // ], // // success: function (res) { // // alert(JSON.stringify(res)); // // } // // }); // // }; // // 2. 分享接口 // // 2.1 监听“分享给朋友”,按钮点击、自定义分享内容及分享结果接口 // document.querySelector(\'#onMenuShareAppMessage\').onclick = function () { // wx.onMenuShareAppMessage({ // title: \'互联网之子\', // desc: \'在长大的过程中,我才慢慢发现,我身边的所有事,别人跟我说的所有事,那些所谓本来如此,注定如此的事,它们其实没有非得如此,事情是可以改变的。更重要的是,有些事既然错了,那就该做出改变。\', // link: \'http://website.wxjoi.com/index/index/xqy.html?id=5\', // imgUrl: \'http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg\', // trigger: function (res) { // // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回 // alert(\'用户点击发送给朋友\'); // }, // success: function (res) { // alert(\'已分享\'); // }, // cancel: function (res) { // alert(\'已取消\'); // }, // fail: function (res) { // alert(JSON.stringify(res)); // } // }); // alert(\'已注册获取“发送给朋友”状态事件\'); // }; // // 2.2 监听“分享到朋友圈”按钮点击、自定义分享内容及分享结果接口 // document.querySelector(\'#onMenuShareTimeline\').onclick = function () { // wx.onMenuShareTimeline({ // title: \'互联网之子\', // link: \'http://website.wxjoi.com/index/index/xqy.html?id=5\', // imgUrl: \'http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg\', // trigger: function (res) { // // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回 // alert(\'用户点击分享到朋友圈\'); // }, // success: function (res) { // alert(\'已分享\'); // }, // cancel: function (res) { // alert(\'已取消\'); // }, // fail: function (res) { // alert(JSON.stringify(res)); // } // }); // alert(\'已注册获取“分享到朋友圈”状态事件\'); // }; // }); </script>
在显示的页面
直接调用公共的
{include file="./index/public/share" /} 是tp里面调用html的一个语句
<script type="text/javascript" src="__XIAOHE__/js/jquery.min.js"></script> {include file="./index/public/share" /}
不懂的可以提问