Maison > Article > Applet WeChat > Explication détaillée de l'exemple de connexion de l'applet WeChat (avec code)
Cet article présente principalement des informations pertinentes sur l'explication détaillée des exemples de connexion au programme WeChat Mini. Les amis dans le besoin peuvent se référer à
Connexion au programme WeChat Mini
1. Le mini programme ne prend pas en charge les cookiesession
1. Conservez la session en passant et en vérifiant la 3ème_ 2 3rd_session peut exécuter `head -n 80 /dev/urandom | tr -dc A-Za-z0-9 | head -c 168` Cette commande génère
3. >Redisou session de stockage de base de données 4. La 3ème_session générée est envoyée au client et écrite dans le stockage
5. Chaque demande du client doit apporter la 3ème_session
2. Décodage des données cryptées1. $iv, $code est des données cryptées puisque le numéro devient un espace en raison du codage pendant le processus de demande, nous devons utiliser ce qui suit. méthode Reconvertir
function define_str_replace($data){ return str_replace(' ','+',$data); }3. Exemple :
php
Obtenir des informations WeChat// 微信登录 public function weixin_login(){ $session_db=D('Session'); $session_id=I('get.sessionid',''); $session=$session_db->getSession($session_id); if( !empty( $session ) ){ $this->ajaxReturn(['error_code'=>0,'sessionid'=>$session_id]); }else{ $iv=define_str_replace(I('get.iv')); //把空格转成+ $encryptedData=urldecode(I('get.encryptedData')); //解码 $code=define_str_replace(I('get.code')); //把空格转成+ $msg=D('Weixin')->getUserInfo($code,$encryptedData,$iv); //获取微信用户信息(openid) if($msg['errCode']==0){ $open_id=$msg['data']->openId; $users_db=D('Users'); $info=$users_db->getUserInfo($open_id); if(!$info||empty($info)){ $users_db->addUser(['open_id'=>$open_id,'last_time'=>['exp','now()']]); //用户信息入库 $info=$users_db->getUserInfo($open_id); //获取用户信息 $session_id=`head -n 80 /dev/urandom | tr -dc A-Za-z0-9 | head -c 168`; //生成3rd_session $session_db->addSession(['uid'=>$info['id'],'id'=>$session_id]); //保存session } if($session_id){ $this->ajaxReturn(['error_code'=>0,'sessionid'=>$session_id]); //把3rd_session返回给客户端 }else{ $this->ajaxReturn(['error_code'=>0,'sessionid'=>$session_db->getSid($info['id'])]); } }else{ $this->ajaxReturn(['error_code'=>'用户信息获取失败!']); } } }Modèle
(y compris décryptage des informations, exemple officiel cliquez pour télécharger)
require_once ABS_APP_PATH.'/Addon/Aes/wxBizDataCrypt.php'; class WeixinModel{ // 获取微信的用户信息(openid) public function getUserInfo($code,$encryptedData,$iv){ $appid=C('appid'); $secret=C('secret'); $grant_type='authorization_code'; $url='https://api.weixin.qq.com/sns/jscode2session'; $url= sprintf("%s?appid=%s&secret=%s&js_code=%s&grant_type=%",$url,$appid,$secret,$code,$grant_type); $user_data=json_decode(file_get_contents($url)); $session_key= define_str_replace($user_data->session_key); $data=""; $wxBizDataCrypt=new \WXBizDataCrypt($appid,$session_key); $errCode=$wxBizDataCrypt->decryptData($encryptedData,$iv,$data); return ['errCode'=>$errCode,'data'=>json_decode($data),'session_key'=>$session_key]; } }javascriptMerci d'avoir lu, j'espère que cela pourra aider tout le monde, merci pour votre soutien de ce site !
getUserInfo: function(cb) { var that = this if (this.globalData.userInfo) { typeof cb == "function" && cb(this.globalData.userInfo) } else { //调用登录接口 wx.login({ success: function(r) { wx.getUserInfo({ success: function(res) { that.login({ code: r.code, iv: res.iv, encryptedData: encodeURIComponent(res.encryptedData), }) that.globalData.userInfo = res.userInfo typeof cb == "function" && cb(that.globalData.userInfo) } }) } }) } }, login: function(param) { wx.request({ url: this.requestUrl('Index/weixin_login'), data: param, header: { 'content-type': "application/json", }, success: function(res) { var data = JSON.parse(res.data.trim()); wx.setStorageSync('sessionid', data.sessionid); } }) },
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!