微信小程序2021年4月13日调整回收wx.getUserInfo接口可获取用户授权的个人信息能力
调整后4月13日之后发布的小程序wx.getUserInfo的接口都将失效,因此导致小程序的登录会出现灰色头像和微信用户,后台也是获取不到数据。
已经失效了需要“「头像昵称填写能力」支持获取用户头像昵称”
简单修复方法
先用getUserProfile获取 userInfo用户对象信息,在用wx.getUserInfo 获取encryptedData和iv 至此后面的登录流程不变只是提交数据的时候多提交一个userInfo信息到后台,操作如下:
1、登录页面修改
小程序路径pages/auth/index.wxml
- <image class='logo' src='{{shop_logo}}'></image>
- <view class='title'><text class='title-underline'>{{shop_name}}</text></view>
- <view class='message'><text>您尚未登录需要获取您的授权后进入商城</text></view><button bindtap='close'
- class='cancelBtn'>暂不登录</button>
- <button bindtap='bindGetUserInfobu' class='authBtn' >立即登录</button>
小程序登录方法多加了一个方法bindGetUserInfobu() 然后获取到userInfo用户对象信息在用wx.getUserInfo,提交时多提交一个userInfo用户对象信息。
2、登录页面js修改
小程序路径pages/auth/index.js
标颜色的为新增代码
- // 修复登录
- bindGetUserInfobu(){
- //getUserProfile获取用户信息
- wx.getUserProfile({
- lang:'zh_CN',
- desc: '用于完善会员资料',
- success: (res) =>{
- console.log(res)
- //getUserInfo获取认证oid解密
- wx.getUserInfo({
- lang: 'zh_CN',
- }).then(r=>{
- console.log(r)
- r.userInfo=res.userInfo
- let n={
- detail:r
- }
- this.bindGetUserInfo(n)
- })
- }
- })
- },
- // 修复登录
- bindGetUserInfo: function(n) {
- wx.showLoading({
- title: "加载中"
- }), wx.login({
- success: function(i) {
- console.log([ 1, i ]), o.post("wxapp/login", {
- code: i.code
- }, function(i) {
- console.log([ 2, i ]), i.error ? o.alert("获取用户登录态失败:" + i.message) : o.get("wxapp/auth", {
- data: n.detail.encryptedData,
- iv: n.detail.iv,
- sessionKey: i.session_key,
- userInfo:n.detail.userInfo // 修复登录
- }, function(s) {
- console.log([ 3, s ]), 1 == s.isblack && wx.showModal({
- title: "无法访问",
- content: "您在商城的黑名单中,无权访问!",
- success: function(o) {
- o.confirm && e.close(), o.cancel && e.close();
- }
- }), n.detail.userInfo.openid = s.openId, n.detail.userInfo.id = s.id, n.detail.userInfo.uniacid = s.uniacid;
- var t = e.setCache("userinfo", n.detail.userInfo), a = e.setCache("userinfo_openid", n.detail.userInfo.openid), c = e.setCache("userinfo_id", s.id);
- console.log(e.getCache("userinfo")), console.log(e.getCache("userinfo_openid")),
- console.log(e.getCache("userinfo_id"));
- var l = e.setCache("login_session_key", i.session_key);
- 0 != t && 0 != a && 0 != c && 0 != l || o.alert("获取用户信息失败!"), console.log(e.getCache("login_session_key")),
- e.getSet(), e.scanCarts(), wx.navigateBack({
- changed: !0
- });
- });
- });
- },
- fail: function() {
- o.alert("获取用户信息失败!");
- },
- complete: function() {
- wx.hideLoading();
- }
- });
- },
3、后台代码修改
后台代码 ewei_shopv2/plugin/app/core/mobile/wxapp.php
只修改public function auth()处代码即可
- /**
- * 微信小程序登录
- */
- public function auth()
- {
- global $_GPC;
- global $_W;
- $encryptedData = trim($_GPC["data"]);
- $iv = trim($_GPC["iv"]);
- $sessionKey = trim($_GPC["sessionKey"]);
- //修复登录
- $userInfo=$_GPC["userInfo"];
- //修复登录
- if (empty($encryptedData) || empty($iv)) {
- return app_error(AppError::$ParamsError);
- }
- $pc = new WXBizDataCrypt($this->appid, $sessionKey);
- $errCode = $pc->decryptData($encryptedData, $iv, $data);
- if ($errCode == 0) {
- $data = json_decode($data, true);
- $this->refine($data["openId"]);
- $mmember = m("member")->getMember("sns_wa_" . $data["openId"]);
- //登录修正
- if(is_array($userInfo)){
- $data=array_merge($data, $userInfo);
- }
- //登录修正
- if (empty($member)) {
- $member = array("uniacid" => $_W["uniacid"], "uid" => 0, "openid" => "sns_wa_" . $data["openId"], "nickname"=>!empty($data["nickName"]) ? $data["nickName"] : "", "avatar" => !empty($data["avatarUrl"]) ? $data["avatarUrl"] : "", "gender" => !empty($data["gender"]) ? $data["gender"] : "-1", "openid_wa" => $data["openId"], "comefrom" => "sns_wa", "createtime" => time(), "status" => 0);
- pdo_insert("ewei_shop_member", $member);
- $id = pdo_insertid();
- $data["id"] = $id;
- $data["uniacid"] = $_W["uniacid"];
- if (method_exists(m("member"), "memberRadisCountDelete")) {
- m("member")->memberRadisCountDelete();
- }
- } else {
- $updateData = array("nickname" => !empty($data["nickName"]) ? $data["nickName"] : "", "avatar" => !empty($data["avatarUrl"]) ? $data["avatarUrl"] : "", "gender" => !empty($data["gender"]) ? $data["gender"] : "-1");
- pdo_update("ewei_shop_member", $updateData, array("id" => $member["id"], "uniacid" => $member["uniacid"]));
- $data["id"] = $member["id"];
- $data["uniacid"] = $member["uniacid"];
- $data["isblack"] = $member["isblack"];
- }
- if (p("commission")) {
- p("commission")->checkAgent($member["openid"]);
- }
- return app_json($data, $data["openId"]);
- }
- return app_error(AppError::$WxAppError, "登录错误, 错误代码: " . $errCode);
- }
ok,修复完成重新编译下是不是可以获取用户信息了。
以上三个文件下载:
https://cjw41415.lanzouf.com/iiXqc0umm9nc
密码:1iyr