Class: Centry

Inherits:
Object
  • Object
show all
Defined in:
lib/centry.rb

Overview

Centry es un sencillo SDK sin dependencias con el cual se pueden hacer todo tipo de request a la API de Centry.

centrycl.github.io/centry-rest-api-docs/ github.com/CentryCL/ruby-sdk

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client_id, client_secret, redirect_uri, access_token = nil, refresh_token = nil) ⇒ Centry

Constructor de la clase SDK.

Centry. por Centry, debe ser conocido sólo por la aplicación y Centry. Los usuarios no tienen que tener acceso a este dato. autorización como parámetro GET cada vez que un usuario autorice a ésta a acceder a sus datos. Si se usa la URI urn:ietf:wg:oauth:2.0:oob, entonces el código de autorización se mostrará en pantalla y el usuario deberá copiarlo y pegarlo donde la aplicación pueda leerlo. registro. Si se entrega, entonces no es necesario que el usuario tenga que volver a autorizar la aplicacción. tiene registro.

Parameters:

  • client_id (String)

    Identificador de la aplicación. Es generado por

  • client_secret (String)

    Clave secreta de la aplicación. Es generado

  • redirect_uri (String)

    URL a la que Centry enviará el código de

  • access_token (String) (defaults to: nil)

    (opcional) Último access_token del que se tiene

  • refresh_token (String) (defaults to: nil)

    (opcional) Último refresh_token del que se



35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/centry.rb', line 35

def initialize(
  client_id,
  client_secret,
  redirect_uri,
  access_token = nil,
  refresh_token = nil
)
  @client_id = client_id
  @client_secret = client_secret
  @redirect_uri = redirect_uri
  @access_token = access_token
  @refresh_token = refresh_token
end

Instance Attribute Details

#access_tokenObject

Returns the value of attribute access_token.



15
16
17
# File 'lib/centry.rb', line 15

def access_token
  @access_token
end

#client_idObject (readonly)

Returns the value of attribute client_id.



14
15
16
# File 'lib/centry.rb', line 14

def client_id
  @client_id
end

#client_secretObject (readonly)

Returns the value of attribute client_secret.



14
15
16
# File 'lib/centry.rb', line 14

def client_secret
  @client_secret
end

#created_atObject

Returns the value of attribute created_at.



15
16
17
# File 'lib/centry.rb', line 15

def created_at
  @created_at
end

#expires_inObject

Returns the value of attribute expires_in.



15
16
17
# File 'lib/centry.rb', line 15

def expires_in
  @expires_in
end

#redirect_uriObject (readonly)

Returns the value of attribute redirect_uri.



14
15
16
# File 'lib/centry.rb', line 14

def redirect_uri
  @redirect_uri
end

#refresh_tokenObject

Returns the value of attribute refresh_token.



15
16
17
# File 'lib/centry.rb', line 15

def refresh_token
  @refresh_token
end

#scopeObject

Returns the value of attribute scope.



15
16
17
# File 'lib/centry.rb', line 15

def scope
  @scope
end

#token_typeObject

Returns the value of attribute token_type.



15
16
17
# File 'lib/centry.rb', line 15

def token_type
  @token_type
end

Instance Method Details

#authorization_url(scope) ⇒ String

Genera la URL con la que le pediremos a un usuario que nos entregue los permisos de lectura y/o escritura a los recursos que se indican en el parámetro scope.

de todos los ámbitos a los que se solicita permiso. Estos pueden ser:

  • public Para acceder a la información publica de Centry como marcas, categorías, colores, tallas, etc.

  • read_orders Para leer información de pedidos

  • write_orders Para manipular o eliminar pedidos

  • read_products Para leer información de productos y variantes

  • write_products Para manipular o eliminar productos y variantes

  • read_integration_config Para leer información de configuraciones de integraciones

  • write_integration_config Para manipular o eliminar configuraciones de integraciones

  • read_user Para leer información de usuarios de la empresa

  • write_user Para manilupar o eliminar usuarios de la empresa

  • read_webhook Para leer información de webhooks

  • write_webhook Para manilupar o eliminar webhooks

autorización de acceso.

Parameters:

  • scope (String)

    Es la concatenación con un espacio de separación (“ ”)

Returns:

  • (String)

    URL para redirigir a los usuarios y solicitarles la



69
70
71
72
73
74
75
76
77
# File 'lib/centry.rb', line 69

def authorization_url(scope)
  params = {
    client_id: @client_id,
    redirect_uri: @redirect_uri,
    response_type: 'code',
    scope: scope
  }
  "https://www.centry.cl/oauth/authorize?#{URI.encode_www_form(params)}"
end

#authorize(code) ⇒ Object

Una vez que un usuario ha autorizado nuestra aplicación para que accceda a su información, Centry genera un código de autorización con el cual podremos solicitar el primer access_token y refresh_token. Éste método se encarga de esta tarea por lo que se le debe entrecar el código de autorización como parámetro.

Se recomienda registrar estos tokens con algún mecanismo de persistencia como una base de datos.

que el usuario autorizó la aplicación.

Parameters:

  • code (String)

    Código de autorización generado por Centry depués de

See Also:



169
170
171
# File 'lib/centry.rb', line 169

def authorize(code)
  grant('authorization_code', code: code)
end

