Your EPS account
Sign in to view secure API documentation, update your account details, log support requests and much more.
Your email or password is incorrect. Please try again or reset your password.
If the issue persists please contact your EPS representative.
Reset your password
Please enter your email address below. We will send password reset instructions to the email associated with your EPS account.
Thank you
An email has been sent to your account email address with further instructions on how to reset your password.
Autenticação e acesso da chave de API
Você usará o cabeçalho da Autorização de HTTP para transmitir sua chave de API e um hash de assinatura SHA-512 com cada solicitação. O hash de assinatura consiste em sua chave de API, segredo compartilhado e um carimbo de hora UNIX.
Como criar seu cabeçalho de autorização
A EPS espera que seu cabeçalho de autorização use o formato abaixo - observe o prefixo EPS
. Esse prefixo assegura que as regras de autorização corretas sejam aplicadas em sua solicitação.
Authorization: EAN APIKey=yourAPIKey,Signature=sha512Hash,timestamp=yourUNIXTimestamp
O valor de sua assinatura
é o valor hash SHA-512 sem sal da concatenação de sua chave de API + segredo compartilhado + carimbo de hora UNIX em segundos.
O valor de seu timestamp
deve ser o mesmo valor usado para gerar sua assinatura
. Se um valor diferente de carimbo de hora for fornecido, a EPS não poderá verificar seu valor de hash de assinatura e sua solicitação será rejeitada.
Aqui está um exemplo de cabeçalho de Autorização completo:
Authorization: EAN APIKey=dkc4wrkp7w58wx5v2jxen2kx,Signature=Mgup2Azf,timestamp=1476739212
Como verificar seu cabeçalho de autorização
Teste seu próprio código com o Gerador de assinatura da EPS antes de tentar solicitações de teste.
Nota: Sincronização de relógio NTP
A EPS sincroniza os tempos do servidor interno usando o protocolo NTP (Protocolo do tempo de rede). Se você também usar o NTP, não deverão ocorrer problemas de sincronização do relógio. A maioria dos sistemas operacionais modernos é compatível com isto ou com serviços de sincronização de tempo similares – verifique a documentação do seu sistema operacional. O sistema aceita registros de tempo de até cinco minutos antes ou depois do registro de tempo do servidor, a fim de acomodar variações aceitáveis entre relógios.
Amostras de código de geração de assinatura
PHP
$apiKey = "abcdefg"; $secret = "1a2bc3"; $timestamp = time(); $authHeader = 'Authorization: EAN APIKey=' . $apiKey . ',Signature=' . hash("sha512", $apiKey.$secret.$timestamp) . ',timestamp=' . time();
JavaScript
var crypto = require('crypto'); var request = require('request'); var apiKey = "123"; var secret="123"; var timestamp = Math.round((new Date().getTime()/1000)); var hash = crypto.createHmac('sha256', apiKey+secret+timestamp).digest('hex'); var authHeaderValue = 'EAN APIKey=' +apiKey+ ',Signature=' + hash + ',timestamp=' + timestamp;
Java
import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.Timestamp; import java.util.Date; String apiKey = "123"; String secret = "123"; Date date= new java.util.Date(); Long timestamp = (date.getTime() / 1000); String signature = null; try { String toBeHashed = apiKey + secret + timestamp; MessageDigest md = MessageDigest.getInstance("SHA-512"); byte[] bytes = md.digest(toBeHashed.getBytes("UTF-8")); StringBuilder sb = new StringBuilder(); for(int i=0; i< bytes.length ;i++){ sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1)); } signature = sb.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } String authHeaderValue = "EAN APIKey=" + apiKey + ",Signature=" + signature + ",timestamp=" + timestamp;
Python
import hashlib import datetime apiKey = "123" secret = "123" timestamp = str(int(time.time())); authHeaderValue = "EAN APIKey=" + apiKey + ",Signature=" + hashlib.sha512(apiKey+secret+timestamp).hexdigest() + ",timestamp=" + timestamp
Ruby
require 'digest' apiKey="123" secret="123" timestamp = Time.now.to_i toBeHashed = "#{apiKey}#{secret}#{timestamp}" signature = Digest::SHA2.new(512).hexdigest(toBeHashed) authHeaderValue = "EAN APIKey=#{apiKey},Signature=#{signature},timestamp=#{timestamp}"
C#
String apiKey = "123"; String secret = "123"; TimeSpan epochTicks = new TimeSpan(new DateTime(1970, 1, 1).Ticks); TimeSpan unixTicks = new TimeSpan(DateTime.UtcNow.Ticks) - epochTicks; double unixTime = (int)unixTicks.TotalSeconds; var toBeHashed = apiKey + secret + unixTime; var bytes = System.Text.Encoding.UTF8.GetBytes(toBeHashed); using (var hash = System.Security.Cryptography.SHA512.Create()) { var hashedInputBytes = hash.ComputeHash(bytes); var hashedInputStringBuilder = new System.Text.StringBuilder(128); foreach (var b in hashedInputBytes) hashedInputStringBuilder.Append(b.ToString("X2")); var signature = hashedInputStringBuilder.ToString(); var authHeaderValue = "EAN APIKey=" + apiKey + ",Signature=" + signature +",timestamp=" + unixTime; }
Perl
use strict; use Crypt::Digest::SHA512 qw(sha512_hex); my $apiKey = '123'; my $secret = '123'; my $timestamp = time; my $sig = sha512_hex($apiKey . $secret . $timestamp); my $authHeaderValue = "EAN APIKey=".$apiKey.",Signature=".$sig.",timestamp=".$timestamp; print $authHeaderValue;
Como proteger seu segredo compartilhado
O segredo compartilhado com você é fundamental para a segurança dos seus dados de solicitação – trate-o como uma senha. Nunca inclua o valor bruto em qualquer site ou código de aplicativo publicamente acessível. Você receberá seu segredo compartilhado e sua chave de API quando for aprovado para integrar a EPS Rapid.
EPS Home | EPS Portal Login | Expedia Partner Central | Advertise with Expedia | News | Privacy Policy | Cookie Policy
© 2020 Expedia, Inc. All Rights Reserved.