thinkphp5框架结合mysql实现微信登录和自定义分享链
网络编程 2021-07-04 23:05www.168986.cn编程入门
这篇文章主要介绍了thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能,涉及基于curl的微信接口调用、数据库操作等相关使用技巧,需要的朋友可以参考下
本文实例讲述了thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能。分享给大家供大家参考,具体如下:
php代码
function curlHtml($url){ $ch = curl_init(); curl_set($ch, CURLOPT_URL, $url); curl_set($ch, CURLOPT_RETURNTRANSFER, 1); curl_set($ch, CURLOPT_HEADER, 0); curl_set($ch, CURLOPT_SSL_VERIFYPEER, false); curl_set($ch, CURLOPT_SSL_VERIFYHOST, false); $output = curl_exec($ch); //释放curl句柄 curl_close($ch); return $output; } class Wechat { public $errmsg; //微信登录获取用户信息 public function getUserInfo() { //1.准备scope为snsapi_base网页授权页面 $redirect_url = config('system.site_url') . $_SERVER["REQUEST_URI"]; $baseurl = urlencode($redirect_url); $snsapi_base_url = 'https://open.weixin.qq./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换取网页授权aess_token和openID $curl = 'https://api.weixin.qq./sns/oauth2/aess_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'];return false; } $openid = $result['openid']; $userinfo = $this->getUserByOpenid($openid); return $userinfo; } private function getUserByOpenid($openid) { //获取aess_token $token_info = $this->curlGetWxAessToken(); $aess_token = $token_info['value']; //通过OpenID来获取用户基本信息 $url = "https://api.weixin.qq./cgi-bin/user/info?aess_token=".$aess_token."&openid=".$openid."&lang=zh_CN"; $content = curlHtml($url); $result = json_decode($content, true); return $result; } /** * [wxShare 微信分享] * @param [type] $url [description] * @return [type] [description] */ public function wxShare() { $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; } } private function getJsapiTicket() { $map['keyname'] = 'Ticket'; $map['modifytime'] = array('GT', time() - 7200); $return = WxTokenModel::getOne('*', $map); if ($return) { return $return['value']; } else { $token_info = $this->curlGetWxAessToken(); $aess_token = $token_info['value']; $url = 'https://api.weixin.qq./cgi-bin/ticket/getticket?aess_token=' . $aess_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']; } } } return false; } private function curlGetWxAessToken() { $map['keyname'] = 'AessToken'; $map['modifytime'] = array('GT', time() - 7200); $return = WxTokenModel::getOne('*', $map); if ($return) { return $return; } else { $url = 'https://api.weixin.qq./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['aess_token'])) { $condition['keyname'] = 'AessToken'; $update_data['modifytime'] = time(); $update_data['value'] = $data['aess_token']; $up_result = WxTokenModel::updateData($condition, $update_data); if ($up_result !== false) { return $update_data; } } } return false; } }
html代码
<script type="text/javascript" src="http://res.wx.qq./open/js/jweixin-1.2.0.js"></script> <script> wx.config({ debug: false, appId: '{$appid}', // 必填,公众号的唯一标识 timestamp: '{$timestamp}', // 必填,生成签名的时间戳 nonceStr: '{$noncestr}', // 必填,生成签名的随机串 signature: '{$signature}',// 必填,签名,见附录1 jsApiList: ['onMenuShareTimeline'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function () { // 分享到朋友圈 wx.onMenuShareTimeline({ title: '', // 名 link: '{$link}', // 地址 imgUrl: '', // 分享的图标 suess: function () { // 用户确认分享后执行的回调函数 }, cancel: function () { // 用户取消分享后执行的回调函数 } }); }); </script>
更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》及《》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。
编程语言
- 机械手焊接机器人编程 机械手焊接设备编程
- vb数据库编程实例,vb做数据库
- tiobe世界编程语言排行榜,全球编程语言排行
- 成都java编程培训 成都it编程培训中心
- 编程基础培训,编程基础知识培训
- flash游戏编程基础教程,flash游戏开发教程
- 不会英语能学编程吗 不会英语可以学程序员吗
- 爱心代码编程C语言 爱心代码编程c语言公式
- c语言编程学习入门 c语言编程快速入门
- 西门子plc编程培训 西门子plc编程培训班
- 哪里可以学编程 台州哪里可以学编程
- 少儿编程哪个好 少儿编程哪个品牌好
- 编程是什么意思,图形编程是什么意思
- c语言编程软件下载,c语言编程软件在哪下载
- java编程软件下载,java编程下载手机版
- ug编程培训学校,ug编程培训教程