基于CI框架的微信网页授权库示例
2018-10-15 16:57
阅读:601
本文实例讲述了基于CI框架的微信网页授权库。分享给大家供大家参考,具体如下:
这里演示建立在CI框架上的微信网页授权功能。
1. 微信小类库,网页授权放置在libraries文件夹
<?php if ( ! 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 = 通过code换取access_token*/ function access_token($code) { /*获取到的code换取access_token和openid*/ $post_url = 获取微信用户数据*/ $get_userinfo = 检测access_token是否正确,errcode=0 为正确*/ $eff_url = 通过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文件
<?php if ( ! 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 = 由于微信获取到的用户数据是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(跳转到用户检测中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:.扔进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常用方法总结》、《Zend FrameWork框架入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。
评论
亲,登录后才可以留言!