이 글의 내용은 로그인 상태(코드 포함)를 달성하기 위한 작은 프로그램과 ThinkPHP5의 조합에 관한 것입니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
WeChat 미니 프로그램에는 일반적으로 세 가지 로그인 방법이 있습니다:
1. 위챗 계정으로 로그인
2. 자신의 계정으로 등록하고 로그인하세요
3. 다른 타사 플랫폼 계정을 사용하여 로그인
1. 애플릿은 wx.login을 통해 코드를 획득하고 이를 WeChat API와 session_key 및 openid를 교환하는 백엔드로 보냅니다. 2. 문자를 무작위로 생성합니다. 문자열은 sessionid(키)로 사용되며, session_key 및 openid는 안전을 위해 redis에 저장됩니다.
저장 시 시간 제한을 설정해야 합니다.
3. 로그인 후 백엔드 서비스에 접근하게 되면
스토리지에 저장된 세션ID를 꺼내서 백엔드 코드에서 세션ID를 가져온 후
여부를 확인하면 됩니다. sessionid가 redis에 존재하는 경우 세션이 유효한 것으로 확인됩니다.
후속 코드 실행을 계속하고 그렇지 않으면 오류 처리가 수행됩니다.
var user_phone = app.globalData.user_phone; wx.login({ success: res => { // 发送 res.code 到后台换取 openId, sessionKey, unionId wx.request({ url: 'http://www.tphoutai.com/wx/index', data: { code: res.code, user_phone: user_phone, }, success: function (result) { var res = result.data; console.log(res); if(res.sendsure == 0){ wx.reLaunch({ url: '../login/login', }) }else if(res.sendsure == 1){ wx.reLaunch({ url: '../index/index', }) } } }) } })
// 后台代码: public function index(Request $request){ $url = "https://api.weixin.qq.com/sns/jscode2session"; // 参数 $params['appid']= '小程序的appid'; $params['secret']= '小程序的AppSecret'; $params['js_code']= $request -> param('code'); $params['grant_type']= 'authorization_code'; $user_phone= $request -> param('user_phone'); // 微信API返回的session_key 和 openid $arr = httpCurl($url, $params, 'POST'); $arr = json_decode($arr,true); // 判断是否成功 if(isset($arr['errcode']) && !empty($arr['errcode'])){ return json(['code'=>'2','message'=>$arr['errmsg'],"result"=>null]); } $openid = $arr['openid']; $session_key = $arr['session_key']; // 从数据库中查找是否有该openid $is_openid = Db::table('user_info')->where('openid',$openid)->find(); // 如果openid存在,更新openid_time,返回登录成功信息及手机号 if($is_openid){ // openid存在,先判断openid_time,与现在的时间戳相比,如果相差大于4个小时,则则返回登录失败信息,使客户端跳转登录页,如果相差在四个小时之内,则更新openid_time,然后返回登录成功信息及手机号; // 根据openid查询到所在条数据 $data = Db::table('user_info')->where('openid',$openid)->find(); // 计算openid_time与现在时间的差值 $time = time() - $data['openid_time']; $time = $time / 3600; // 如果四个小时没更新过,则登陆态消失,返回失败,重新登录 if($time > 4){ return json(['sendsure'=>'0','message'=>'登录失败',]); }else{ // 根据手机号更新openid时间 $update = Db::table('user_info')->where('openid', $openid)->update(['openid_time' => time()]); // 判断是否更新成功 if($update){ return json(['sendsure'=>'1','message'=>'登录成功','user_phone' => $data['user_phone']]); }else{ return json(['sendsure'=>'0','message'=>'登录失败']); } } // openid不存在时 }else{ // dump($user_phone); // 如果openid不存在, 判断手机号是否为空 if(isset($user_phone) && !empty($user_phone)){ // 如果不为空,则说明是登录过的,就从数据库中找到手机号,然后绑定openid,+时间 // 登录后,手机号不为空,则根据手机号更新openid和openid_time $update = Db::table('user_info') ->where('user_phone', $user_phone) ->update([ 'openid' => $openid, 'openid_time' => time(), ]); if($update){ return json(['sendsure'=>'1','message'=>'登录成功',]); } }else{ // 如果也为空,则返回登录失败信息,使客户端跳转登录页 return json(['sendsure'=>'0','message'=>'读取失败',]); } } }
// 前台登录 wx.request({ url: 'http://www.tphoutai.com/wx/login', data: { user_phone: user_phone }, success: function (result) { var res = result.data; if (res.sendsure == 1){ app.globalData.user_phone = that.data.user_phone; wx.reLaunch({ url: '../loading/loading', }) } } })
관련 권장 사항 : thinksphp5에서 refortmany () 모듈 이름의 명명 문제에 대한 해결책에 대한 분리 된 권장 사항 :
rrereeRreee
method and openid를 얻을 수 있습니다. PHP의 어댑터 모드(코드 포함)위 내용은 미니 프로그램과 ThinkPHP5를 결합하여 로그인 상태 획득(코드 첨부)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!