人人商城小程序 java版_人人商城小程序用户授权问题

问题:在微擎的人人商城的小程序里面,会出现用户反复授权不成功的情况

分析:授权的流程是,一个未进入过小程序界面的用户进入界面后,wx.getUserinfo会获取用户的openid创建一个用户,并且存在cache里面,然后再点进入这个会员中心界面,会判断你的这个用户是无效的,然后进入授权界面,授权界面授权后,在进入首页,首页再会调用wxapp.auth这个api接口去修改这个openid的会员昵称,图片等信息

关键点:后台数据库中,shop_member表中,存在一部分为sns_wa_sns_wa_xxxxx这一类的openid,这一类的openid是错误的,导致这一部分用户就一直重复在首页更新数据更新不了,进入用户后,再授权,授权进入首页还是没法更新 这样一种死循环的情况

注意:如果你的数据库中不存在sns_wa_sns_wa_xxx之类的前缀重复openid的话,那么跟下面的解决方案没得太大关系.

死循环的原因:用户进入小程序首页授权后,创建了一个sns_wa_xxx的openid并且存入了缓存,然后再一次进入首页的时候,会触发check()方法,check方法会把这个sns_wa_xxx再加上sns_wa前缀,组成了sns_wa_sns_wa_xxx的openid来查询,查询不到,然后后面又会触发什么auth方法验证,然后就导致了一系列的错误.

解决关键点:

addons\ewei_shopv2\plugin\app\core\mobile\wxapp.php(这个是小程序调用的方法API后台接口) 在这个里面有两个function,一个是auth()->更新和创建用户的方法,另一个是check()->检查会员数据有效性的方法

auth()方法排除重复的sns_wa前缀

5a51d718443879eb4c62519353b2c7d7.png

check()方法排除重复的sns_wa前缀

b87bdb0dcd7ade7820c9a9786bad5e49.png

//更新:

//注:小程序中pages/messages/auth/index.js 这个是用户的授权js

//注:如果对于js比较熟悉的话,可以直接修改小程序的授权页面,用授权页面获取到用户的openid,nickename之类的信息后,然后写一个API接口来验证你的信息是否注册,注册过就不管,把个人昵称和头像更新一下.

修改这个pages/messages/auth/index.js

var t = getApp();

var e = require("../../../utils/core.js");//先加载require.js组件

//修改bind 方法 在bind中如果获取到了用户信息,就直接传参到借口

bind: function() {

var t = this, e = setInterval(function() {

wx.getSetting({

success: function(n) {

var a = n.authSetting["scope.userInfo"];

//微信调用用户信息的api接口

wx.getUserInfo({

success:function(info){

var userinfo=info.userInfo;

//console.log(userinfo);

var params={

data: userinfo,

iv: info.iv,

};

//调用下面的js方法

var res_code=update_info(params);

//方法成功,回到用户界面

if(res_code==1){

wx.navigateTo({

url: 'pages/member/index/index',

})

}

}

});

//这里的update_info的js方法 作用是获取到了用户信息后,调用PHP的api接口,传递用户参数,然后php获取用户参数后根据openid更新member表的用户信息

function update_info(params){

e.get("wxapp/update_info",params,function(res){

return res.code;

})

}

//相关的PHP后台接口方法(文件地址:addons\ewei_shopv2\plugin\app\core\mobile\wxapp.php  接口调用时就用wxapp/update_info)

// 微信小程序更新个人信息(头像,昵称,等等)

public function update_info(){

global $_GPC;

global $_W;

$openid=$_GPC['openid'];

$data = $_GPC["data"];

$return_data=array();

$member=m('member')->getMember($openid);

if($member['nickname']===$data['nickName']){

$return_data=array("code"=>1,"msg"=>"数据一样,无需修改");

app_json($return_data,$member['openid']);

}

//如果存在用户信息不为空,且得到的用户信息和数据库信息不匹配,进行更新

if(!empty($member)&&strlen($data['avatarUrl'])>1&&$data['nickName']!==$member['nickname']){

$updateData = array(

'nickname' =>$data['nickName'],

'avatar' =>$data['avatarUrl'],

'gender'=>$data['gender']

);

pdo_update('ewei_shop_member', $updateData, array('id' => $member['id'], 'uniacid' => $member['uniacid']));

$data['id'] = $member['id'];

$data['uniacid'] = $member['uniacid'];

$return_data=array("code"=>1,"msg"=>"修改成功");

}else{

$return_data=array("code"=>0,"msg"=>"无数据或者其他错误,修改失败");

}

注:有些朋友问页面弹框出现了check sign fail怎么办,但凡是进入页面后弹微信自带的那种提示框,一般都是配置问题,请检查你的config文件中的什么appid,appsecret之类的,跟业务代码没得太大关系,不知道怎么办把错误黏贴拿去百度.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值