第三方登录

来源:互联网 发布:笔记本电脑录视频软件 编辑:程序博客网 时间:2024/05/23 00:06
  

第三方合作登录平台使用说明

为方便更多的开发朋友,本人特将当前市面上所有支持第三方联合登录的接口集为一体,以前需要多次开发才能完成的登录现在只需要一次即可搞定。再也不需要因为等待审核而耽误进度项目进度了。使用方便,操作简单,以下为本插件的具体使用方法:

 

申请使用

1、首先登录网站 http://open.51094.com/ 

2、点击右上角《登录》按钮进行登录,登录成功后会自动跳转至管理中心。

3、进入管理中心后点击创建应用按钮,如下图:

 

4、选择应用类型为《网站应用》,完成后跳转至应用信息填写页面。

5、信息填写页面如下图所示,按要求正确填写应用信息,完成后点击创建应用即可使用。

 参数说明:

名称: 申请应用的简称

详情: 应用的说明信息,字数不得少于10个汉字

登录成功回调地址:

申请方接收用户信息的url , 我们以url+?+参数的格式通知申请方。切记填写的url中不可以带有?

支持的登录方式:

提供自己选择,默认为全选。

 

创建应用图

客户端引用(网站应用)

1、在用户中心的管理中心处可以查看到应用需要引用的js地址,如下图红框所示:

 

2、在需要登录的页面中加入如下js代码

<script type="text/javascript" src="http://open.51094.com/user/myscript/153dee5be21e2.html"></script>

3、在页面标签中加入(<span id="hzy_fast_login"></span>)如下图所示

 

4、成功加入后在登录页面即可看到相应的登录。如下图所示。

 

登录成功回调通知

2014-11-1日之后注册用户请使用方式二

方案一(已弃用)

回调方式

GET  

回调url

申请应用时填写的登录成功回调地址

回调格式

http://url/user/hezuo.html?param=%7B%22name%22%3A%22oh%21no%22%2C%22img%22%3A%22http%3A%5C%2F%5C%2Fq.qlogo.cn%5C%2Fqqapp%5C%2F100478927%5C%2F863A85B9B176E2408E05DF05D46FDB3F%5C%2F100%22%2C%22sex%22%3A0%2C%22uniq%22%3A%22qqO8HdWKMKpVI%22%2C%22from%22%3A%22qq%22%7D

参数

取得param参数内容后先做url解码,再进行json解码即可得到如下内容:

 

name

登录获取的用户名称

img

头像地址

sex

性别

uniq

第三方获得的唯一码

from

登录来源  如 qqweiborenren

 

方案二

可参考:http://test.open.51094.com/index.php

回调方式

GET

回调url

申请应用时填写的登录成功回调地址

回调格式

http://url/user/hezuo.html?code=code

参数

取得code参数内容后先再使用post方式请求:

url: http://open.51094.com/user/auth.html

POST参数:

type:get_user_info

code:传回的code

appid:申请到的appid( 页上点击应用名称获取 )

    token:申请到的token( 页上点击应用名称获取 )

信息会以json串的形式返回,得到信息后json_decode( $str,true )后得到以下内容:(获取方式可参考附录

name

登录获取的用户名称

img

头像地址

sex

性别

uniq

第三方获得的唯一码

from

登录来源  如 qqweiborenren

 

 

此插件为免费插件,可用于商业用途,请在使用时标注开发人。

 

 

使用注意点:

1、引用js页面域名与申请时的回调地址域名一定要相同。

2、引用的js后页面上一定要加id='hzy_fast_login'的标签。

3、申请的回调url中不允许出现?

 

 

错误代码集:

错误码

问题

10001

用户appid错误

10002

所传tokenappid不匹配

10003

请求域名与注册域名不匹配(有回调地址决定注册域名)

time out

登录超时,需要重新登录

 

附录:

Php获取信息代码:  源码http://test.open.51094.com/index.php

1、配置文件  open.config.php

内容:

<?php

/**

 *@ 注册地址 http://open.51094.com

 *@ QQ交流群:373703921

 *@ 博客地址:http://www.51094.com

 *@ 测试地址:http://open.51094.com/user/login.html

 *

 *@ author: hzy@51094.com

 *

 **/

define( 'APPID', '申请时得到的appid');

define( 'TOKEN', '申请时得到的token');

?>

2、open类文件 open51094.class.php

<?php

include 'open.config.php';

class open51094{

private $appid;

private $token;

private $return_uri;

private $access_token;

private $url = 'http://open.51094.com/user/auth.html';

 

function __construct(){

$this->appid = APPID;

$this->token = TOKEN;

}

 

function me( $code ){

#$this->getAccessToken();

$params=array(

'type'=>'get_user_info',

'code'=>$code,

'appid'=>$this->appid,

'token'=>$this->token

);

return $this->http( $params );

}

private function http( $postfields='', $method='POST', $headers=array()){

$ci=curl_init();

curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($ci, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30);

curl_setopt($ci, CURLOPT_TIMEOUT, 30);

if($method=='POST'){

curl_setopt($ci, CURLOPT_POST, TRUE);

if($postfields!='')curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);

}

$headers[]="User-Agent: 51094PHP(open.51094.com)";

curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);

curl_setopt($ci, CURLOPT_URL, $this->url);

$response=curl_exec($ci);

curl_close($ci);

$json_r=array();

if(!empty( $response ))$json_r=json_decode($response, true);

return $json_r;

}

}

