Maison développement back-end tutoriel php Analyse de la bibliothèque d'autorisation de page Web WeChat basée sur le framework CI

Analyse de la bibliothèque d'autorisation de page Web WeChat basée sur le framework CI

Jun 14, 2018 pm 02:13 PM
ci框架 微信

Cet article présente principalement la bibliothèque d'autorisation de page Web WeChat basée sur le framework CI, et analyse les techniques d'implémentation associées du framework CI intégrant les fonctions d'autorisation WeChat et les appels de contrôleur sous forme d'exemples. Les amis dans le besoin peuvent s'y référer

Cet article décrit la bibliothèque d'autorisation de page Web WeChat basée sur le framework CI. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Voici une démonstration de la fonction d'autorisation de page Web WeChat basée sur le framework CI.

1. Petite bibliothèque de classe WeChat, l'autorisation Web est placée dans le dossier des bibliothèques

<?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;
    }
}
Copier après la connexion

2. Obtenez des informations sur l'utilisateur en échangeant du code. pour access_token , fichier de contrôleur

<?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;
    }
}
Copier après la connexion

Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à tout le monde. étude. Plus de contenu connexe Veuillez faire attention au site Web chinois PHP !

Recommandations associées :

À propos du code du framework CI pour implémenter la pagination ajax et toutes les sélections, sélections inverses, désélections et suppressions par lots

Comment utiliser le framework CI pour réaliser la séparation front-end et back-end du framework

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

OUYI Exchange App Download Download Tutorial OUYI Exchange App Download Download Tutorial Mar 21, 2025 pm 05:42 PM

Cet article fournit un guide détaillé pour le téléchargement en toute sécurité de l'application OUYI OKX en Chine. En raison des restrictions sur les magasins d'applications nationales, il est conseillé aux utilisateurs de télécharger l'application via le site officiel d'Ouyi OKX, ou d'utiliser le code QR fourni par le site officiel pour analyser et télécharger. Pendant le processus de téléchargement, assurez-vous de vérifier l'adresse officielle du site Web, de consulter les autorisations d'application, d'effectuer une analyse de sécurité après l'installation et d'activer la vérification à deux facteurs. Pendant l'utilisation, veuillez respecter les lois et réglementations locales, utiliser un environnement de réseau sûr, protéger la sécurité des comptes, être vigilant contre la fraude et investir rationnellement. Cet article est pour référence uniquement et ne constitue pas des conseils d'investissement.

La différence entre H5 et mini-programmes et applications La différence entre H5 et mini-programmes et applications Apr 06, 2025 am 10:42 AM

H5. La principale différence entre les mini programmes et l'application est: Architecture technique: H5 est basé sur la technologie Web, et les mini-programmes et l'application sont des applications indépendantes. Expérience et fonctions: H5 est légère et facile à utiliser, avec des fonctions limitées; Les mini-programmes sont légers et ont une bonne interactivité; Les applications sont puissantes et ont une expérience fluide. Compatibilité: H5 est compatible multiplateforme, les applets et les applications sont limités par la plate-forme. Coût de développement: H5 a un faible coût de développement, des mini-programmes moyens et une application la plus élevée. Scénarios applicables: H5 convient à l'affichage d'informations, les applets conviennent aux applications légères et les applications conviennent aux fonctions complexes.

Application Gateio Exchange Ancienne version GATEIO Exchange App Old Version Télécharger la chaîne de téléchargement Application Gateio Exchange Ancienne version GATEIO Exchange App Old Version Télécharger la chaîne de téléchargement Mar 04, 2025 pm 11:36 PM

Les canaux de téléchargement de l'application GATEIO Exchange pour les anciennes versions, couvrant les marchés d'applications officiels, tiers, les communautés de forum et d'autres canaux.

Que dois-je faire si le logiciel de sécurité de l'entreprise est en conflit avec les applications? Comment dépanner les logiciels de sécurité des teintes provoque l'ouverture des logiciels communs? Que dois-je faire si le logiciel de sécurité de l'entreprise est en conflit avec les applications? Comment dépanner les logiciels de sécurité des teintes provoque l'ouverture des logiciels communs? Apr 01, 2025 pm 10:48 PM

Problèmes de compatibilité et méthodes de dépannage pour les logiciels et applications de sécurité de l'entreprise. De nombreuses entreprises installeront des logiciels de sécurité afin d'assurer la sécurité intranet. Cependant, les logiciels de sécurité parfois ...

Comment choisir H5 et Applets Comment choisir H5 et Applets Apr 06, 2025 am 10:51 AM

Le choix de H5 et Applet dépend des exigences. Pour les applications avec une plate-forme multiplateuse, un développement rapide et une éleve élevée, choisissez H5; Pour les applications avec une expérience native, des fonctions riches et des dépendances de plate-forme, choisissez des applets.

Quelle est la différence entre la production de pages H5 et les applets WeChat Quelle est la différence entre la production de pages H5 et les applets WeChat Apr 05, 2025 pm 11:51 PM

H5 est plus flexible et personnalisable, mais nécessite une technologie qualifiée; Les mini-programmes sont rapides à démarrer et faciles à entretenir, mais sont limités par le cadre WeChat.

Tutoriel détaillé sur la façon d'acheter et de vendre une monnaie virtuelle de binance Tutoriel détaillé sur la façon d'acheter et de vendre une monnaie virtuelle de binance Mar 18, 2025 pm 01:36 PM

Cet article fournit un bref guide pour l'achat et la vente de monnaie virtuelle de binance mise à jour en 2025 et explique en détail les étapes de fonctionnement des transactions de devises virtuelles sur la plate-forme de binance. Le guide couvre l'achat de monnaie Fiat USDT, l'achat de transactions en devises d'autres devises (tels que BTC) et les opérations de vente, y compris le trading du marché et la limite de trading. En outre, le guide rappelle également spécifiquement les risques clés tels que la sécurité des paiements et la sélection du réseau pour les transactions de monnaie fiduciaire, aidant les utilisateurs à effectuer des transactions de binance en toute sécurité et efficacement. Grâce à cet article, vous pouvez rapidement maîtriser les compétences de l'achat et de la vente de monnaies virtuelles sur la plate-forme Binance et de réduire les risques de transaction.

Le premier hominidé numérique culturel et touristique double cœur du pays! Tencent Cloud aide Huaguoshan Scenic Area Le premier hominidé numérique culturel et touristique double cœur du pays! Tencent Cloud aide Huaguoshan Scenic Area Mar 12, 2025 pm 12:57 PM

Le quartier panoramique de Lianyungang Huaguoshan se joint à Tencent Cloud pour lancer le premier homo numérique "à double cœur" Homo Sapiens dans l'industrie culturelle et touristique - Monkey King! Le 1er mars, l'endroit pittoresque a officiellement connecté le King Monkey à la plate-forme Deepseek, de sorte qu'il a les deux capacités de modèle d'IA de Tencent Hunyuan et Deepseek, apportant aux touristes une expérience de service plus intelligente et plus prévenante. Huaguoshan Scenic Area a précédemment lancé le Roi singe du Digital Homo Sapiens basé sur le modèle Tencent Hunyuan. Cette fois, Tencent Cloud utilise en outre des technologies telles que le moteur de connaissances Big Model pour le connecter à Deepseek pour obtenir une mise à niveau "double core". Cela rend la capacité interactive du singe à un niveau supérieur, une vitesse de réponse plus rapide, une capacité de compréhension plus forte et plus de chaleur. Monkey King a de fortes capacités de traitement du langage naturel et peut comprendre diverses façons de poser des questions aux touristes.

See all articles