1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > PHP微信公众平台开发高级篇—微信JS-SDK(分享接口)

PHP微信公众平台开发高级篇—微信JS-SDK(分享接口)

时间:2019-06-02 19:34:29

相关推荐

PHP微信公众平台开发高级篇—微信JS-SDK(分享接口)

一、说明

1、本文主要是分享接口的实现和选择相册以及扫一扫的实现

2、参考慕课视频:/video/11353

3、参考手册:

https://mp./wiki?t=resource/res_main&id=mp1421141115

4、微信分享JS接口目前已失效,以前可以自定义分享的标题、描述、图片、链接地址在微信6.0.2版本中失效:

/txw1958/p/4197951.html

二、controller代码

<?phpnamespace Weixin\Controller;use Think\Controller;class IndexController extends Controller{/**$url 接口url string*$type 请求类型 string*$res 返回数据类型 string*%$arr post 请求参数 string*/public function http_curl($url,$type='get',$res='json',$arr=''){//1.初始化curl$ch = curl_init();//2.设置curl的参数curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);if($type == 'post'){curl_setopt($ch, CURLOPT_POST,1);curl_setopt($ch, CURLOPT_POSTFIELDS, $arr);}//3.采集$output = curl_exec($ch);//4.关闭curl_close($ch);if($res=='json'){if(curl_error($ch)){//请求失败,返回错误信息return curl_error($ch);}else{//请求成功,返回错误信息return json_decode($output,true);}}}/**返回access_token *session解决办法 存mysql memcache*/public function getWxAccessToken(){//将access_token 存在session/cookie中if($_SESSION['access_token'] && $_SESSION['expire_time'] > time()){//如果access_token在session中没有过期return $_SESSION['access_token'];}else{//如果access_token在session中不存在或者已经过期$appid = 'wxb20bebb764546087';$appsecret = '64e22d215895d52af21c8fcbf6da3241';$url = "https://api./cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;$res = $this->http_curl($url,'get','json');$access_token = $res['access_token'];//将重新获取到的access_token存到session中$_SESSION['access_token'] = $access_token;$_SESSION['erpire_time'] = time() + 7000;return $access_token;}}//获取jsapi_ticket全局票据function getJsApiTicket(){//如果session中保存有效的jsapi_ticketif($_SESSION['jsapi_ticket_expire_time'] > time() && $_SESSION['jsapi_ticket']){$jsapi_ticket = $_SESSION['jsapi_ticket'];}else{$access_token = $this -> getWxAccessToken();$url = "https://api./cgi-bin/ticket/getticket?access_token=".$access_token."&type=jsapi";$res = $this -> http_curl($url);$jsapi_ticket = $res['ticket'];$_SESSION['jsapi_ticket'] = $jsapi_ticket;$_SESSION['jsapi_ticket_expire_time'] = time()+7000;}return $jsapi_ticket;}//获取随机码function getRandCode($num = 16){$array = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','v','z','1','2','3','4','5','6','7','8','9','0',);$tmpstr='';$max = count($array);for($i=1; $i<=$num; $i++){$key = rand(0,$max-1); //'A' -> $array[0]$tmpstr .= $array[$key];}return $tmpstr;}//function shareWx(){//1.获取jsapi_ticket票据$jsapi_ticket = $this->getJsApiTicket();echo $jsapi_ticket;echo '<br>';$timestamp = time();//echo '<br>';$noncestr = $this->getRandCode();//echo '<br>';//$url = 'http://www.cxf001.top/weixin.php/index/sharewx';//动态获取url$protocol = (!empty($_SERVER[HTTPS]) && $_SERVER[HTTPS] !== off || $_SERVER[SERVER_PORT] == 443) ? "https://" : "http://";$url = $protocol.$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI];echo $url;//echo '<br>';//2.获取signature$signature = 'jsapi_ticket='.$jsapi_ticket.'&noncestr='.$noncestr.'&timestamp='.$timestamp.'&url='.$url;//echo '<br>';$signature = sha1($signature);$this -> assign('name','慕课');$this -> assign('timestamp',$timestamp);$this -> assign('noncestr',$noncestr);$this -> assign('signature',$signature);$this -> display('Index/share');}}//class end

三、share.html代码

<!DOCTYPE html><html lang="en"><head><title>微信js分享接口</title><meta charset="utf-8"><meta name="viewpoint" content="initial-scale=1.0;width=device-width" /><script src="http://res./open/js/jweixin-1.2.0.js"></script></head><body>{$name}<script>alert(location.href.split('#')[0]);console.log(location.href.split('#')[0])wx.config({debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。appId: 'wxb20bebb764546087', // 必填,公众号的唯一标识timestamp: '{$timestamp}', // 必填,生成签名的时间戳nonceStr: '{$noncestr}', // 必填,生成签名的随机串signature: '{$signature}',// 必填,签名jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage','chooseImage','scanQRCode'] // 必填,需要使用的JS接口列表});wx.ready(function(){wx.onMenuShareTimeline({title: 'test1', // 分享标题link: '', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl: '/img/bd_logo1.png?where=super', // 分享图标success: function () {// 用户点击了分享后执行的回调函数},cancel: function () {// 用户点击了取消分享后执行的回调函数}});wx.onMenuShareAppMessage({title: 'test2', // 分享标题desc: 'test imooc', // 分享描述link: 'http://www.baidu,com', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl: '/img/bd_logo1.png?where=super', // 分享图标type: 'link', // 分享类型,music、video或link,不填默认为linkdataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空success: function () {alert('分享成功');// 用户点击了分享后执行的回调函数}});});function showImg(){wx.chooseImage({count: 1, // 默认9sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有success: function (res) {var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片}});}function scan(){wx.scanQRCode({needResult: 0, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有success: function (res) {var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果}});}wx.error(function(res){});</script><button onclick='showImg();'>img</button><button onclick='scan();'>scan</button></body></html>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。