?>

3、返回页面 back.php

<?php

include 'open51094.class.php';

 

$open = new open51094();

$code = $_GET['code'];

var_dump( $open->me($code) );

?>

 

JAVA获取信息代码:

import java.util.Date;

import java.util.UUID;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.apache.struts2.ServletActionContext;

import org.json.JSONObject;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Scope;

import org.springframework.stereotype.Controller;

 

@SuppressWarnings("serial")

@Controller

@Scope("prototype")

public class UserthirdpartyAction{

//第三方平台提供的参数

private static String appid="15********";

private static String token="14**********";

 

public String thirdlogin(){

HttpServletRequest  request = ServletActionContext.getRequest();

String code  = CheckNull.check(request.getParameter("code"));

System.out.println("第三方登录返回结果:"+code );

if("".equals(code )||null==code ){

System.out.println("回调函数没有执行");

return "fail";

}else{

 String url=HttpRequest.sendPost("http://open.51094.com/user/auth.html", "type=get_user_info&code="+code+"&appid="+appid+"&token="+token+"");

         System.out.println(url);

 //解析结果

 JSONObject jsonObj = new JSONObject(url);

            // 得到指定json key对象的value对象

  //解析封装对象

return "Redirect";

}

}

}

 

 

HttpRequet 类:

package wzh.Http; import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.URL;import java.net.URLConnection;import java.util.List;import java.util.Map;public class HttpRequest {    /**     *向指定URL发送GET方法的请求     *     * @param url     *            发送请求的URL     * @param param     *            请求参数,请求参数应该是name1=value1&name2=value2的形式。     * @return URL所代表远程资源的响应结果     */    public static String sendGet(String url, String param) {        String result = "";        BufferedReader in = null;        try {            String urlNameString = url +"?" + param;            URL realUrl =new URL(urlNameString);            //打开和URL之间的连接            URLConnection connection = realUrl.openConnection();            //设置通用的请求属性            connection.setRequestProperty("accept","*/*");            connection.setRequestProperty("connection","Keep-Alive");            connection.setRequestProperty("user-agent",                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");            //建立实际的连接            connection.connect();            //获取所有响应头字段            Map<String, List<String>> map = connection.getHeaderFields();            //遍历所有的响应头字段            for (String key : map.keySet()) {                System.out.println(key +"--->" + map.get(key));            }            //定义BufferedReader输入流来读取URL的响应            in =new BufferedReader(new InputStreamReader(                    connection.getInputStream()));            String line;            while ((line = in.readLine()) != null) {                result += line;            }        }catch (Exception e) {            System.out.println("发送GET请求出现异常!" + e);            e.printStackTrace();        }        //使用finally块来关闭输入流        finally {            try {                if (in !=null) {                    in.close();                }            }catch (Exception e2) {                e2.printStackTrace();            }        }        return result;    }     /**     *向指定URL发送POST方法的请求     *     * @param url     *            发送请求的URL     * @param param     *            请求参数,请求参数应该是name1=value1&name2=value2的形式。     * @return所代表远程资源的响应结果     */    public static String sendPost(String url, String param) {        PrintWriterout =null;        BufferedReaderin =null;        String result ="";        try {            URL realUrl =new URL(url);            //打开和URL之间的连接            URLConnection conn = realUrl.openConnection();            //设置通用的请求属性            conn.setRequestProperty("accept","*/*");            conn.setRequestProperty("connection","Keep-Alive");            conn.setRequestProperty("user-agent",                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");            //发送POST请求必须设置如下两行            conn.setDoOutput(true);            conn.setDoInput(true);            //获取URLConnection对象对应的输出流            out =new PrintWriter(conn.getOutputStream());            //发送请求参数            out.print(param);            // flush输出流的缓冲            out.flush();            //定义BufferedReader输入流来读取URL的响应            in =new BufferedReader(                    new InputStreamReader(conn.getInputStream()));            String line;            while ((line =in.readLine()) !=null) {                result += line;            }        }catch (Exception e) {            System.out.println("发送POST请求出现异常!"+e);            e.printStackTrace();        }        //使用finally块来关闭输出流、输入流        finally{            try{                if(out!=null){                    out.close();                }                if(in!=null){                    in.close();                }            }            catch(IOException ex){                ex.printStackTrace();            }        }        return result;    }    }

 

0 0
原创粉丝点击