Welcome

首页 / 网页编程 / PHP / 基于CI框架的微信网页授权库示例

本文实例讲述了基于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 = "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*/function access_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;}function eff($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数据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;}}
更多关于CodeIgniter相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《php优秀开发框架总结》、《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《Zend FrameWork框架入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。