# Crear token de pago para la compra

Genera un pedido y un token de pago para el mismo. El pedido se genera en función de los artículos transmitidos en el cuerpo de la solicitud.

Para abrir la interfaz de pago en una nueva ventana, utilice el siguiente enlace: https://secure.xsolla.com/paystation4/?token={token}, en el cual {token} es el token recibido.

Para realizar pruebas, utilice esta URL: https://sandbox-secure.xsolla.com/paystation4/?token={token}.

Aviso
   
   Para garantizar que el método funcione correctamente, transmita el parámetro user.country.value (código de país) o el encabezado X-User-Ip (la dirección IPv4 del usuario, si se desconoce el país). Los datos transmitidos se utilizan para determinar la moneda de pago. No se admiten direcciones IPv6.  La moneda seleccionada se utiliza para los métodos de pago en la interfaz de pago de Xsolla.

Endpoint: POST /v3/project/{project_id}/admin/payment/token
Version: 2.0.0
Security: basicAuth

## Path parameters:

  - `project_id` (integer, required)
    ID del proyecto. Encontrará este parámetro en su Cuenta del editor junto al nombre del proyecto y en la barra de direcciones del navegador cuando se trabaja en un proyecto. La URL tiene el siguiente formato: https://publisher.xsolla.com//projects/.
    Example: 44056

