이 글의 내용은 로그인 상태(코드 포함)를 달성하기 위한 작은 프로그램과 ThinkPHP5의 조합에 관한 것입니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
WeChat 미니 프로그램에는 일반적으로 세 가지 로그인 방법이 있습니다:
1. 위챗 계정으로 로그인
2. 자신의 계정으로 등록하고 로그인하세요
3. 다른 타사 플랫폼 계정을 사용하여 로그인
WeChat 계정 로그인 프로세스:
1. 애플릿은 wx.login을 통해 코드를 획득하고 이를 WeChat API와 session_key 및 openid를 교환하는 백엔드로 보냅니다. 2. 문자를 무작위로 생성합니다. 문자열은 sessionid(키)로 사용되며, session_key 및 openid는 안전을 위해 redis에 저장됩니다.
저장 시 시간 제한을 설정해야 합니다.
3. 로그인 후 백엔드 서비스에 접근하게 되면
스토리지에 저장된 세션ID를 꺼내서 백엔드 코드에서 세션ID를 가져온 후
여부를 확인하면 됩니다. sessionid가 redis에 존재하는 경우 세션이 유효한 것으로 확인됩니다.
후속 코드 실행을 계속하고 그렇지 않으면 오류 처리가 수행됩니다.
1. 미니 프로그램에 들어가려면 먼저 wx.login을 통해 코드를 얻은 후 백엔드 인터페이스를 통해 백엔드로 보냅니다. 백엔드는 session_key 및 openid를 WeChat API와 교환합니다. ;
2. openid가 데이터베이스에 있는지 확인합니다[고유 ID, 계정(휴대폰 번호)에 연결되어야 함],-- openid가 존재하지 않는 경우 데이터베이스(해당 계정이 없음을 나타냄):
전달된 휴대폰 번호가 비어 있는지 확인합니다(로그인 시 휴대폰 번호가 전역 변수에 저장됩니다). 방금 로그인한 후 openid와 openid_time(현재 시간)을 바인딩합니다.
휴대폰 번호도 비어 있으면 로그인되지 않은 것입니다. 이를 통과하면 로그인 실패 메시지가 반환되어 클라이언트가 점프하게 됩니다. 로그인 페이지로
-- 데이터베이스에 openid가 있는 경우(데이터베이스에 해당 휴대폰 번호가 있음을 나타냄)
openid_time이 지금부터 4시간보다 큰지 확인합니다. , 로그인 실패 정보가 반환되어 클라이언트가 로그인 페이지로 이동합니다.
이 값보다 작은 경우 openid_time이 현재 시간으로 업데이트된 후 로그인 성공 정보와 휴대폰 번호가 반환됩니다.
3. 로그인 페이지: 데이터베이스에 휴대폰 번호가 있는지 확인하고, 없으면 openid_time을 현재 시간으로 업데이트합니다. 그런 다음 홈페이지로 이동하여 wx.login 메소드를 실행하면 로그인이 성공하고 로그인 상태가 유지됩니다.
상세 프로세스: 1단계: 미니 프로그램에 들어갈 때 먼저 wx.login을 통해 코드를 얻은 다음 백엔드 인터페이스를 통해 백엔드에서 이를 WeChat API를 사용하여 session_key 및 openid로 교환합니다.
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', }) } } }) } })
2단계: 데이터베이스에 존재 여부 확인 openid[고유 식별, 계정(휴대폰 번호)에 연결되어야 함]
// 后台代码: 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'=>'读取失败',]); } } }
3단계: 로그인 페이지: 로그인 성공 후 홈으로 이동 페이지를 방문하여 wx.login 메소드를 실행한 후 성공적으로 로그인하고 로그인 상태를 유지하세요. wechat api
// 前台登录 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', }) } } })
test 결과 :
관련 권장 사항 : thinksphp5에서 refortmany () 모듈 이름의 명명 문제에 대한 해결책에 대한 분리 된 권장 사항 :
rrereeRreee
method and openid를 얻을 수 있습니다. PHP의 어댑터 모드(코드 포함)위 내용은 미니 프로그램과 ThinkPHP5를 결합하여 로그인 상태 획득(코드 첨부)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

thesecrettokeepingAphp-poweredwebsiterunningsmoothlydlyUnderHeavyloadInvolvesEveralKeyStrategies : 1) ubstractOpCodeCachingWithOpCacheTecescripteExecutionTime, 2) usedatabasequeryCachingwithRedSendatabaseload, 3) LeverAgeCdnslikeCloudforforporerververforporporpin

Code는 코드가 더 명확하고 유지 관리하기 쉽기 때문에 의존성 주입 (DI)에 관심을 가져야합니다. 1) DI는 클래스를 분리하여 더 모듈 식으로 만들고, 2) 테스트 및 코드 유연성의 편의성을 향상시키고, 3) DI 컨테이너를 사용하여 복잡한 종속성을 관리하지만 성능 영향 및 순환 종속성에주의를 기울이십시오. 4) 모범 사례는 추상 인터페이스에 의존하여 느슨한 커플 링을 달성하는 것입니다.

예, PPAPPLICATIONISPOSSIBLEADESLESTION.1) INVERECINGUSINGAPCUTERODUCEDABASELOAD.2) INCODINCEDEXING, ENGICIONEQUERIES 및 CONNECTIONPOULING.3) 향상된 보드 바이어링, 플로 팅 포르코 잉을 피하는 최적화 된 APPCUTERODECEDATABASELOAD.2)

theKeyStrategiesToSINCINTIFILINTINTIFILINTINTHPPORMATIONPERFORMANCEARE : 1) USEOPCODECACHING-CCHACHETEDECUTECUTINGTIME, 2) 최적화 된 ABESINSTEMENTEMENDSTEMENTEMENDSENDSTATEMENTENDS 및 PROPERINDEXING, 3) ConfigureWebSerVERSLIKENGINXXWITHPMFORBETPERMERCORMANCES, 4)

aphpdectionenceindectioncontainerisatoolthatmanagesclassdependencies, 향상 Codemodularity, testability 및 maintainability.itactAsacentralHubForCreatingAndingDinjectingDingingDingingdecting.

대규모 응용 프로그램의 경우 SELLENCIONINGESS (DI)를 선택하십시오. ServicElocator는 소규모 프로젝트 또는 프로토 타입에 적합합니다. 1) DI는 생성자 주입을 통한 코드의 테스트 가능성과 모듈성을 향상시킵니다. 2) Servicelocator는 센터 등록을 통해 서비스를 얻습니다. 이는 편리하지만 코드 커플 링이 증가 할 수 있습니다.

phPapplicationSCanBeoptimizedForsPeedandefficiencyby : 1) ENABLEOPCACHEINPHP.INI, 2) PREPAREDSTATEMENTSWITHPDOFORDATABASEQUERIES 사용

phpeMailValidationInvoLvestHreesteps : 1) formatValidationUsingRegularexpressionsTochemailformat; 2) dnsValidationToErethedomainHasaValidMxRecord; 3) smtpvalidation, theSTHOROUGHMETHOD, theCheckSiftheCefTHECCECKSOCCONNECTERTETETETETETETWERTETWERTETWER


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.