laravel7 微信小程序获取openid
l 通过微信公众号获取appid和appsecret
l 在小程序页面中编写代码获取code
l 在后端编写方法,换取openid
l 添加一个按钮,给按钮一个开放能力 open-type="getUserInfo"
l 在小程序逻辑文件中 实现在对应的事件方法 bind:getuserinfo 中通过event对象获取用户的信息。
l 发送信息给服务器,获取结果后进行数据入库
l 编写接收接口,以openid标识来查询,进行用户信息修改后入库
1:微信页面增加触摸事件
<view> <l-button type="success" bindtap="login" open-type="getUserInfo" >授权登录</l-button> </view>
{1}:json
{ "usingComponents": { "l-button":"/miniprogram_npm/lin-ui/button" } }
2:微信js
// pages/my/my.js Page({ /** * 页面的初始数据 */ data: { }, // 触发点击事件 login(e){ // 获取用户信息 wx.getUserProfile({ desc: 'desc', success:res=>{ if(res.userInfo){ // 昵称 let nickName=res.userInfo.nickName // 头像 let avatarUrl=res.userInfo.avatarUrl 获取code码 // wx.login({ success:res=>{ wx.request({ // 请求的网址 url: 'http://www.laravel7.com/openid', //仅为示例,并非真实的接口地址 // 方式 method:'post', // 发送的数据 data: { code:res.code, nickName:nickName, avatarUrl:avatarUrl }, header: { 'content-type': 'application/json' // 默认值 }, // 结果 success (res) { console.log(res.data.meg); } }) } }) } } }) } })
3:laravel7路由也就是小程序请求的网址
//openid 获取 Route::post('openid', 'admin\XcxLoginController@sendCode');
4:控制器代码:
<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Models\Wxuser; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class XcxLoginController extends Controller { // public function sendCode(Request $request){ $params=$request->post(); // 获取appid $appid = "wx64832aa6eaea82b0"; // 从微信公众平台获得secret $secret = "95e2acaf355dbcb443f5cd4748a152ed"; // 发送请求换取openid和sessionkey $url = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=".$params['code']."&grant_type=authorization_code"; // 暂使用file_get_contents()发送请求,你可以使用CURL扩展的形式实现,获取opid和session_key $res = json_decode(file_get_contents($url),true); // 给$params追加openid $params['openid']=$res['openid']; // 给$params追加session_key $params['session_key']=$res['session_key']; // 查看数据库里是否有openid,有就修改,没有就添加 $res= Wxuser::where('openid',$params['openid'])->first(); // 禁止code码入库 unset($params['code']); // 有就修改用户的额openID if ($res){ Wxuser::where('openid',$params['openid'])->update($params); return ['code'=>201,'meg'=>'修改成功','data'=>'']; }else{ // 没有就添加新用户 $add=Wxuser::add($params); return ['code'=>200,'meg'=>'添加成功','data'=>$add]; } } }
5:模型添加代码:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Wxuser extends Model { // protected $table = 'wxuser'; protected $guarded=[]; //添加 public static function add($params) { $obj = new self(); $obj->avatarUrl = $params['avatarUrl']; $obj->nickName = $params['nickName']; $obj->openid = $params['openid']; $obj->session_key = $params['session_key']; return $obj->save(); } }
表:
CREATE TABLE `wxuser` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nickName` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL, `openid` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL, `session_key` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL, `avatarUrl` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL, `updated_at` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, `created_at` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现