thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
本文实例讲述了thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能。分享给大家供大家参考,具体如下:
php代码
functioncurlHtml($url){ $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_HEADER,0); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); $output=curl_exec($ch); //释放curl句柄 curl_close($ch); return$output; } classWechat { public$errmsg; //微信登录获取用户信息 publicfunctiongetUserInfo(){ //1.准备scope为snsapi_base网页授权页面 $redirect_url=config('system.site_url').$_SERVER["REQUEST_URI"]; $baseurl=urlencode($redirect_url); $snsapi_base_url='https://open.weixin.qq.com/connect/oauth2/authorize?appid='.config('system.appid').'&redirect_uri='.$baseurl.'&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect'; //2.静默授权,获取code //页面跳转至redirect_uri/?code=CODE&state=STATE $code=input('code'); if(!isset($code)||empty($code)){ header('Location:'.$snsapi_base_url);exit(0); } //3.通过code换取网页授权access_token和openID $curl='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.config('system.appid').'&secret='.config('system.appsecret').'&code='.$code.'&grant_type=authorization_code'; $content=curlHtml($curl); $result=json_decode($content,true); if(!isset($result['openid'])){ $this->errmsg=$result['errmsg'];returnfalse; } $openid=$result['openid']; $userinfo=$this->getUserByOpenid($openid); return$userinfo; } privatefunctiongetUserByOpenid($openid){ //获取access_token $token_info=$this->curlGetWxAccessToken(); $access_token=$token_info['value']; //通过OpenID来获取用户基本信息 $url="https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid."&lang=zh_CN"; $content=curlHtml($url); $result=json_decode($content,true); return$result; } /** *[wxShare微信分享] *@param[type]$url[description] *@return[type][description] */ publicfunctionwxShare() { $noncestr=uniqid(); $timestamp=time(); $url=config('system.site_url').$_SERVER["REQUEST_URI"]; //$redis=new\Redis; //$ticket_key='wx_ticket'; //$ticket=$redis->get($ticket_key); //if(!$ticket){ //$ticket=$this->getJsapiTicket(); //$redis->set($ticket_key,$ticket); //$redis->expire($ticket_key,7200); //} $ticket=$this->getJsapiTicket(); if($ticket){ $str='jsapi_ticket='.$ticket.'&noncestr='.$noncestr.'×tamp='.$timestamp.'&url='.$url; $signature=sha1($str); $return_data=[ 'noncestr'=>$noncestr, 'timestamp'=>$timestamp, 'signature'=>$signature, 'appid'=>config('system.appid'), 'link'=>$url, ]; return$return_data; } } privatefunctiongetJsapiTicket() { $map['keyname']='Ticket'; $map['modifytime']=array('GT',time()-7200); $return=WxTokenModel::getOne('*',$map); if($return){ return$return['value']; }else{ $token_info=$this->curlGetWxAccessToken(); $access_token=$token_info['value']; $url='https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.$access_token.'&type=jsapi'; $output=curlHtml($url); $data=json_decode($output,true); if(isset($data['errcode'])&&$data['errcode']==0){ $condition['keyname']='Ticket'; $update_data['modifytime']=time(); $update_data['value']=$data['ticket']; $up_result=WxTokenModel::updateData($condition,$update_data); if($up_result!==false){ return$data['ticket']; } } } returnfalse; } privatefunctioncurlGetWxAccessToken() { $map['keyname']='AccessToken'; $map['modifytime']=array('GT',time()-7200); $return=WxTokenModel::getOne('*',$map); if($return){ return$return; }else{ $url='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.config('system.appid').'&secret='.config('system.appsecret'); $output=curlHtml($url); $data=json_decode($output,true); if($data&&isset($data['access_token'])){ $condition['keyname']='AccessToken'; $update_data['modifytime']=time(); $update_data['value']=$data['access_token']; $up_result=WxTokenModel::updateData($condition,$update_data); if($up_result!==false){ return$update_data; } } } returnfalse; } }
html代码
更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《ZendFrameWork框架入门教程》及《PHP模板技术总结》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。