O site do aplicativo para a terceira interface de login da plataforma: http://open.51094.com/
documento:
Para facilitar mais amigos de desenvolvimento, integrei especialmente todas as interfaces no mercado que suportam o login conjunto de terceiros. O login que costumava exigir vários desenvolvimentos agora pode ser concluído apenas uma vez. Não há necessidade de adiar o progresso do projeto, aguardando a revisão. Fácil de usar e fácil de operar. A seguir, o método de uso específico deste plug-in:
1. Primeiro faça login no site http://open.51094.com/.
2. Clique no botão "Login" no canto superior direito para fazer login. Após o login com sucesso, ele automaticamente pulará para o centro de gerenciamento.
3. Depois de entrar no centro de gerenciamento, clique no botão Criar aplicativo, como mostrado abaixo:
4. Selecione o tipo de aplicativo como "aplicativo do site" e, após a conclusão, pule para a página de preenchimento de informações do aplicativo.
5. A página de preenchimento de informações é mostrada na figura abaixo. Preencha as informações do aplicativo corretamente, conforme necessário. Após a conclusão, clique em Criar aplicativo para usá -lo.
Descrição do parâmetro:
Nome: A abreviação do aplicativo
Detalhes: Informações da descrição do aplicativo, o número de palavras não deve ser inferior a 10 caracteres chineses
Login Endereço de retorno de chamada com sucesso:
O candidato recebe o URL das informações do usuário e notificamos o candidato no formato dos parâmetros URL+?+. Lembra que o URL que você preenche não pode conter?
Métodos de login suportados:
Forneça sua própria escolha, o padrão é selecionar tudo.
Crie um diagrama de aplicativos
1. Você pode visualizar o endereço JS que o aplicativo precisa fazer referência no centro de gerenciamento do centro de usuários, conforme mostrado na caixa vermelha na figura abaixo:
2. Adicione o seguinte código JS à página que você precisa fazer login
<script type = "text/javascript" src = "http://open.51094.com/user/myscript/153dee5be21e2.html"> </script>
3. Add (<span id = "hzy_fast_login"> </span>) à tag de página, como mostrado na figura a seguir
4. Depois de entrar com sucesso, você pode ver o login correspondente na página de login. Como mostrado na figura abaixo.
Use o segundo método de registrar usuários após 2014-11-1
Plano 1 (depreciado)
Método de retorno de chamada | PEGAR | |
URL de retorno de chamada | O endereço de retorno de chamada de login é preenchido ao solicitar o aplicativo | |
Formato de retorno de chamada | 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 %cn%5%2F q q q q qlogo.cn %c%5%2F q q q qLOGO.Cn %C%5%2F q q q qLoP1p1p1p1p1p1p1p1p1p1p1p1p1p1p1p1p1p1p1p1p1p1p1p1p1p1p1p1%22%22%22%22%22%22%22fq 8927%5c%2f863a85b9b176e2408e05df05d46fdb3f%5c%2f100%22%2C%22SEX%22%3A0%2C%22 22 22 22%22qOM | |
parâmetro | Após obter o conteúdo dos parâmetros de parâmetros, faça a decodificação da URL primeiro e depois executando a decodificação da JSON para obter o seguinte conteúdo: | |
nome | Faça login para obter o nome de usuário | |
img | Endereço de Avatar | |
sexo | gênero | |
Uniq | O único código obtido por terceiros | |
de | Fontes de login como QQ, Weibo, Renren, etc. | |
Plano 2
Consulte: http://test.open.51094.com/index.php
Método de retorno de chamada | PEGAR | |
URL de retorno de chamada | O endereço de retorno de chamada de login é preenchido ao solicitar o aplicativo | |
Formato de retorno de chamada | http: //url/user/hezuo.html? code = code | |
parâmetro | Depois de obter o conteúdo do parâmetro do código, use o método de postagem para solicitar: URL: http://open.51094.com/user/auth.html Parâmetros de postagem: Tipo: get_user_info Código: o valor do código retornado APPID: O valor Appid aplicado (clique no nome do aplicativo na página da web para obter) Token: o valor do token aplicado (clique no nome do aplicativo na página da web para obter) As informações serão retornadas na forma de uma string json. Após obter as informações, JSON_DECODE ($ STR, TRUE) receberá o seguinte conteúdo: (Consulte o Apêndice para o método de aquisição) | |
nome | Faça login para obter o nome de usuário | |
img | Endereço de Avatar | |
sexo | gênero | |
Uniq | O único código obtido por terceiros | |
de | Fontes de login como QQ, Weibo, Renren, etc. | |
Este plug-in é um plug-in gratuito e pode ser usado para fins comerciais. Marque o desenvolvedor ao usá -lo.
Notas sobre o uso de:
1. O nome de domínio da página JS de referência deve ser o mesmo que o nome de domínio do endereço de retorno de chamada ao aplicar.
2. A tag com id = 'hzy_fast_login' deve ser adicionada à página após o JS referenciado.
3. O URL de retorno de chamada solicitado não está autorizado a aparecer?
Conjunto de código de erro:
Código de erro | pergunta |
10001 | Erro do usuário Appid |
10002 | O token não corresponde ao Appid |
10003 | O nome de domínio solicitado não corresponde ao nome de domínio registrado (existe um endereço de retorno de chamada para determinar o nome de domínio registrado) |
tempo esgotado | O login cronometrou, precisa fazer login novamente |
apêndice:
PHP Obtenha o Código de Informações: Código Fonte http://test.open.51094.com/index.php
1. Arquivo de configuração Open.config.php
contente:
<? php
/**
*@ Endereço registrado http://open.51094.com
*@ QQ Comunicação Grupo: 373703921
*@ Endereço do blog: http://www.51094.com
*@ Endereço de teste: http://open.51094.com/user/login.html
*
*@ Autor: [email protected]
*
**/
define ('Appid', 'Appid obtido ao aplicar');
define ('token', 'valor de token obtido ao aplicar');
?>
2. Arquivo de classe aberta Open51094.class.php
<? php
incluir 'open.config.php';
classe Open51094 {
Private $ appid;
token privado $;
private $ return_uri;
privado $ access_token;
privado $ url = 'http://open.51094.com/user/auth.html';
função __construct () {
$ this-> Appid = Appid;
$ this-> token = token;
}
funcione -me ($ code) {
#$ this-> getAccessToken ();
$ params = array (
'type' => 'get_user_info',
'Código' => Código $,
'Appid' => $ this-> Appid,
'token' => $ this-> token
);
retornar $ this-> http ($ params);
}
Função privada http ($ postfields = '', $ método = 'post', $ headers = array ()) {
$ ci = curl_init ();
Curl_SESTOPT ($ CI, Curlopt_ssl_verifyPeer, false);
Curl_SESTOPT ($ CI, Curlopt_ReTurnTransfer, 1);
Curl_SESTOPT ($ CI, Curlopt_ConnectTimeout, 30);
Curl_SESTOPT ($ CI, Curlopt_timeout, 30);
if ($ método == 'post') {
Curl_SESTOPT ($ CI, Curlopt_Post, true);
if ($ postfields! = '') Curl_SESTOPT ($ CI, Curlopt_Postfields, $ Postfields);
}
$ headers [] = "User-Agent: 51094php (open.51094.com)";
Curl_SESTOPT ($ CI, Curlopt_Httpheader, $ Headers);
curl_setot ($ CI, Curlopt_url, $ this-> url);
$ resposta = curl_exec ($ ci);
curl_close ($ ci);
$ json_r = array ();
if (! vazio ($ resposta)) $ json_r = json_decode ($ resposta, true);
retornar $ json_r;
}
}
?>
3. Volte à página de volta.php
<? php
incluem 'open51094.class.php';
$ open = new Open51094 ();
$ code = $ _get ['código'];
var_dump ($ aberto-> me ($ code));
?>
Java obtém código de informação:
importar java.util.date;
importar java.util.uuid;
importar javax.servlet.http.httpServletRequest;
importar javax.servlet.http.httpServletResponse;
importar org.apache.struts2.ServletActionContext;
importar org.json.jsonObject;
importar org.springframework.beans.factory.annotation.autowired;
importar org.springframework.context.annotation.Scope;
importar org.springframework.tereotype.controller;
@Suppresswarnings ("serial")
@Controlador
@Scope ("Prototype")
classe pública UserThirdPartyAction {
// parâmetros fornecidos por plataformas de terceiros
String estática privada appid = "15 *********";
token de string estática privada = "14 *********";
public string terrecherLogin () {
HttpServletRequest request = servletActionContext.getRequest ();
String code = checkNull.check (request.getParameter ("código"));
System.out.println ("Login de terceiros retorna o resultado:"+código);
if ("". Equals (code) || null == code) {
System.out.println ("A função de retorno de chamada não é executada");
retornar "falha";
}outro{
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);
// Resultados da análise
JsonObject jsonObj = novo JsonObject (URL);
// Obtenha o objeto Valor do objeto de chave JSON especificado
// Parse objeto encapsulado
retornar "redirecionar";
}
}
}
Classe httprequet:
pacote wzh.http;
importar java.io.bufferedReader;
importar java.io.ioException;
importar java.io.inputStreamReader;
importar java.io.printwriter;
importar java.net.url;
importar java.net.urlConnection;
importar java.util.list;
importar java.util.map;
classe pública httprequest {/**
* Envie uma solicitação para o URL especificado para obter o método
*
* @param url
* O URL para enviar o pedido
* @param param
* Parâmetros de solicitação, os parâmetros de solicitação devem estar na forma de nome1 = value1 & name2 = value2.
* @return URL Resultados de resposta para o recurso remoto representado por
*/
public static string sendget (string url, string param) {String result = "";
BufferredReader in = null;
tentar {String urlnamestring = url + "?" + param;
Url realurl = novo url (urlnamestring);
// Abra a conexão com o URL
Conexão de urlConnection = realUrl.Openconnection ();
// Defina atributos de solicitação comum
Connection.SetRequestProperty ("Acept", "*/*"); Connection.SetRequestProperty ("Connection", "Keep-Alive"); Connection.SetRequestProperty ("User-Agent","Mozilla/4.0 (compatível; msie 6.0; Windows nt 5.1; sv1)");
// Crie uma conexão de conexão real.connect ();
// Obtenha todos os campos de cabeçalho de resposta
Mapa <string, list <string>> map = conexão.getheaderfields ();
// iterar em todos os campos de cabeçalho de resposta
para (chave de string: map.keyset ()) {System.out.println (chave + "->" + map.get (chave));
}
// Defina o fluxo de entrada do leitor buffersed para ler a resposta do URL
in = new bufferredreader (novo inputStreamReader (
conexão.getInputStream ()));
Linha de string;
while ((line = in.readline ())! = null) {resultado += linha;
}
} catch (Exceção e) { System.out.println ("Exceção ocorreu ao enviar solicitação Get!" + E);E.PrintStackTrace ();
}
// Use finalmente blocos para fechar o fluxo de entrada
Finalmente { tentar { if (in! = null) {in.Close ();
}
} catch (Exceção E2) {e2.PrintStackTrace ();
}
}
resultado de retorno;
}
/**
* Envie uma solicitação de método de postagem para o URL especificado
*
* @param url
* O URL para enviar o pedido
* @param param
* Parâmetros de solicitação, os parâmetros de solicitação devem estar na forma de nome1 = value1 & name2 = value2.
* @return Resposta Resultado do recurso remoto representado
*/
public static string sendPost (String URL, String param) {PrintWriter Out = NULL;
BufferredReader in = null;
String result = "";
tentar {Url realurl = new URL (URL);
// Abra a conexão com o URL
UrlConnection Conn = realurl.Openconnection ();
// Defina atributos de solicitação comum
Conn.SetRequestProperty ("aceitar", "*/*"); Conn.SetRequestProperty ("Connection", "Keep-Alive"); Conn.SetRequestProperty ("User-Agent","Mozilla/4.0 (compatível; msie 6.0; Windows nt 5.1; sv1)");
// As duas linhas a seguir devem ser definidas para enviar uma solicitação de postagem
Conn.SetDoOutput (true);
Conn.SetDoinput (true);
// Obtenha o fluxo de saída correspondente ao objeto URLConnection
out = new PrintWriter (Conn.getOutputStream ());
// Enviar parâmetros de solicitação
out.print (param);
// buffer do fluxo de saída de descarga
out.flush ();
// Defina o fluxo de entrada do leitor buffersed para ler a resposta do URL
in = new BufferredReader (
new inputStreamReader (Conn.getInputStream ()));
Linha de string;
while ((line = in.readline ())! = null) {resultado += linha;
}
} catch (Exceção e) { System.out.println ("Exceção ocorreu ao enviar uma solicitação de postagem!" +E);E.PrintStackTrace ();
}
// Use finalmente blocos para fechar o fluxo de saída e o fluxo de entrada
Finalmente{ tentar{ if (out! = null) {out.Close ();
}
if (in! = null) {in.Close ();
}
}
Catch (ioexception ex) {Ex.PrintStackTrace ();
}
}
resultado de retorno;
}
}
Anexe o método de pós -redação e leitura:
// troca para obter o método digno, método post;
Login público de string estática (código da string)
{
String info = string.empty;
if (code! = "" && code! = null)
{
Httphelper m_http = new httphelper ();
Item httpitem = new httpitem ();
// item.method = "post";
item.url = "http://open.51094.com/user/auth.html";
item.method = "post";
item.encoding = coding.getEncoding ("gbk");
item.ContentType = "Application/x-www-form-urlencoded; charset = gbk";
item.postData = string.format ("type = get_user_info & code = {0} & appid = 1558Be447a9ec7 & token = e383684d8f0acb39d622457f361dc1dc", código);
// item.postData = sbtemb.toString ();
Resultado httpResult = m_http.gethtml (item);
String resulthtml = resultado.html;
Jobject obj = jobject.parse (resulthtml);
Nome da string = obj ["nome"]. ToString ();
string img = obj ["img"]. ToString ();
sexo de cordas de corda = obj ["sexo"]. ToString ();
string uniq = obj ["uniq"]. tostring ();
string de = obj ["de"]. ToString ();
info = nome + "@" + img + "@" + sexo + "@" + uniq + "@" + de;
}
retornar informações;
}
// Aceite o código para retornar a página de código
// Login de interface
String Code = request ["código"];
string [] arr = publicLogin.login (código) .split ('@');
if (arr.length == 5)
{
string unip = arr [3];
string sql = string.format ("Selecione * de BS_USER onde unip = '{0}'", unip);
if (csa.dal.dbaccess.getrs (sql) .rows.count> 0)
{
if (csa.dal.dbaccess.getrs (sql) .Rows [0] ["senha"].
{
string str = string.format ("location.href = 'myinformation.aspx? unip = {0}'", arr [3]);
Csa.hc.common.echojs (str);
}
outro
{
BS_USER User = new BS_USER ();
user.unip = unip;
Factory.getUserBlLliStance (). LoginUnip (usuário);
if (Curinfo.curUser! = NULL)
{
nível de nível = curinfo.curuser.levelname;
nome = curinfo.curuser.name;
sexo = curinfo.curuser.sex;
pwd = curinfo.curuser.password;
img = curinfo.curuser.pic;
}
Csa.hc.common.echojs ("location.href = 'myinformation.aspx'");
}
}
outro
{
// gerar código de membro
string date = dateTime.now.toString ("ymdhmssffff");
String userCode = gettreenumrandomtop () + date + gettreenumrandomend ();
string ip = httpContext.current.request.userHostaddress;
string inssql = string.format (@"inserir em [bs_user] ([code], [nome de usuário], [nível], [realname], [sex], [pic], [unip], [senha], [telefone], [fxip])
Valores ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8},' {9}),, usecode, arr [0]. UserCode.substring (3, 8), arr [0] .Trim ('"'), arr [2], arr [1] .Trim ('"'), arr [3], csa.security.encrypt.getmd5 ("123456"), fkt_ " + usecod.substring (3, 8)," fkt_ " + usecode.substring (3, 8),
int row = csa.dal.dbaccess.executenonQuery (INSSQL);
se (linha> 0)
{
BS_USER User = new BS_USER ();
user.unip = arr [3];
Factory.getUserBlLliStance (). LoginUnip (usuário);
string str = string.format ("location.href = 'myinformation.aspx? unip = {0}'", arr [3]);
Csa.hc.common.echojs (str);
}
}
}