> 백엔드 개발 > PHP 튜토리얼 > CI 프레임워크 기반 WeChat 웹페이지 인증 라이브러리 분석

CI 프레임워크 기반 WeChat 웹페이지 인증 라이브러리 분석

不言
풀어 주다: 2023-04-01 07:44:02
원래의
1566명이 탐색했습니다.

이 글은 주로 CI 프레임워크 기반의 위챗 웹페이지 인증 라이브러리를 소개하고, 위챗 인증 기능과 컨트롤러 호출을 통합한 CI 프레임워크의 관련 구현 기술을 예시 형태로 분석해 도움이 필요한 친구들이 참고할 수 있습니다.

이 글은 CI를 기반으로 프레임워크의 WeChat 웹 인증 라이브러리에 대한 예를 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

다음은 CI 프레임워크에 구축된 WeChat 웹페이지 인증 기능의 데모입니다.

1. WeChat 소규모 클래스 라이브러리, 웹 권한은 라이브러리 폴더

<?php
if ( ! defined(&#39;BASEPATH&#39;)) exit(&#39;No direct script access allowed&#39;);
Class Weixin
{
    private $appId;
    private $appSecret;
    function __construct()
    {
      $this->appId = trim(&#39;你的appid&#39;);
      $this->appSecret = trim(&#39;你的appsecret&#39;);
    }
    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[&#39;access_token&#39;];
      $openid = $return[&#39;openid&#39;];
      /*获取微信用户数据*/
      $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(&#39;Content-Type:text/html;charset=utf-8&#39;);
       // 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[&#39;uid&#39;] = $value[&#39;uid&#39;];
          // $_SESSION[&#39;nickname&#39;] = $value[&#39;nickname&#39;];
          // $_SESSION[&#39;fullname&#39;] = $value[&#39;fullname&#39;];
          // $_SESSION[&#39;status&#39;] = $value[&#39;status&#39;];
          // $_SESSION[&#39;groups&#39;] = $value[&#39;groups&#39;];
          $_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. access_token

<?php
if ( ! defined(&#39;BASEPATH&#39;)) exit(&#39;No direct script access allowed&#39;);
Class Coupon_index extends CI_Controller
{
    function __construct()
    {
      parent::__construct();
      $this->load->library(array(&#39;weixin&#39;,&#39;session&#39;));
      $this->load->helper(&#39;url&#39;);
      // $this->load->ldap_mod_del(link_identifier, dn, entry)
      $this->load->model(&#39;Coupon_model&#39;);
    }
    /**
     *优惠券主程序
     */
    function index()
    {
      $this->load->view(&#39;/coupon/index.html&#39;);
    }
    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(&#39;cou_user&#39;,$user);
        // print_r($user_exists);exit();
        // $redirect = &#39;http://yourwebname.com/coupon/index.php/Coupon/Coupon_index/Coupon_Get/bid/1&#39;;
        // $return_url = $this->session->return_url;
        $redirect = &#39;http://yourwebname.com&#39;.$this->session->return_url;
        // echo $redirect;exit();
        if(empty($user_exists))
        {
           /*
         由于微信获取到的用户数据是stdclass对象格式
         所以需要进行转换成数组 使用 obj_to_arr方式
         */
        //加入自定义的字符进入数组
        unset($user[&#39;privilege&#39;]);
        $user_exists[&#39;nickname&#39;]   = $user[&#39;nickname&#39;];
        $user_exists[&#39;openid&#39;]    = $user[&#39;openid&#39;];
        $user_exists[&#39;language&#39;]   = $user[&#39;language&#39;];
        $user_exists[&#39;city&#39;]     = $user[&#39;city&#39;];
        $user_exists[&#39;country&#39;]    = $user[&#39;country&#39;];
        $user_exists[&#39;province&#39;]   = $user[&#39;province&#39;];
        $user_exists[&#39;headimgurl&#39;]  = $user[&#39;headimgurl&#39;];
        $user_exists[&#39;sex&#39;]      = $user[&#39;sex&#39;];
        $user_exists[&#39;fullname&#39;]   = $user[&#39;nickname&#39;];
        $user_exists[&#39;telphone&#39;]   = &#39;&#39;;
        $user_exists[&#39;login_ip&#39;]   =$this->input->ip_address();
        $user_exists[&#39;last_ip&#39;]    =$this->input->ip_address();
        $user_exists[&#39;groups&#39;]    = REGISTER_GROUP_ID;
        $user_exists[&#39;status&#39;]    = 1;
        $user_exists[&#39;login_time&#39;]  = date("Y-m-d");
         $insert_id = $this->Coupon_model->insert_one(&#39;cou_user&#39;,$user_exists);
        $user_exists[&#39;uid&#39;] = $insert_id;
        }
        else{
         $user_exists = $user_exists[0];
        }
        // $return_url = $this->session->back_url;
        // if(isset($return_url))header(&#39;location:&#39;.$return_url);
        /*由Coupon_idex中的Get_Coupon处理*/
        $this->session->set_userdata($user_exists);
        if(isset($this->session->return_url))header(&#39;location:&#39;.$this->session->return_url);
        // print_r($user_exists);exit();
        header(&#39;location:&#39;.$redirect);
    }
    function Coupon_start()
    {
      /*进入领取页面,需要先经过授权*/
      $redirect_url = &#39;Coupon/Coupon_index/User_exists&#39;;
      $redirect = urlencode(&#39;http://yourwebname.com/coupon/index.php/&#39;.$redirect_url);
      // $redirect = urlencode(&#39;http://yourwebname.com/coupon/index.php/Coupon/Coupon_index/Get_code&#39;);
      $return = $this->weixin->redirect_url($redirect);
       header(&#39;location:&#39;.$return);
    }
    public function Get_code()
    {
      if(isset($_GET[&#39;code&#39;]))
      {
        $code = $_GET[&#39;code&#39;];
        // 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 &#39;error&#39;;
      }
     }
     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[&#39;return_url&#39;] = $_SERVER[&#39;REQUEST_URI&#39;];
      // $this->session->set_userdata($return_url);
      // echo $this->session->return_url;exit();
      if(empty($nickname))header(&#39;location:&#39;.&#39;http://yourwebname.com/coupon/index.php/Coupon/Coupon_index/Coupon_start&#39;);
      $bid = $this->uri->segment(5, 0);
      /*扔进Coupon_model中,读取bid中的商家信息*/
      $content = $this->Coupon_model->Coupon_Business(&#39;cou_business&#39;,$bid);
      // print_r($content);
      // echo $bid;
      // echo $b_name;
      $data[&#39;bname&#39;]   = $content[&#39;bname&#39;];
      $data[&#39;discount&#39;]  = $content[&#39;discount&#39;];
      $data[&#39;bimg&#39;]    = $content[&#39;bimg&#39;];
      $data[&#39;contents&#39;]  = $content[&#39;contents&#39;];
      $data[&#39;amount&#39;]   = $content[&#39;amount&#39;];
      $data[&#39;nickname&#39;]  = $nickname;
      $data[&#39;status&#39;]   = $status;
      $data[&#39;js&#39;] = json_encode(array($content[&#39;bname&#39;],$content[&#39;discount&#39;],$nickname,$status));
      // echo $data[&#39;js&#39;];exit();
      // print_r($data);
      $this->load->view(&#39;/coupon/index.html&#39;,$data);
      // echo $nickname;
      // echo $status;
    }
}
로그인 후 복사

에 대한 코드를 교환하여 사용자 정보 및 컨트롤러 파일을 얻습니다. 이 기사의 전체 내용이 모든 사람의 학습에 도움이 되기를 바랍니다. 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트를 주목하세요!

관련 권장 사항:

Ajax 페이징을 구현하고 모두 선택, 선택 반전, 선택 취소 및 일괄 삭제 코드를 구현하는 CI 프레임워크 정보

CI 프레임워크를 사용하여 프런트엔드와 백엔드를 분리하는 방법 프레임워크

위 내용은 CI 프레임워크 기반 WeChat 웹페이지 인증 라이브러리 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