视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
php能开发小程序吗
2020-11-27 14:19:20 责编:小采
文档

首先,看一下微信的登录流程图 (推荐学习:PHP视频教程)

步骤:在客户端获取当前登录微信用户的登录凭证(code)。使用该凭证向微信服务器换取该微信用户的唯一标识(openid)和会话密钥(session_key)。引用微信加解密,获取用户信息。

注意:

1.未进行登录验证。

2.引用加解密是,路径要正确。

 //未授权用户,请求微信接口,进行授权,获取用户信息
 public function saveUser()
 {
 $appid = "自己的appid" ;
 $code = $this->input->post('code');
 
 if (empty($code)){
 return $this->fail('','code不能为空');
 }
 $encryptedData = $this->input->post('encryptedData');
 if (empty($encryptedData)){
 return $this->fail('','encryptedData不能为空');
 }
 $iv = $this->input->post('iv');
 if (empty($iv)){
 return $this->fail('','iv不能为空');
 }
 
 
 $apiData = $this->getApiData($code);
 
 if(!isset($apiData['errcode'])){
 $sessionKey = $apiData['session_key'];
 //获取sessionKey 进行解密
 $userifo = new WXBizDataCrypt($appid, $sessionKey);
 $errCode = $userifo->decryptData($encryptedData, $iv, $data );
 
 //保存
 if ($errCode == 0) {
 $data = json_decode($data,true);
 $userData = [
 'nickname' =>$data['nickName'],
 'headimg' =>$data['avatarUrl'],
 'unionid' =>$data['unionId'],
 'openid' =>$data['openId'],
 'c_time' =>time(),
 ];
 $result = $this->AppUserModel->get(['openid'=>$data['openId']]);
 
 if ($result){
 $this->AppUserModel->update($userData,['openid'=>$data['openId']]);
 $returnData['uid']=$result['id'];
 return $this->success($returnData,'已授权');
 }else{
 $userDataId = $this->AppUserModel->add($userData);
 if ($userDataId){
 $returnData['uid']=$userDataId;
 return $this->success($returnData,'已授权');
 }else{
 return $this->fail('','授权失败');
 }
 }
 }
 }else{
 return $this->fail($apiData,'获取用户信息失败');
 }
 }
//获取openid
 public function getApiData($code)
 {
 $appid = "自己的appid" ;
 $secret = "自己的secret";
 $URL = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=$code&grant_type=authorization_code";
 $apiData=file_get_contents($URL);
 return json_decode($apiData,true);
 }

未避免多次获取。在登录之前先进行验证。

//获取用户是否已经授权
 public function userId()
 {
 
 
 $code = $this->input->get('code');
 if (empty($code)){
 return $this->fail('','code不能为空');
 }
 
 $apiData = $this->getApiData($code);
 if (!isset($apiData['errcode'])){
 $openID= $apiData['openid'];
 $userData = $this->AppUserModel->get(['openid'=>$openID]);
 if (empty($userData)) {
 return $this->fail('','未授权');
 }else{
 
 //这边保存sessionKey ,方便后面手机号码授权
 $sessionKey = $apiData['session_key'];
 $mc = &load_cache('redis');
 $mc->save('session_key', $sessionKey, 3600);
 $returnData = [
 'uid'=>$userData['id'],
 'type'=>$userData['type']
 ];
 return $this->success($returnData,'已授权');
 }
 }else {
 return $this->fail('','获取openid失败');
 }
 
 }

下载本文
显示全文
专题