基于CI框架的微信网页授权库示例
本文实例讲述了基于CI框架的微信网页授权库。分享给大家供大家参考,具体如下:
这里演示建立在CI框架上的微信网页授权功能。
1.微信小类库,网页授权放置在libraries文件夹
<?php if(!defined('BASEPATH'))exit('Nodirectscriptaccessallowed'); ClassWeixin { private$appId; private$appSecret; function__construct() { $this->appId=trim('你的appid'); $this->appSecret=trim('你的appsecret'); } functionredirect_url($redirect) { /*授权页面*/ $url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$this->appId&redirect_uri=$redirect&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"; return$url; } /*通过code换取access_token*/ functionaccess_token($code) { /*获取到的code换取access_token和openid*/ $post_url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=$this->appId&secret=$this->appSecret&code=$code&grant_type=authorization_code"; //echo$post_url;exit(); $return=$this->postdata($post_url); //print_r($return);exit(); $access_token=$return['access_token']; $openid=$return['openid']; /*获取微信用户数据*/ $get_userinfo="https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN"; $userinfo=json_decode(file_get_contents($get_userinfo)); return$userinfo; } functioneff($access_token,$openid) { /*检测access_token是否正确,errcode=0为正确*/ $eff_url="https://api.weixin.qq.com/sns/auth?access_token=$access_token&openid=$openid"; $get_eff=json_decode(file_get_contents($eff_url)); return$get_eff; } //通过curl方式提交code换取access_token数据 functionpostdata($url) { header('Content-Type:text/html;charset=utf-8'); //echo$url;exit(); $curl=curl_init(); curl_setopt($curl,CURLOPT_URL,$url); curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,FALSE); curl_setopt($curl,CURLOPT_SSLVERSION,1); //if(!empty($data)){ //curl_setopt($curl,CURLOPT_POST,1); //curl_setopt($curl,CURLOPT_POSTFIELDS,$data); //} curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); $output=curl_exec($curl); curl_close($curl); //var_dump($output);exit(); //print_r($output);exit(); $access=json_decode($output,true); return$access; } /* 这个位置开始是控制器index()传入的微信用户资料处理 */ functionsave_session($data) { foreach($dataas$key=>$value){ //$_SESSION['uid']=$value['uid']; //$_SESSION['nickname']=$value['nickname']; //$_SESSION['fullname']=$value['fullname']; //$_SESSION['status']=$value['status']; //$_SESSION['groups']=$value['groups']; $_SESSION[$key]=$value; } return$_SESSION; //print_r($_SESSION);exit(); //unset($_SESSION[0]); } functionobj_to_arr($data) { //进行转换成数组使用obj_to_arr方式 $data=is_object($data)?get_object_vars($data):$data; foreach($dataas$key=>$value) { $arr[$key]=$value; } return$arr; } }
2.通过code换access_token获取用户信息,controller文件
<?php if(!defined('BASEPATH'))exit('Nodirectscriptaccessallowed'); ClassCoupon_indexextendsCI_Controller { function__construct() { parent::__construct(); $this->load->library(array('weixin','session')); $this->load->helper('url'); //$this->load->ldap_mod_del(link_identifier,dn,entry) $this->load->model('Coupon_model'); } /** *优惠券主程序 */ functionindex() { $this->load->view('/coupon/index.html'); } functionUser_exists() { /* 检测改微信用户是否存在 $user_arr获取的是通过get_code返回的微信用户信息,此时的信息是通过微信服务器返回的,不能记录session $userstd_obj模式,转换为数组 $user_exists扔入model中,检测数据表中是否存在该用户 $redirect走完流程后,跳转到首页 if语句的作用,是判断通过model返回数据表的信息,如果为空则把微信用户信息录入到表中,再读取出来,存进session。 else则数据表已经存在该用户,直接读取,存进session 需要注意的是,使用foreach的原因,是二维数组转一维数组 */ $user_arr=$this->Get_code(); //var_dump($user_arr);exit(); $user=$this->weixin->obj_to_arr($user_arr); //var_dump($user);exit(); //print_r($user);exit(); $user_exists=$this->Coupon_model->CheckUser('cou_user',$user); //print_r($user_exists);exit(); //$redirect='http://yourwebname.com/coupon/index.php/Coupon/Coupon_index/Coupon_Get/bid/1'; //$return_url=$this->session->return_url; $redirect='http://yourwebname.com'.$this->session->return_url; //echo$redirect;exit(); if(empty($user_exists)) { /* 由于微信获取到的用户数据是stdclass对象格式 所以需要进行转换成数组使用obj_to_arr方式 */ //加入自定义的字符进入数组 unset($user['privilege']); $user_exists['nickname']=$user['nickname']; $user_exists['openid']=$user['openid']; $user_exists['language']=$user['language']; $user_exists['city']=$user['city']; $user_exists['country']=$user['country']; $user_exists['province']=$user['province']; $user_exists['headimgurl']=$user['headimgurl']; $user_exists['sex']=$user['sex']; $user_exists['fullname']=$user['nickname']; $user_exists['telphone']=''; $user_exists['login_ip']=$this->input->ip_address(); $user_exists['last_ip']=$this->input->ip_address(); $user_exists['groups']=REGISTER_GROUP_ID; $user_exists['status']=1; $user_exists['login_time']=date("Y-m-d"); $insert_id=$this->Coupon_model->insert_one('cou_user',$user_exists); $user_exists['uid']=$insert_id; } else{ $user_exists=$user_exists[0]; } //$return_url=$this->session->back_url; //if(isset($return_url))header('location:'.$return_url); /*由Coupon_idex中的Get_Coupon处理*/ $this->session->set_userdata($user_exists); if(isset($this->session->return_url))header('location:'.$this->session->return_url); //print_r($user_exists);exit(); header('location:'.$redirect); } functionCoupon_start() { /*进入领取页面,需要先经过授权*/ $redirect_url='Coupon/Coupon_index/User_exists'; $redirect=urlencode('http://yourwebname.com/coupon/index.php/'.$redirect_url); //$redirect=urlencode('http://yourwebname.com/coupon/index.php/Coupon/Coupon_index/Get_code'); $return=$this->weixin->redirect_url($redirect); header('location:'.$return); } publicfunctionGet_code() { if(isset($_GET['code'])) { $code=$_GET['code']; //echo$code;exit(); $user_arr=$this->weixin->access_token($code); //跳转到用户检测中check_exists()去 //echo$user_arr;exit(); //var_dump($user_arr); return$user_arr; }else{ //否则检测cookie中是否存在该用户,如果有,则return回首页 echo'error'; } } publicfunctionCoupon_Get() { /*获取商家bid,读取相关信息*/ //$b_name=$this->uri->segment(4,0); $nickname=$this->session->nickname; $openid=$this->session->openid; $status=$this->session->status; $_SESSION['return_url']=$_SERVER['REQUEST_URI']; //$this->session->set_userdata($return_url); //echo$this->session->return_url;exit(); if(empty($nickname))header('location:'.'http://yourwebname.com/coupon/index.php/Coupon/Coupon_index/Coupon_start'); $bid=$this->uri->segment(5,0); /*扔进Coupon_model中,读取bid中的商家信息*/ $content=$this->Coupon_model->Coupon_Business('cou_business',$bid); //print_r($content); //echo$bid; //echo$b_name; $data['bname']=$content['bname']; $data['discount']=$content['discount']; $data['bimg']=$content['bimg']; $data['contents']=$content['contents']; $data['amount']=$content['amount']; $data['nickname']=$nickname; $data['status']=$status; $data['js']=json_encode(array($content['bname'],$content['discount'],$nickname,$status)); //echo$data['js'];exit(); //print_r($data); $this->load->view('/coupon/index.html',$data); //echo$nickname; //echo$status; } }
更多关于CodeIgniter相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《php优秀开发框架总结》、《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《ZendFrameWork框架入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。