本文实例讲述了基于CI框架的微信网页授权库。分享给大家供大家参考,具体如下:
这里演示建立在CI框架上的微信网页授权功能。
1. 微信小类库,网页授权放置在libraries文件夹
?phpif ( ! defined( BASEPATH )) exit( No direct script access allowed Class Weixin private $appId; private $appSecret; function __construct() $this- appId = trim( 你的appid $this- appSecret = trim( 你的appsecret function redirect_url($redirect) /*授权页面*/ $url = http://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*/ function access_token($code) /*获取到的code换取access_token和openid*/ $post_url = http://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 = http://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; function eff($access_token,$openid) /*检测access_token是否正确,errcode=0 为正确*/ $eff_url = http://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数据 function postdata($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()传入的微信用户资料处理 function save_session($data) foreach ($data as $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]); function obj_to_arr($data) // 进行转换成数组 使用 obj_to_arr方式 $data = is_object($data)?get_object_vars($data):$data; foreach ($data as $key = $value) $arr[$key] = $value; return $arr;}
2. 通过code换access_token获取用户信息,controller文件
?phpif ( ! defined( BASEPATH )) exit( No direct script access allowed Class Coupon_index extends CI_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 *优惠券主程序 function index() $this- load- view( /coupon/index.html function User_exists() 检测改微信用户是否存在 $user_arr 获取的是通过get_code返回的微信用户信息,此时的信息是通过微信服务器返回的,不能记录session $user std_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); function Coupon_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); public function Get_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 public function Coupon_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;}
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP !
相关推荐:
关于CI框架实现ajax分页和全选,反选,不选以及批量删除的代码
如何使用CI框架实现框架前后端分离
以上就是基于CI框架的微信网页授权库分析的详细内容,PHP教程
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答