记录使用EasyWeChat做微信小程序登陆和其他操作

1.微信小程序登陆

关于后端:fastadmin加密生成token-CSDN博客

思路:

通过easywechat+fastadmin,

(1)== 用户端登陆(获取code) -> 请求后端接口获取session_key -> 用户端保存session_key

复制代码
use EasyWeChat\Foundation\Application;
use EasyWeChat\Factory;


public function getSessionKey(){
        $code = $this->request->post('code');
        $config = [
            'app_id' => 'wx65ae3f41d0714e10',
            'secret' => 'e79ea0badcc0a4f1c549c55a530660cf',
            'token' => 'easywechat',
            'aes_key' => '......',

            'http' => [
                'throw'  => true, // 状态码非 200、300 时是否抛出异常,默认为开启
                'timeout' => 5.0,
                'retry' => true, // 使用默认重试配置
            ],
        ];
        $app = Factory::miniProgram($config); // 这个是小程序的
//        $app = Factory::officialAccount($config); // 这个是公众号的
        // 使用 SDK 中的相关功能来获取 session_key
        $data = $app->auth->session($code);
        $this->success('获取session_key成功', $data);
    }

此刻就获取到了:session_key(很重要)、openid。

注意这里的this指向。

复制代码
// 前端uniapp
getSessionKey() {
				var that = this
				uni.login({
					success(info) {
						console.log('login信息', info)
						var postData = {
							code: info.code
						}
						getApp().posturl('Wechat/getSessionKey', postData).then(res => {
							console.log(res)
							that.session_key = res.data.session_key
							console.log('========',that.session_key)
						});
					}
				})
			}
2.微信小程序授权用户信息

用户端获取用户信息(获取 iv + encryptedData + signature + session_key )-> 请求后端接口获取token -> 用户端保存token (可以控制时间)

复制代码
public function getUserInfo(){
        // 获取得到avatarUrl、nickName、openId,进行存储
        $data = $this -> app -> encryptor->decryptData($this -> post['session_key'], $this -> post['iv'], $this -> post['encryptedData']);
        $userModel = new HcdrspUser();
        $result = $userModel->where('openid', $data['openId'])->find();
        if($result){
            $this->success('获取用户信息成功', $data);
        }else{
            $userModel->openid = $data['openId'];
            $userModel->avatarUrl = $data['avatarUrl'];
            $userModel->name = $data['nickName'];
            // 创建时间
            $userModel->createtime = time();
            $userModel->save();
            $this->success('欢迎新用户', $data);
        }
    }

getuserinfo(e){
				console.log('getuserinfo用户信息',e);
				console.log('session_key信息',this.session_key);
				var postData = {
					iv: e.detail.iv,
					encryptedData:e.detail.encryptedData,
					session_key: this.session_key
				}
				getApp().posturl('Wechat/getUserInfo', postData).then(res => {
					console.log(res)
					this.avatarUrl = res.data.avatarUrl
					this.nickName = res.data.avatarUrl
					let openId = res.data.openId
					uni.setStorageSync('openId',openId)
				});
			},
3. 微信小程序获取手机号

前端:

复制代码
<button open-type="getPhoneNumber" @getphonenumber="onGetPhoneNumber">授权并获取手机号</button>

onGetPhoneNumber(e){
				if(this.nickName === ''){
					uni.showToast({
						icon:'none',
						title:'请先登陆'
					})
					return
				}
				console.log('getPhoneNumber用户信息',e);
				console.log('session_key信息',this.session_key);
				var postData = {
					iv: e.detail.iv,
					encryptedData:e.detail.encryptedData,
					session_key: this.session_key
				}
				getApp().posturl('Wechat/getPhoneNumber', postData).then(res => {
					console.log(res)
					this.phoneNumber = res.data.phoneNumber
				});
			},

后端:

复制代码
/*
     * 获取手机号
     */
    public function getPhoneNumber(){
        $data = $this -> app -> encryptor->decryptData($this -> post['session_key'], $this -> post['iv'], $this -> post['encryptedData']);
        $userModel = new HcdrspUser();
        $result = $userModel->where('phone', $data['phoneNumber'])->find();
        if($result){
            $this->success('已存在手机号', $data);
        }else{
            $userModel->phone = $data['phoneNumber'];
            $userModel->save();

            $this->success('获取手机号成功', $data);
        }
    }
相关推荐
李纲明12 小时前
微信小程序次卡跨店对不上账或前台随手改余次:先核流水只增不改与统一日切,再查冲正权限与总部只读
微信小程序·devdiy·核销流水·跨店次卡·日切对账·冲正权限·总部只读
李纲明15 小时前
微信小程序维修拆机后口头加价或未确认就开工:先核验机快照与报价确认,再查补充报价与取机核验
微信小程序·devdiy·维修验机·报价确认·报价快照·补充报价·取机核验
wx1qq1com16 小时前
一桩带几台车:共享租赁桩位配比、取电与结算闭环设计
物联网·微信小程序·小程序
李纲明17 小时前
微信小程序场地长租月底对不上或口头占场撞场:先核合约预约与核销流水出账,再查附加费与转租归属
微信小程序·devdiy·场地长租·月结账单·核销流水·附加费·转租归属
2401_8796925117 小时前
微信小程序照相与摄像功能实现——chooseImage 与 chooseVideo 详解
微信小程序·小程序·notepad++
律宏阔1 天前
微信小程序 + Taro + TDesign 去掉 [&&&],让普通 Tailwind 类接管局部样式
前端·微信小程序·taro
律宏阔1 天前
微信小程序 + Taro + 多语言实现与国际化检查实录
前端·微信小程序·taro
李纲明2 天前
微信小程序 getSystemInfo 提示已废弃、屏幕高度算错胶囊还对不齐?getWindowInfo 和 getDeviceInfo 怎么接才稳
javascript·微信小程序·小程序·小程序开发·devdiy
dreams_dream3 天前
微信小程序-使用npm包
微信小程序·小程序·npm
L1mbo3 天前
Lite模式 缓解微信开发者工具卡顿,附 uni-app 实践方案
前端·微信小程序