2017-09-13 16:20:56
<?php class JSSDKAction extends Action { public function _initialize(){ define('APP_ID','xxxxxxxxxxxxxxxx'); define('APP_SEC','xxxxxxxxxxxxxxxxxxxxxxxx'); } public function deal(){ if(!empty($_POST['curl'])){ $url = $_POST['curl']; $wx_token = $this->getAccessToken(APP_ID,APP_SEC); //获取ac_token (生存时间7200 , 获取后需设置缓存) $ticket = $this->getTicket($wx_token); // 使用token 获取JsApiTicket(调用微信临时票据;生存时间7200 , 获取后需设置缓存) $signPackage = $this->getSignPackage($url, $ticket['ticket'], APP_ID);//获取JSSDK签名信息 ,通过config接口注入权限验证配置 echo json_encode($signPackage); } } /** * 获取微信基础AccessToken * @param type $getNewToken 是否强制刷新 * @return type */ public function getAccessToken($appid,$appsecret) { $key = 'AccessToken_' . $appid . '_' . $appsecret; $wx_token = ''; $accessToken = $this->getWxAccessToken( $appid, $appsecret); $wx_token = $accessToken['access_token']; return $wx_token; } /** * 获取基础AccessToken * @param type $appid * @param type $appSecret * @param type $type * @return type */ public function getWxAccessToken($appid, $appSecret, $type = 'client_credential') { $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=' . $type . '&appid=' . $appid . '&secret=' . $appSecret; $data = $this->http($url,null ,'GET'); $json = json_decode($data, true); return $json; } /** * 获取调用微信临时票据 * @param type $access_token 全局唯一票据 * @param type $type * @return type */ public function getTicket($access_token, $type = 'jsapi') { $url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=' . $access_token . '&type=' . $type; $result = $this->http($url); $json = json_decode($result, true); return $json; } /** * 获取JSSDK签名信息 * @param type $url * @param type $ticket * @return type */ public function getSignPackage($url, $ticket ,$appId) { $timestamp = time(); $nonceStr = $this->getNonceStr(); // 这里参数的顺序要按照 key 值 ASCII 码升序排序 $string = "jsapi_ticket=$ticket&noncestr=$nonceStr×tamp=$timestamp&url=$url"; $signature = sha1($string); $signPackage = array( 'appId' => $appId, 'nonceStr' => $nonceStr, 'timestamp' => $timestamp, 'url' => $url, 'signature' => $signature, ); return $signPackage; } public function getNonceStr($length = 16) { $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; $str = ''; for ($i = 0; $i < $length; $i++) { $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } return $str; } public function http($url, $param = null, $method = 'POST') { try { $opts = array( CURLOPT_TIMEOUT => 30, CURLOPT_RETURNTRANSFER => 1, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, ); /* 根据请求类型设置特定参数 */ $opts[CURLOPT_URL] = $url; if (strtoupper($method) == 'POST' && !is_null($param)) { $opts[CURLOPT_POST] = 1; $opts[CURLOPT_POSTFIELDS] = $param; if (is_string($param)) { //发送JSON数据 $opts[CURLOPT_HTTPHEADER] = array( 'Content-Type: application/json; charset=utf-8', 'Content-Length: ' . strlen($param), ); } } /* 初始化并执行curl请求 */ $ch = curl_init(); curl_setopt_array($ch, $opts); $data = curl_exec($ch); $error = curl_error($ch); curl_close($ch); if ($error) {//发生错误 //throw new \Exception('请求发生错误:' . $error); $data = array('errcode' => -1, 'errmsg' => $error); } } catch (\Exception $ex) { $data = array('errcode' => -1, 'errmsg' => $ex->getMessage()); } return $data; } } 前台 var curl = location.href; $.post("{:U('JSSDK/deal')}",{"curl":curl},function(data){ var info = eval("("+data+")"); wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: info.appId, // 必填,公众号的唯一标识 timestamp: info.timestamp, // 必填,生成签名的时间戳 nonceStr: info.nonceStr, // 必填,生成签名的随机串 signature: info.signature,// 必填,签名,见附录1 jsApiList: ['onMenuShareTimeline'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ wx.onMenuShareTimeline({ title: '明日学院发现作品', // 分享标题 link: curl, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 imgUrl: '{:UPLOAD_SERVER}{$info.cover}', // 分享图标 success: function () { // 用户确认分享后执行的回调函数 }, cancel: function () { // 用户取消分享后执行的回调函数 } }); }); });
更多精彩内容:各种AI课程、技能课程、黑科技软件、网站小程序源码、副业小项目、PPT模板等精品素材、电商课程、推广引流课程等,尽在 天边资源网 。