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
您可能感兴趣
- 怎么运行xampp中的mysql(本地安装了mysql导致xampp的mysql服务启动失败)
- python怎样读取mysql数据(使用Python将Mysql的查询数据导出到文件的方法)
- 用mysql编写test数据库(MySQL制作具有千万条测试数据的测试库的方法)
- docker部署tomcat(Docker安装Tomcat、MySQL和Redis的步骤详解)
- mysql数据库触发器(MySQL中使用游标触发器的方法)
- mysql用户授权的步骤(mysql创建用户并赋予用户权限详细操作教程)
- 对mysql索引的理解(详解MySQL 8.0 之不可见索引)
- mysql架构示意图(MySQL创建横向直方图的解决方案)
- centos7离线安装mysql5.7(CentOS7.5 安装MySql的教程)
- 怎么用docker中的mysql连接数据库(连接docker里面的mysql失败解决方法)
- mysql 删除数据回收空间(浅谈为什么MySQL不建议delete删除数据)
- mysql触发器怎么添加(MySQL触发器的使用场景及方法实例)
- 修改mysql默认超时(MySQL sql_mode修改不生效的原因及解决)
- mysql密码设置(mysql密码中有特殊字符&在命令行下登录的操作)
- mysql表结构设计分享(MySql开发之自动同步表结构)
- mysql查看执行计划
- 弄清楚了销 售 买 卖这四个字,母婴生意做起来就没那么难了(弄清楚了销售买)
- 数读 买首饰金是 投资黄金 吗 买金容易卖金难(数读买首饰金是)
- 销 售 买 卖 你真的了解这四个字了吗(销售买)
- 谢娜是得罪快乐大本营造型师了吗 全场被黑化(谢娜是得罪快乐大本营造型师了吗)
- 前《iLOOK》时装总监 《快乐大本营》御用造型师上线(快乐大本营御用造型师上线)
- 释小龙晒杀青照片 多重身份惹观众期待(释小龙晒杀青照片)
热门推荐
- docker进入容器的命令(Docker 最常用的镜像命令和容器命令详解)
- thinkphp5怎么设置当前的模块(thinkPHP5.1框架中Request类四种调用方式示例)
- 如何找到mysqlroot密码(WDCP管理面板忘记MYSQL ROOT密码及重置后台登录密码的方法汇总)
- C#选择排序
- dedecms关闭站点(dedecms搬家后出现/include/templets/default/index.htm Not Found!解决方案)
- Windows2012配置SQLServer2014AlwaysOn的图解(Windows2012配置SQLServer2014AlwaysOn的图解)
- 云服务器无法访问网站(网站放在香港云服务器上,出现卡顿怎么解决?)
- linux中输出和追加命令(linux驱动开发中常用函数copy_from_user open read write详解)
- pythonnumpy定义一个2*2数组(对python numpy.array插入一行或一列的方法详解)
- python数据表教程(详解Python sys.argv使用方法)