thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
发布:smiling 来源: PHP粉丝网 添加日期:2021-12-11 12:50:30 浏览: 评论:0
本文实例讲述了thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能,分享给大家供大家参考,具体如下:
php代码
- function curlHtml($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;
- }
- 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.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) || emptyempty($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'];return false;
- }
- $openid = $result['openid'];
- $userinfo = $this->getUserByOpenid($openid);
- return $userinfo;
- }
- private function getUserByOpenid($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]
- */
- 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->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'];
- }
- }
- }
- return false;
- }
- private function curlGetWxAccessToken()
- {
- $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;
- }
- }
- }
- return false;
- }
- }
html代码
- <script type="text/javascript" src="http://res.wx.qq.com/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: '', // 分享的图标
- success: function () {
- // 用户确认分享后执行的回调函数
- },
- cancel: function () {
- // 用户取消分享后执行的回调函数
- }
- });
- });
- </script>
Tags: thinkphp5微信登录 mysql
相关文章
- ·thinkphp+mysql实现的权限管理(2014-04-11)
- ·thinkPHP使用pclzip打包备份mysql数据库的方法(2021-07-31)
- ·ThinkPHP框架实现的MySQL数据库备份功能示例(2021-09-17)
- ·thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解(2021-12-04)
- ·thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结(2021-12-29)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)