#client_credentials(scope = nil) ⇒ Object

Este mecanismo de autorización es utilizado en aplicaciones que requieren acceso a sus propios recursos.

los que se solicita permiso. Estos pueden ser:

  • public Para acceder a la información publica de Centry como marcas, categorías, colores, tallas, etc.

  • read_orders Para leer información de pedidos

  • write_orders Para manipular o eliminar pedidos

  • read_products Para leer información de productos y variantes

  • write_products Para manipular o eliminar productos y variantes

  • read_integration_config Para leer información de configuraciones de integraciones

  • write_integration_config Para manipular o eliminar configuraciones de integraciones

  • read_user Para leer información de usuarios de la empresa

  • write_user Para manilupar o eliminar usuarios de la empresa

  • read_webhook Para leer información de webhooks

  • write_webhook Para manilupar o eliminar webhooks

Parameters:

  • scope (String) (defaults to: nil)

    Es la concatenación con un espacio de separación (“ ”) de todos los ámbitos a

See Also:



205
206
207
208
209
210
# File 'lib/centry.rb', line 205

def client_credentials(scope = nil)
  grant(
    'client_credentials',
    scope.nil? || scope.strip == '' ? {} : { scope: scope }
  )
end

#delete(endpoint, params = {}) ⇒ Object

Atajo para generar requests DELETE

parámetros GET

Parameters:

  • endpoint (String)

    Ruta o recurso de la API.

  • params (Hash) (defaults to: {})

    (opcional) Llaves y valores que irán en la URL como



152
153
154
# File 'lib/centry.rb', line 152

def delete(endpoint, params = {})
  request(endpoint, :delete, params, payload)
end

#get(endpoint, params = {}) ⇒ Hash

Atajo para generar requests GET

parámetros GET

Parameters:

  • endpoint (String)

    Ruta o recurso de la API.

  • params (Hash) (defaults to: {})

    (opcional) Llaves y valores que irán en la URL como

Returns:

  • (Hash)


121
122
123
# File 'lib/centry.rb', line 121

def get(endpoint, params = {})
  request(endpoint, :get, params)
end

#post(endpoint, params = {}, payload = {}) ⇒ Object

Atajo para generar requests POST

parámetros GET encargará de transformarlo en un JSON.

Parameters:

  • endpoint (String)

    Ruta o recurso de la API.

  • params (Hash) (defaults to: {})

    (opcional) Llaves y valores que irán en la URL como

  • payload (Hash) (defaults to: {})

    (opcional) Body del request. El SDK se



132
133
134
# File 'lib/centry.rb', line 132

def post(endpoint, params = {}, payload = {})
  request(endpoint, :post, params, payload)
end

#put(endpoint, params = {}, payload = {}) ⇒ Object

Atajo para generar requests PUT

parámetros GET encargará de transformarlo en un JSON.

Parameters:

  • endpoint (String)

    Ruta o recurso de la API.

  • params (Hash) (defaults to: {})

    (opcional) Llaves y valores que irán en la URL como

  • payload (Hash) (defaults to: {})

    (opcional) Body del request. El SDK se



143
144
145
# File 'lib/centry.rb', line 143

def put(endpoint, params = {}, payload = {})
  request(endpoint, :put, params, payload)
end

#refreshObject

Un access_token tiene una vigencia de 7200 segudos (2 horas) por lo que una vez cumplido ese plazo es necesario solicitar un nuevo token usando como llave el refresh_token que teníamos registrado. Este método se encarga de hacer esta renovacion de tokens.

Se recomienda registrar estos nuevos tokens con algún mecanismo de persistencia como una base de datos.



182
183
184
# File 'lib/centry.rb', line 182

def refresh
  grant('refresh_token', refresh_token: @refresh_token)
end

#request(endpoint, method, params = {}, payload = {}) ⇒ Net::HTTPResponse

Método encargado de hacer todo tipo de solicitudes a Centry, desde autorizaciones hasta manipulación de inventario.

  • :get

  • :post

  • :put

  • :delete

Como es una API REST, estos métodos suelen estar asociados a la lectura, creación, edición y eliminacion de recursos. parámetros GET encargará de transformarlo en un JSON.

Parameters:

  • endpoint (String)

    Ruta o recurso de la API.

  • method (symbol)

    Indica el método HTTP a usar. Las opciones son:

  • params (Hash) (defaults to: {})

    (opcional) Llaves y valores que irán en la URL como

  • payload (Hash) (defaults to: {})

    (opcional) Body del request. El SDK se

Returns:

  • (Net::HTTPResponse)

    resultado del request.



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/centry.rb', line 96

def request(endpoint, method, params = {}, payload = {})
  query = params ? URI.encode_www_form(params) : ''
  uri = URI("https://www.centry.cl/#{endpoint}?#{query}")
  header = {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  }
  req = case method
        when :get    then Net::HTTP::Get.new(uri, header)
        when :post   then Net::HTTP::Post.new(uri, header)
        when :put    then Net::HTTP::Put.new(uri, header)
        when :delete then Net::HTTP::Delete.new(uri, header)
  end
  req.add_field('Authorization', "Bearer #{@access_token}") unless PUBLIC_ENDPOINTS.include?(endpoint)

  req.body = JSON.generate(payload) if payload && payload != {}
  Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| return http.request(req) }
end