这里有新鲜出炉的精品教程,程序狗速度看过来!
微信(英文名:wechat)是腾讯公司于 2011 年 1 月 21 日推出的一个为智能终端提供即时通讯服务的免费应用程序,微信支持跨通信运营商、跨操作系统平台通过网络快速发送免费语音短信、视频、图片和文字,同时,也可以使用通过共享流媒体内容的资料和基于位置的社交插件 "摇一摇"、"漂流瓶"、"朋友圈"、"公众平台"、"语音记事本" 等服务插件。
这篇文章主要介绍了基于 CI 框架的微信网页授权库, 结合实例形式分析了 CI 框架整合微信授权功能及控制器调用的相关实现技巧, 需要的朋友可以参考下
本文实例讲述了基于 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 = "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 文件
- <?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 = '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 框架的 PHP 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0802/341022.html