ci qq接口

提供给第三方的API的签名验证问题 目前的状况 公司目前有若干的第三方API, 这些API是供第三方的一些渠道对接,让渠道可以访问到一些公司的业务信息,他们是这么设计的。 使用Bear Token 作为第三方访问API的时候的唯一验证方式, 当第三方需要访问公司的API的时候,任何请求需要在请求头里面添加 Authorization:头信息, 用来提供Token给服务器 从而验证当前的请求是否有效。 有一些操作我们想要回避第三方渠道, 如客户需要提交一些信息给服务器 第三方渠道不需要知道这些信息的时候, 我们会让访问第三方渠道的客户跳转到一 阅读详情

本帖内容较多,大部分都是源码,要修改的地方只有一个,其他只要复制过去,就可以完美运行。本帖主要针对CI框架,不用下载SDK,按我下面的步骤,建文件,复制代码就可以了。10分钟不要,接口就可完成。
第一步:申请APP ID,APP KEY,申请地址:http://connect.opensns.qq.com/
验证通过后:会得到APP ID,APP KEY。这是你用个文件把这些信息保持下来,免得用的时候有要上网去查,记录在本地记事本里,方便,用的时候打开就可以。如下:
APP ID:101091331
APP KEY:7cb032049f2c900fea509424e614a979 
回调地址:http://test.com


第二步:如果你的系统没有安装curl,请先安装curl。
怎么知道本地系统是否安装了curl呢,方法如下:
1.在web服务器目录( Ubuntu下的通常为 /var/www )新建crul.PHP文件
2.编辑文件,键入下面一行代码:
  <?php phpinfo(); ?>