## Request fields (application/json):

  - `sandbox` (boolean)
    Seleccione true para probar el proceso de pago. En este caso, utilice https://sandbox-secure.xsolla.com para acceder a la interfaz de pago de prueba.

  - `user` (object, required)

  - `user.id` (object, required)

  - `user.id.value` (string)
    ID de usuario. Para realizar pruebas, puede transmitir cualquier valor. Para aceptar pagos reales, debe usar el valor de ID de usuario de su sistema. Este ID se transmite en el webhook [Validación del usuario](https://developers.xsolla.com/es/webhooks/operation/user-validation/).

  - `user.name` (object)

  - `user.name.value` (string)
    Nombre de pantalla del usuario.

  - `user.email` (object)

  - `user.email.value` (string)
    Correo electrónico del usuario. Debe ser válido según el protocolo RFC 822.

  - `user.country` (object)

  - `user.country.value` (string)
    Código de país de dos letras en mayúsculas de conformidad con la norma [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). Se requiere si no se transmite una dirección IP en el encabezado X-User-Ip. Consulte la documentación para obtener información detallada sobre los [países admitidos por Xsolla](https://developers.xsolla.com/es/doc/shop-builder/references/supported-countries/). Ejemplo: country=US
    Example: "US"

  - `user.country.allow_modify` (boolean)
    Si el usuario puede o no cambiar el país en la interfaz de pago.

  - `user.age` (integer)
    Edad del usuario.

  - `user.phone` (object)

  - `user.phone.value` (string, required)
    Número de teléfono del usuario.

  - `user.phone.allow_modify` (boolean)
    Si el usuario puede o no cambiar el teléfono en la interfaz de pago. Si se transmite phone.value en el token, el valor es false por defecto.

  - `user.phone.hidden` (boolean)

  - `user.tracking_id` (object)

  - `user.tracking_id.value` (string, required)
    ID único de seguimiento (utilizado en campañas de marketing).

  - `user.steam_id` (object)

  - `user.steam_id.value` (string, required)
    ID de Steam.

  - `user.is_legal` (boolean)
    Si el usuario es una entidad jurídica.

  - `user.legal` (object)
    Objeto con datos de la entidad jurídica. El objeto y todos sus parámetros son obligatorios si user.is_legal es true.

  - `user.legal.name` (string)
    Nombre legal completo.

  - `user.legal.address` (string)
    Dirección legal completa.

  - `user.legal.vat_id` (string)
    Identificador del contribuyente individual.

  - `user.legal.country` (string)
    País de constitución. Código de país de dos letras mayúsculas de conformidad con la norma [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).

  - `purchase` (object, required)

  - `purchase.items` (array, required)

  - `purchase.items.sku` (string, required)
    ID único del artículo. El SKU solo puede contener caracteres alfanuméricos latinos en minúsculas y mayúsculas, puntos, guiones y guiones bajos.

Atención:Para vender un código de artículo (SKU) varias veces, especifique la cantidad deseada en el parámetro purchase.items[].quantity. No se admiten los SKU duplicados dentro de la matriz; solo se usa la primera vez que aparece al crear el token. En este caso, no se devuelve ningún error.
    Example: "t-shirt"

  - `purchase.items.quantity` (number, required)
    Cantidad del artículo.
    Example: 2

  - `promo_code` (string)
    Código único que distingue entre mayúsculas y minúsculas. Contiene letras y números.

  - `settings` (object)
    Configuración del proceso de pago y de la interfaz de pago para un usuario.

  - `settings.ui` (object)
    Ajustes de la interfaz.

  - `settings.ui.theme` (string)
    Tema de interfaz de pago. Puede ser 63295a9a2e47fab76f7708e1 para el tema claro (por defecto) o 63295aab2e47fab76f7708e3 para el tema oscuro. También puede [crear un tema personalizado](https://developers.xsolla.com/es/doc/pay-station/features/ui-theme-customization/#pay_station_ui_theme_customization_in_token) y transmitir el ID del tema en este parámetro.
    Enum: "63295a9a2e47fab76f7708e1", "63295aab2e47fab76f7708e3"

  - `settings.ui.desktop` (object)
    Ajustes de la interfaz para la versión de escritorio.

  - `settings.ui.desktop.header` (object)
    Ajustes del encabezado.

  - `settings.ui.desktop.header.is_visible` (boolean)
    Si se muestra o no el encabezado en la interfaz de pago.

  - `settings.ui.desktop.header.visible_logo` (boolean)
    Si true, el logotipo aparece en la cabecera. Para cargar la imagen, abra su proyecto en [Cuenta de editor](https://publisher.xsolla.com/) y vaya a la sección Pay Station > Configuración.

  - `settings.ui.desktop.header.visible_name` (boolean)
    Si se muestra o no el nombre del proyecto en el encabezado.

  - `settings.ui.desktop.header.visible_purchase` (boolean)
    Si se muestra o no la descripción de la compra (purchase.description.value) en el encabezado. Por defecto es true.

  - `settings.ui.desktop.header.type` (string)
    Cómo mostrar el encabezado. Puede ser compact (oculta el nombre del proyecto y el ID del usuario) o normal (por defecto).
    Enum: "compact", "normal"

  - `settings.ui.desktop.header.close_button` (boolean)
    Si se muestra o no un botón Close en la interfaz de pago de escritorio. El botón cierra la interfaz de pago y redirige al usuario a la URL especificada en el parámetro settings.return_url. false por defecto.

  - `settings.ui.mode` (string)
    Modo de interfaz en la interfaz de pago. Solo puede ser user_account. El encabezado solo contiene el menú de navegación de la cuenta, y el usuario no puede seleccionar un producto ni hacer un pago. Este modo únicamente está disponible en la versión de escritorio.
    Enum: "user_account"

  - `settings.ui.user_account` (object)
    Datos de la cuenta del usuario.

  - `settings.ui.user_account.payment_accounts` (object)
    Submenú Mis cuentas de pago.

  - `settings.ui.user_account.payment_accounts.enable` (boolean, required)
    Si se muestra o no el submenú. false por defecto.

  - `settings.ui.user_account.info` (object)
    Página Mi cuenta.

  - `settings.ui.user_account.info.enable` (boolean, required)
    Si se muestra o no el submenú. false por defecto.

  - `settings.ui.user_account.info.order` (integer, required)
    Posición del submenú en el menú.

  - `settings.ui.user_account.subscriptions` (object)
    Submenú Gestionar suscripciones.

  - `settings.ui.user_account.subscriptions.enable` (boolean, required)
    Si se muestra o no el submenú. false por defecto.

  - `settings.ui.user_account.subscriptions.order` (integer, required)
    Posición del submenú en el menú.

  - `settings.ui.header` (object)

  - `settings.ui.header.visible_virtual_currency_balance` (boolean)
    Si este elemento puede ocultarse o no en la interfaz de pago.

  - `settings.ui.mobile` (object)

  - `settings.ui.mobile.header` (object)

  - `settings.ui.mobile.header.close_button` (boolean)
    Si se muestra o no un botón Close en la interfaz de pago móvil. El botón cierra la interfaz de pago y redirige al usuario a la URL especificada en el parámetro settings.return_url.

  - `settings.ui.is_prevent_external_link_open` (boolean)
    Si se deshabilita o no el redireccionamiento de enlaces a un recurso externo. Al hacer clic en un enlace externo, se envía el evento external-link-open a través del mecanismo postMessage. La dirección del enlace redirigido se transmite en el parámetro url.

  - `settings.ui.is_payment_methods_list_mode` (boolean)
    Si se muestra la lista de métodos de pago disponibles en el país del usuario al abrir la interfaz de pago. Si es false (opción por defecto), se muestra el método de pago transmitido en el parámetro settings.payment_method o el método seleccionado por el [algoritmo de PayRank](https://developers.xsolla.com/es/solutions/payments/payment-ui-management/top-payment-methods-management/).

  - `settings.ui.is_independent_windows` (boolean)
    Si se redirige o no a los usuarios desde el navegador del lanzador incrustado (WebView) a su navegador predeterminado para realizar una compra.

  - `settings.ui.currency_format` (string)
    Establecer en code para mostrar un código de moneda [ISO 4217](https://developers.xsolla.com/es/doc/pay-station/references/supported-currencies/) de tres letras en la interfaz de pago. Por defecto, se muestra el símbolo de moneda en lugar del código de moneda de tres letras.

  - `settings.ui.is_show_close_widget_warning` (boolean)
    Si se muestra una advertencia sobre el procesamiento de la transacción al pasar el ratón por encima del icono × antes de cerrar la página de pago. Si se transmite false o no se transmite el parámetro, no se mostrará la advertencia.

  - `settings.ui.layout` (string)
    Ubicación de los principales elementos de la interfaz de pago. Puede abrir la interfaz de pago dentro de su juego o intercambiar las columnas con información sobre un pedido y los métodos de pago. Consulte las [instrucciones de personalización](https://developers.xsolla.com/es/doc/pay-station/features/ui-theme-customization/#pay_station_ui_theme_customization_layout) para obtener información detallada.
    Enum: "embed", "column_reverse", "embed_column_reverse"

  - `settings.ui.is_three_ds_independent_windows` (boolean)
    Si se abre o no la verificación de 3D Secure en una nueva ventana del navegador. Si su configuración aplica una Política de seguridad de contenidos (CSP), establézcala como true.

  - `settings.ui.is_cart_open_by_default` (boolean)
    La visualización de la lista de artículos en la cesta cuando se abre la versión móvil de la interfaz de pago. Si es true, la lista se muestra en una vista ampliada. Si es false (por defecto) o no se transmiten los parámetros, la lista se muestra en una vista contraída.

  - `settings.currency` (string)
    Moneda de compra preferida. Código de moneda de tres letras de conformidad con la norma [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217). Consulte la documentación para obtener información detallada sobre las [monedas admitidas por Xsolla](https://developers.xsolla.com/es/doc/pay-station/references/supported-currencies/).

  - `settings.language` (string)
    Idioma de la interfaz. [Código de idioma](https://developers.xsolla.com/es/doc/pay-station/features/localization/) de dos letras minúsculas.

  - `settings.external_id` (string)
    ID externo de la transacción.

  - `settings.payment_method` (integer)
    ID del método de pago. Determina la visualización de la moneda en la interfaz de pago, ya que algunos métodos de pago solamente admiten determinadas monedas.

  - `settings.return_url` (string)
    Página a la que se redirige al usuario tras el pago. Los parámetros user_id, foreigninvoice, invoice_id y status se agregarán automáticamente al enlace.

  - `settings.redirect_policy` (object)

  - `settings.redirect_policy.redirect_conditions` (string)
    Estado del pago que activa el redireccionamiento del usuario a la URL de retorno.
    Enum: "none", "successful", "successful_or_canceled", "any"

  - `settings.redirect_policy.delay` (integer)
    Retraso tras el cual el usuario será redirigido automáticamente a la URL de retorno.

  - `settings.redirect_policy.status_for_manual_redirection` (string)
    Estado del pago que desencadena la visualización de la pulsación de un botón que redirige al usuario a la URL de retorno.
    Enum: "none", "successful", "successful_or_canceled", "any"

  - `settings.redirect_policy.redirect_button_caption` (string)
    Subtítulos localizados de los botones de redireccionamiento.
    Example: "Text button"

  - `custom_parameters` (object,null)
    Sus parámetros personalizados representados como un conjunto JSON válido de pares clave-valor.
Puede transmitir parámetros adicionales a través de este campo para configurar filtros antifraude. [Consulte la documentación de Pay Station](https://developers.xsolla.com/es/doc/pay-station/features/antifraud/).

## Response 201 fields (application/json):

  - `token` (string)
    Token de pago.

  - `order_id` (integer)
    ID del pedido.
    Example: 1

## Response 401 fields (application/json):

  - `statusCode` (integer)
    Example: 401

  - `errorCode` (integer)
    Example: 1020

  - `errorMessage` (string)
    Example: "[0401-1020]: Error in Authentication method occurred"

## Response 422 fields (application/json):

  - `statusCode` (number)
    Código de estado de la respuesta.
    Example: 422

  - `errorCode` (number)
    Código de error.
    Example: 1102

  - `errorMessage` (string)
    Mensaje de error legible.
    Example: "[0401-1102]: Unprocessable Entity. The property `external_id` is required"

  - `transactionId` (string)
    ID único de la solicitud.
    Example: "da145238620011eb8e24fe6913ff226a"


