thinkphp5.1手动连接mysql数据库(thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例)
类别:编程学习 浏览量:2454
时间:2021-10-28 10:12:40 thinkphp5.1手动连接mysql数据库
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例本文实例讲述了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 ) || 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' ]; 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> |
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。
原文链接:https://blog.csdn.net/fangdong88/article/details/78521111
您可能感兴趣
- mysqlgroupby用法(MySQL Group by的优化详解)
- mysql查看慢查询(MySQL 慢查询日志深入理解)
- mysql主从复制如何解决延迟(MySQL 8.0.23中复制架构从节点自动故障转移的问题)
- 如何重新配置mysql的端口(如何快速修改MySQL用户的host属性)
- mysql用户登录命令(mysql的登陆和退出命令格式)
- mysql索引应该注意的地方(关于MySQL索引知识的小妙招)
- mysql 主从配置详解(MySQL 8.0.15配置MGR单主多从的方法)
- mysql读写分离怎么实现的(详解MySQL主从复制及读写分离)
- mysqldecimal类型数据转换(mysql decimal数据类型转换的实现)
- Mysql官方性能测试工具mysqlslap的使用简介(Mysql官方性能测试工具mysqlslap的使用简介)
- mysql有数据但筛选值为空(解决从集合运算到mysql的not like找不出NULL的问题)
- mysql常用四种日志(MySQL 撤销日志与重做日志Undo Log与Redo Log相关总结)
- mysql怎么建立主键外键(mysql 实现设置多个主键的操作)
- mysql有哪些索引和聚簇索引(MySQL 独立索引和联合索引的选择)
- mysql的count知识(MySQL中MTR的概念)
- mysql报错103(解决Mysql报Invalid default value for“operate_time”错误的问题)
- 书法欣赏 宋.志南诗《绝句》(宋.志南诗绝句)
- 每周一首古诗 《绝句》(每周一首古诗绝句)
- 蓝色代表什么(蓝色代表什么性格的人)
- 红色代表什么(红色代表什么情感和含义)
- 南宋志南和尚绝句 杨柳风似庙中来(南宋志南和尚绝句)
- 今天要穿什么颜色(今天要穿什么颜色的衣服最吉利)
热门推荐
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9