3.保存文件
4.打开浏览器,浏览该网页。(例如:http://localhost/curl.php)
5.搜索"curl",如果没搜到就证明没安装curl。

下面是安装方法:
打开终端,输入下面的命令:
sudo apt-get install curl libcurl3 libcurl3-dev php5-curl
再重启apache:
sudo /etc/init.d/apache2 restart
这样curl就安装好了,打开你刚才的那个页面,搜一下curl,就可以看到了curl了,这表示已经安装成功,很简单吧。

如果还是没有,编辑你的php.ini文件,我的phpini.php文件在/etc/php5/apache2/php.ini,估计你的也差不多是在这个位置,去找找看,找到后,打开这个文件,在最后加上一行:
extension=curl.so

保存文件后重启Apache服务器,再打开页面,就会出现curl了。

第三步:代码
注:腾讯提供了SDK,可以在官网下载:下载地址:http://wiki.connect.qq.com/sdk%E4%B8%8B%E8%BD%BD,如果不是CI框架,估计下载下来就可以用了,CI框架调用规则不同,所以要做修改,如果是CI框架下开发QQ登录接口,就不用下载SDK了,用我下面的代码,下面正式上代码,完整的代码。

代码步骤:
1.打开application/config/constants.php文件
写入如下代码:
/*qq登陆*/
define('GET_AUTH_CODE_URL', "https://graph.qq.com/oauth2.0/authorize");
define('GET_ACCESS_TOKEN_URL' , "https://graph.qq.com/oauth2.0/token");
define('GET_OPENID_URL' , "https://graph.qq.com/oauth2.0/me");
保存

2.打开application文件夹,在application下新建一个文件夹isetting,在isetting下建一个qq_setting.php文件,
打开qq_setting.php文件,输入如下代码:


<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    /**
     * @qq互联配置信息
     * 默认开启get_user_info模块
     * **/

    $config['inc_info'] = array(
        array (
                'appid' => '101091331',
                'appkey' => '7cb032049f2c900fea509424e614a979',
                'callback' => 'http://test.com'
              ),
        array (
                'get_user_info' => '1',
                'add_topic' => '0',
                'add_one_blog' => '0',
                'add_album' => '0',
                'upload_pic' => '0',
                'list_album' => '0',
                'add_share' => '0',
                'check_page_fans' => '0',
                'add_t' => '0',
                'add_pic_t' => '0',
                'del_t' => '0',
                'get_repost_list' => '0',
                'get_info' => '0',
                'get_other_info' => '0',
                'get_fanslist' => '0',
                'get_idollist' => '0',
                'add_idol' => '0',
                'del_idol' => '0',
                'get_tenpay_addr' => '0',
              )
    );
保存
说明:你需要把appid,appkey对应的键值修改成你刚刚申请的appid,appkey值,callback为回调地址(所谓回调地址就是登录成功后,返回到哪个页面),callback的值写你申请的时候做验证的那个地址。

3.打开application下的libraries文件,新建一个文件夹tencent,在tencent里面新建一个文件oauth.php,打开这个文件,复制下面的代码进去:

<?php

    
    class Oauth
    {
         /**
        * combineURL
        * 拼接url
        * @param string $baseURL   基于的url
        * @param array  $keysArr   参数列表数组
        * @return string           返回拼接的url
        */
        
        private $APIMap;
        
        public function __construct() {
            /*以下部分为获取第三方qq登陆资料*/
        //初始化APIMap
        /*
         * 加#表示非必须,无则不传入url(url中不会出现该参数), "key" => "val" 表示key如果没有定义则使用默认值val
         * 规则 array( baseUrl, argListArr, method)
         */
        $this->APIMap = array(
        
            
            /*                       qzone                    */
            "add_blog" => array(
                "https://graph.qq.com/blog/add_one_blog",
                array("title", "format" => "json", "content" => null),
                "POST"
            ),
            "add_topic" => array(
                "https://graph.qq.com/shuoshuo/add_topic",
                array("richtype","richval","con","#lbs_nm","#lbs_x","#lbs_y","format" => "json", "#third_source"),
                "POST"
            ),
            "get_user_info" => array(
                "https://graph.qq.com/user/get_user_info",
                array("format" => "json"),
                "GET"
            ),
            "add_one_blog" => array(
                "https://graph.qq.com/blog/add_one_blog",
                array("title", "content", "format" => "json"),
                "GET"
            ),
            "add_album" => array(
                "https://graph.qq.com/photo/add_album",
                array("albumname", "#albumdesc", "#priv", "format" => "json"),
                "POST"
            ),
            "upload_pic" => array(
                "https://graph.qq.com/photo/upload_pic",
                array("picture", "#photodesc", "#title", "#albumid", "#mobile", "#x", "#y", "#needfeed", "#successnum", "#picnum", "format" => "json"),
                "POST"
            ),
            "list_album" => array(
                "https://graph.qq.com/photo/list_album",
                array("format" => "json")
            ),
            "add_share" => array(
                "https://graph.qq.com/share/add_share",
                array("title", "url", "#comment","#summary","#images","format" => "json","#type","#playurl","#nswb","site","fromurl"),
                "POST"
            ),
            "check_page_fans" => array(
                "https://graph.qq.com/user/check_page_fans",
                array("page_id" => "314416946","format" => "json")
            ),
            /*                    wblog                             */

            "add_t" => array(
                "https://graph.qq.com/t/add_t",
                array("format" => "json", "content","#clientip","#longitude","#compatibleflag"),
                "POST"
            ),
            "add_pic_t" => array(
                "https://graph.qq.com/t/add_pic_t",
                array("content", "pic", "format" => "json", "#clientip", "#longitude", "#latitude", "#syncflag", "#compatiblefalg"),
                "POST"
            ),
            "del_t" => array(
                "https://graph.qq.com/t/del_t",
                array("id", "format" => "json"),
                "POST"
            ),
            "get_repost_list" => array(
                "https://graph.qq.com/t/get_repost_list",
                array("flag", "rootid", "pageflag", "pagetime", "reqnum", "twitterid", "format" => "json")
            ),
            "get_info" => array(
                "https://graph.qq.com/user/get_info",
                array("format" => "json")
            ),
            "get_other_info" => array(
                "https://graph.qq.com/user/get_other_info",
                array("format" => "json", "#name", "fopenid")
            ),
            "get_fanslist" => array(
                "https://graph.qq.com/relation/get_fanslist",
                array("format" => "json", "reqnum", "startindex", "#mode", "#install", "#sex")
            ),
            "get_idollist" => array(
                "https://graph.qq.com/relation/get_idollist",
                array("format" => "json", "reqnum", "startindex", "#mode", "#install")
            ),
            "add_idol" => array(
                "https://graph.qq.com/relation/add_idol",
                array("format" => "json", "#name-1", "#fopenids-1"),
                "POST"
            ),
            "del_idol" => array(
                "https://graph.qq.com/relation/del_idol",
                array("format" => "json", "#name-1", "#fopenid-1"),
                "POST"
            ),
            /*                           pay                          */

            "get_tenpay_addr" => array(
                "https://graph.qq.com/cft_info/get_tenpay_addr",
                array("ver" => 1,"limit" => 5,"offset" => 0,"format" => "json")
            )
        );
        
        }

        //登陆
         public function check_login()
         {
             if(isset($_SESSION['qq']['state']) && $_GET['state'] && ($_SESSION['qq']['state'] == $_GET['state']))
             {
                 return 'true';
             }
             else
             {
                 return 'false';
             }
         }

         
         public function qq_login()
        {
            $CI = &get_instance();
            $CI->config->load('isetting/qq_setting');
            $setting = $CI->config->item('inc_info');
            $appid = $setting[0]['appid'];
            $callback = $setting[0]['callback'];
            $scope = '';
            foreach ($setting[1] as $key=>$val)
            {
                if($val === '1')
                {
                    $scope .= $key . ',';
                }
            }
            $scope = trim(rtrim($scope,',')); 

            //-------生成唯一随机串防CSRF攻击
            $state = md5(uniqid(rand(), TRUE));
            $_SESSION['qq']['state'] = $state;

            //-------构造请求参数列表
            $keysArr = array(
                "response_type" => "code",
                "client_id" => $appid,
                "redirect_uri" => $callback,
                "state" => $state,
                "scope" => $scope
            );
            $login_url =  $this->combineURL(GET_AUTH_CODE_URL, $keysArr);
            header("Location:$login_url");
        }
        
        //callback回调方法
        public function qq_callback()
        {
            $CI = &get_instance();
            $CI->config->load('isetting/qq_setting');
            $setting = $CI->config->item('inc_info');
            $state = $_SESSION['qq']['state'];
            //--------验证state防止CSRF攻击
            if($_GET['state'] != $state){
                echo "<script>alert('QQ第三方登陆失败');</script>";
                redirect('/login','location',301);
            }

            //-------请求参数列表
            $keysArr = array(
                "grant_type" => "authorization_code",
                "client_id" => $setting[0]['appid'],
                "redirect_uri" => $setting[0]['callback'],
                "client_secret" => $setting[0]['appkey'],
                "code" => $_GET['code']
            );

            //------构造请求access_token的url
            $token_url = $this->combineURL(GET_ACCESS_TOKEN_URL, $keysArr);
            $response = $this->get_contents($token_url);

            
            $params = array();
            parse_str($response, $params);

            $_SESSION['qq']['access_token'] = $params["access_token"];
            
            $access_token = $params["access_token"];
            $openid= $this->get_openid();
            
            //进入主页
            //获取用户信息
            $_data = $this->qq_get_user($access_token,$openid);
            
            redirect('/','location',301);
        }
    
        //注销
        public function qq_logout()
        {
            
        }
        
        
        public function combineURL($baseURL,$keysArr){
            $combined = $baseURL."?";
            $valueArr = array();

            foreach($keysArr as $key => $val){
                $valueArr[] = "$key=$val";
            }

            $keyStr = implode("&",$valueArr);
            $combined .= ($keyStr);

            return $combined;
        }
        
        /**
         * get_contents
         * 服务器通过get请求获得内容
         * @param string $url       请求的url,拼接后的
         * @return string           请求返回的内容
         */
          public function get_contents($url)
          {
            if (ini_get("allow_url_fopen") == "1") {
                $response = file_get_contents($url);
            }else{
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
                curl_setopt($ch, CURLOPT_URL, $url);
                $response =  curl_exec($ch);
                curl_close($ch);
            }

            //-------请求为空
            if(empty($response)){
                echo "<script>alert('QQ第三方登陆失败');</script>";
                redirect('/login','location',301);
            }
            return $response;
        }
        
        public function get_openid()
        {

            //-------请求参数列表
            $keysArr = array(
                "access_token" => $_SESSION['qq']['access_token']
            );

            $graph_url = $this->combineURL(GET_OPENID_URL, $keysArr);
            $response = $this->get_contents($graph_url);

            //----检测错误是否发生
            if(strpos($response, "callback") !== false)
            {

                $lpos = strpos($response, "(");
                $rpos = strrpos($response, ")");
                $response = substr($response, $lpos + 1, $rpos - $lpos -1);
            }

            $user = json_decode($response);
            //------记录openid
            $_SESSION['qq']['openid'] = $user->openid;
            return $user->openid;
        }
        
        
        
        
        
        /**
        * _call
        * 魔术方法,做api调用转发
        * @param string $name    调用的方法名称
        * @param array $arg      参数列表数组
        * @since 5.0
        * @return array          返加调用结果数组
        */
        public function __call($name,$arg){
        //如果APIMap不存在相应的api
        if(empty($this->APIMap[$name])){
            echo "<script>alert('获取资料出错');</script>";
            redirect('/login','location',301);
        }

        //从APIMap获取api相应参数
        $baseUrl = $this->APIMap[$name][0];
        $argsList = $this->APIMap[$name][1];
        $method = isset($this->APIMap[$name][2]) ? $this->APIMap[$name][2] : "GET";

        if(empty($arg)){
            $arg[0] = null;
        }

        //对于get_tenpay_addr,特殊处理,php json_decode对\xA312此类字符支持不好
        if($name != "get_tenpay_addr"){
            $response = json_decode($this->_applyAPI($arg[0], $argsList, $baseUrl, $method));
            $responseArr = $this->objToArr($response);
        }else{
            $responseArr = $this->simple_json_parser($this->_applyAPI($arg[0], $argsList, $baseUrl, $method));
        }


        //检查返回ret判断api是否成功调用
        if($responseArr['ret'] == 0){
            return $responseArr;
        }else{
            echo "<script>alert('第三方登陆失败')</script>";
            redirect('/','location',301);
        }

    }
    
    //调用相应api
    private function _applyAPI($arr, $argsList, $baseUrl, $method){
        $pre = "#";
        $keysArr = $this->keysArr;

        $optionArgList = array();//一些多项选填参数必选一的情形
        foreach($argsList as $key => $val){
            $tmpKey = $key;
            $tmpVal = $val;

            if(!is_string($key)){
                $tmpKey = $val;

                if(strpos($val,$pre) === 0){
                    $tmpVal = $pre;
                    $tmpKey = substr($tmpKey,1);
                    if(preg_match("/-(\d$)/", $tmpKey, $res)){
                        $tmpKey = str_replace($res[0], "", $tmpKey);
                        $optionArgList[$res[1]][] = $tmpKey;
                    }
                }else{
                    $tmpVal = null;
                }
            }

            //-----如果没有设置相应的参数
            if(!isset($arr[$tmpKey]) || $arr[$tmpKey] === ""){

                if($tmpVal == $pre){//则使用默认的值
                    continue;
                }else if($tmpVal){
                    $arr[$tmpKey] = $tmpVal;
                }else{
                    if($v = $_FILES[$tmpKey]){

                        $filename = dirname($v['tmp_name'])."/".$v['name'];
                        move_uploaded_file($v['tmp_name'], $filename);
                        $arr[$tmpKey] = "@$filename";

                    }else{
                        $this->error->showError("api调用参数错误","未传入参数$tmpKey");
                    }
                }
            }

            $keysArr[$tmpKey] = $arr[$tmpKey];
        }
        //检查选填参数必填一的情形
        foreach($optionArgList as $val){
            $n = 0;
            foreach($val as $v){
                if(in_array($v, array_keys($keysArr))){
                    $n ++;
                }
            }

            if(! $n){
                $str = implode(",",$val);
                $this->error->showError("api调用参数错误",$str."必填一个");
            }
        }

        if($method == "POST"){
            if($baseUrl == "https://graph.qq.com/blog/add_one_blog") $response = $this->urlUtils->post($baseUrl, $keysArr, 1);
            else $response = $this->urlUtils->post($baseUrl, $keysArr, 0);
        }else if($method == "GET"){
            $response = $this->urlUtils->get($baseUrl, $keysArr);
        }

        return $response;

    }
    
    //php 对象到数组转换
    private function objToArr($obj){
        if(!is_object($obj) && !is_array($obj)) {
            return $obj;
        }
        $arr = array();
        foreach($obj as $k => $v){
            $arr[$k] = $this->objToArr($v);
        }
        return $arr;
    }
    
    //简单实现json到php数组转换功能
    private function simple_json_parser($json){
        $json = str_replace("{","",str_replace("}","", $json));
        $jsonValue = explode(",", $json);
        $arr = array();
        foreach($jsonValue as $v){
            $jValue = explode(":", $v);
            $arr[str_replace('"',"", $jValue[0])] = (str_replace('"', "", $jValue[1]));
        }
        return $arr;
    }

    }




保存
说明:这段代码复制不过就行,不用做任何改动。这个是最核心的代码,代码比较多,但是功能代码就这些了,想想,在自己的网站上,别人用qq帐号就可以登录了,都不用注册,多方便啊,是吧,这样一想这些代码也不算多了。
            
            


4.建控制器。打开application下的controllers文件夹,在controllers下新建一个文件qq.php,打开qq.php,复制下面代码:


<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    /*
     * @ qq登陆 注销 消息获取等
     * @author
     */
    class QQ extends CI_Controller
    {
       
        public function __construct() {
            parent::__construct();
            session_start();
            $this->load->helper('url'); 
            //error_reporting(0);
            /*qq登陆*/
           $this->load->library('tencent/oauth','oauth'); 
        }
        
        public function index()
        {   
            //验证是登陆还是回调
            if($this->oauth->check_login() === 'false')
            {
                $this->oauth->qq_login();
            }
            else
            {
                $this->oauth->qq_callback();
            }
                
        }     
    }


保存
说明:这段代码不用做修改。

5.放置登录按钮,点击用QQ帐号登录按钮,跳转到QQ登录页面登录。
在你的登录页面放按钮的位置,写入:
<div><a href="/qq"><img src="http://images.cnblogs.com/qq_login.png" width="110" /></a></div>

保存
说明:样式你可自己调整,图片按钮可以从官网下载,地址:http://wiki.connect.qq.com/%E8%A7%86%E8%A7%89%E7%B4%A0%E6%9D%90%E4%B8%8B%E8%BD%BD#2.QQ.E7.99.BB.E5.BD.95.E6.A1.86.E6.A0.87.E5.87.86.E6.A0.B7.E5.BC.8F


到这里,QQ第三方登录接口就OK了,你打开你的登录页面,点击QQ登录的图片按钮,它会转到QQ登录页面登录,如果要上线,要用到别的功能,可在这几个文件上填代码就行了。

接口调试之获取个人签名的方法 @RequestMapping({"/test"}) public MessageBean test() { try{ HttpClient httpClient = new HttpClient(Optional.empty()); String appToken="WOAYGHIkxe"; String appSecret="1u2Kgy02RGuUH1c2Mo4EMOwN9hvdSQ"; ... 阅读详情

相关推荐

帝国cms外部接口QQ互联登录直接完成注册免绑定账号设置

帝国cms在7.0版本就已经开通外部登录接口,但是很多朋友网站还是没有配置QQ登录,正好今天接了一个网友咨询帮忙配置QQ互联实现QQ登录,且要求免绑定登录账号、也就是说要实现QQ登录后自动注册功能本着能帮则帮,能抄照抄的原则,搜索引擎搜索了相关插件,下载了一个帝国7.2版本的,版本链接如下:百度网盘: https://pan.baidu.com/s/1vo4yqiW6Zn5WOv2Ci9MfZQ提...

qq154080001的博客 518

CI框架 QQ接口(第三方登录接口PHP版)

本帖内容较多,大部分都是源码,要修改的地方只有一个,其他只要复制过去,就可以完美运行。本帖主要针对CI框架,不用下载SDK,按我下面的步骤,建文件,复制代码就可以了。10分钟不要,接口就可完成。 第一步:申请APP ID,APP KEY,申请地址:http://connect.opensns.qq.com/ 验证通过后:会得到APP ID,APP KEY。这是你用个文件把这些信息保持下来,免得

低调走过 1万+

QQ获取等级接口.txt

QQ获取等级接口

QQ 聊天机器人API

QQ机器人是腾讯陆续推出的的人工智能聊天机器人的总称。都说小Q妹妹聪明好学,我们可以教她说话,也可以请他帮忙查询邮编、手机号,或者解释成语、翻译成语,据说她还会查询手机号码归属地、应用科学计算器。 可是,在查新闻、查列车、车航班、查团购、查价格、查优惠、查酒店、查餐厅、查彩票等方面,小Q妹妹就弱爆了,“逆水行舟,不进则退”小Q妹妹真应该被pass掉了。笔者已经开始使用一款功能更强的机器人——图灵

jjccwwbb的专栏 1万+

智能车竞赛环岛处理全解析:从图像识别到状态机控制

在嵌入式系统与自动控制领域,状态机是管理复杂系统行为、实现清晰逻辑流的核心设计模式。其原理在于定义一组有限的状态,以及触发状态迁移的事件和条件,从而将连续、模糊的过程分解为离散、确定的阶段。这种技术在机器人导航、工业自动化等场景中价值显著,尤其适用于需要应对多种场景、做出序列化决策的场合。在智能车竞赛中,赛道元素识别与路径跟踪是典型应用,其中环岛作为连续闭环的复杂场景,对系统的鲁棒性和决策连贯性提出了更高要求。通过图像处理提取赛道边线、宽度和曲率等特征,结合陀螺仪等传感器数据,可以构建一个专门处理环岛的状态

weixin_34033624的博客 561

《Halcon 100项目-9》Halcon彩色线序检查

Halcon彩色线序检查

doubleintfloat的博客 1043

快速部署Qsign签名服务器为go-cqhttp或icqq进行签名认证

用于一键在Windows下部署fuqiuluo/unidbg-fetch-qsign

大狐狐的博客! 1万+

STM32 ES8266上阿里云IOT MQTT实践【第七章】:ESP8266+MQTT上阿里云物联网平台实践

本篇文章讲述了如何使用stm32接入阿里云IOT,WiFi模块为ESP8266,可以实现发布以及订阅。

超级大洋葱的博客 2万+

CI框架 第三方接口QQ登录

本帖内容较多,大部分都是源码,要修改的地方只有一个,其他只要复制过去,就可以完美运行。本帖主要针对CI框架,不用下载SDK,按我下面的步骤,建文件,复制代码就可以了。10分钟不要,接口就可完成。第一步:申请APP ID,APP KEY,申请地址:http://connect.opensns.qq.com/验证通过后:会得到APP ID,APP KEY。这是你用个文件把这些信息保持下来,免得用的时候

www.phptuku.com——PHP全栈工程师的摇篮! 1793

2022-2028年中国美容仪行业发展战略规划及投资机会预测报告

报告类型:产业研究 报告格式:电子版、纸介版 出品单位:智研咨询-产业信息网 美容仪是一种根据人体生理机能进行调节改善身体和面部的机器,它按照功能来说有美白、嫩肤、祛斑、祛皱、脱毛、减肥等多种,按照名称来说有超声波导入、光子嫩肤、高周波电疗、RF 电波拉皮、电子祛斑点痣、E 光永久脱毛嫩肤、贾法尼营养导入导出等。 智研咨询发布的《2022-2028年中国美容仪行业发展战略规划及投资机会预测报告》共十七章。首先介绍了中国美容仪行业市场发展环境、美容仪整体运行态势等,接着分析了中...

kt346的博客 468

SPSS_Process—简单&平行&链式中介模型

本篇文章介绍采用SPSS的插件Process对简单中介、链式中介、平行中介模型进行检验的操作方法及结果解读。

m0_54401011的博客 4万+

qq登陆接口

本帖内容较多,大部分都是源码,要修改的地方只有一个,其他只要复制过去,就可以完美运行。本帖主要针对CI框架,不用下载SDK,按我下面的步骤,建文件,复制代码就可以了。10分钟不要,接口就可完成。 第一步:申请APP ID,APP KEY,申请地址:http://connect.opensns.qq.com/ 验证通过后:会得到APP ID,APP KEY。这是你用个文件把这些信息保持下来,免得用的...

谢谢你,慌乱了我的年华 3347

100天精通Oracle-实战系列(第14天)Veritas NetBackup(NBU) 配合 RMAN 脚本备份 Oracle 数据库

100天精通Oracle-实战系列(第14天)Veritas NetBackup(NBU) 配合 RMAN 脚本备份 Oracle 数据库

LuciferLiu_DBA 1993

第三方登录(QQ登录)开发流程详解

第三方登录(QQ登录)开发流程详解   近排由于工作的繁忙,已经一个星期没写博文做分享了,接下来我对网站接入第三方登录----QQ登录的实现逻辑做一个详细的讲解。   对于整个流程的详细文档可以到QQ互联官网(http://wiki.connect.qq.com)查看,我这里就简单地进行描述,主要是分析代码的实现过程。   我用的是CI框架(MVC模式),模板引擎用的是sma

Smile李先生 1万+

机器学习笔记 - 神经辐射场(NeRF)的简要概述

神经辐射场十分重要。在表示和渲染 3D 场景领域,神经辐射场 (NeRF) 在准确性方面取得了巨大突破。给定底层场景的多个图像,NeRF 可以从任意视点重建该场景的高分辨率、2D 渲染图。与局部光场融合 (LLFF) 和场景表示网络 (SRN) 等现有技术相比,NeRF 更能够捕获场景外观和几何形状的复杂组成部分(例如,依赖于视图的反射和复杂的材料)。NeRF的研究目的是合成同一场景不同视角下的图像。

学以致用 知行合一 1693

深蓝词库转换:终极输入法词库兼容解决方案

深蓝词库转换是一款开源免费的输入法词库转换程序,能够轻松解决不同输入法之间的词库兼容难题。无论你使用QQ拼音、搜狗拼音、百度拼音还是Rime输入法,这款工具都能帮你实现词库的无缝转换,让你的输入体验更加流畅高效。 [![深蓝词库转换应用图标](https://raw.gitcode.com/gh_mirrors/im/imewlconverter/raw/d26b5bd8f22b1b5126ad

gitblog_00638的博客 134

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

CI框架中QQ邮箱发送邮件

public function qq(){       $this->load->library('email');       $config['protocol'] = 'smtp';       $config['smtp_host'] = 'ssl://smtp.qq.com';       $config['smtp_user'] = 'XXXXXXXXX@qq.com';  

Huangwenting1990的博客 4889

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

CI框架下 新浪微博登录接口完整版

https://www.cnblogs.com/yznyzcw/p/3756622.html#top 说明:本贴只适合CI框架。功能实现:登录接口跳转链接成功,获取用户信息(包括最重要的u_id)成功,将用户与本地平台连接起来,用户登录成功后信息的存储,本地数据库第三方登录表的设计。总之接口流程已全部完成。每个关键步骤我几乎都有注释,讲解详细。首先来看下流程:流程原理: 1.通...

axfcjwkbi259888707的博客 180

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

php右什么ci框架,php开发(CI框架使用)

年前接了一个外包项目,要求使用PHP,琢磨来琢磨去,感叹道PHP框架实在是太多了!去知乎搜索一轮,最后决定使用CI,相关议论如下:https://www.zhihu.com/question/21617669(备注:不代表个人观点,站在个人角度其实也无他,就是这个框架实在比较简单些,而且文档健全、小巧灵活)于是呼,便着手做了个小练习,页面的话使用bootstrap,其实实在没想到要做什么功能,于是...

weixin_39664746的博客 190

php CI 第三方授权登录 QQ授权登录

申请地址 QQ互联 直接上代码 以下代码是放在application/libraries 如果你不是用的CI 框架也可以直接new QQ授权配置类 config.php <?php header('Content...

chuchenqian9735的博客 201

PHP的CI框架学习

一、前言       完全没想到新公司会使用CI框架,虽然一直听说,但是大家平时还是用laravel,yii,tp多一些,第一次接触CI,值得记录一下。       网上关于CI的文档很多,也很全面,博主这里只是简单的记录下。后续有需要记录的还会持续补充,,并不是一篇对新手很友好的文章了。。 二、CI入门 手册地址:http://codeigniter.org.cn/user_guide/

铁柱的博客 3517

ci 邮件 html模板,CI框架配置QQ邮箱发邮件

配置:$config['email_config']['protocol'] = 'smtp';$config['email_config']['smtp_host'] = 'smtp.qq.com';$config['email_config']['smtp_user'] = '***@qq.com';$config['email_config']['smtp_pass'] = '***';//...

weixin_31366459的博客 504

CI框架使用PHPmail插件发送QQ邮件:

购买阿里云相关服务,这里可以领取优惠券, 有的产品5折优惠哟, 注意, 领取的优惠券30天内有效,尽快使用:领取方式:进入链接后 页面下拉 一键领取全部 或者按需每次领取对应的优惠,领取链接:点击此处链接领取https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?user...

weixin_34315665的博客 229
上一篇: xmlhtprequest
下一篇: 话说 依赖注入(DI) or 控制反转(IoC)
vm021
博客等级 码龄11年 6粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值