Saltar al contenido principal

API

createPayment​

Es la mutación principal del flujo de pago. Es útil para crear pagos en Hero.

Example​

mutation {
createPayment(
payment: {
amount: 5000
redirectUri: "https://shop.hero.fr?shop-payment-id=abc567"
type: Pay1X
issuer: {
address: {
line1: "10 Something Street"
line2: "2nd door on the left"
city: "Paris"
zipCode: "75001"
}
deliveryAddress: {
line1: "2 High Street"
line2: "Apartment 2"
city: "Paris"
zipCode: "75010"
}
name: "Super Corp"
contactEmail: "laura@example.com"
contactPhone: "+330600000000"
customerReference: "<Your customer identifier>"
}
}
) {
id
}
}

Arguments​

La mutación createPayment toma un argumento del tipo NewPayment

ArgumentoTipoDescripciónObligatorio
amountIntEl monto total del pago. Debe estar en céntimos de euros. ej: 5000 para un pago de 50€.sí
redirectUriStringLa URI donde Hero notificará a tu sistema. También es la URI donde Hero redirigirá a tu cliente cuando el pago esté completado. Esta URI no debe estar protegida por ningún sistema de autenticación. Se recomienda incluir el ID único del pedido en ella.sí
comebackUriStringLa URI que permite al cliente volver a tu selección de método de pago. Si no la proporcionas, el cliente será redirigido a la última página visitada cuando haga clic en el botón "Revenir au site marchand" (en la parte inferior de la página de pago de Hero).no
typeEnumEl tipo de pago elegido. Por favor, devuelve el valor recibido por avalaiblePaymentTypes.sí
issuerObjectInformación sobre tu cliente.sí
issuer.addressObjectDirección de facturación del clientesí
issuer.address.line1StringDirección de facturación del cliente - Primera líneasí
issuer.address.line2StringDirección de facturación del cliente - Segunda líneano
issuer.address.cityStringDirección de facturación del cliente - Ciudadsí
issuer.address.zipCodeStringDirección de facturación del cliente - Código postalsí
issuer.deliveryAddressObjectDirección de entrega del clienteno
issuer.deliveryAddress.line1StringDirección de entrega del cliente - Primera líneasí
issuer.deliveryAddress.line2StringDirección de entrega del cliente - Segunda líneano
issuer.deliveryAddress.cityStringDirección de entrega del cliente - Ciudadsí
issuer.deliveryAddress.zipCodeStringDirección de entrega del cliente - Código postalsí
issuer.nameStringNombre de la empresa del clientesí
issuer.contactEmailStringCorreo electrónico del clientesí
issuer.contactPhoneStringNúmero de teléfono del clientesí
issuer.customerReferenceStringEl identificador único que utilizas para este cliente.no

Response​

Cuando se crea el pago, la API devuelve el id del pago. Deberías guardar este ID en algún lugar para poder redirigir al cliente a la página de pago de Hero en esta URL: https://pay.heropay.eu/checkout/XXXXX donde XXX es el payment_id (en producción). En entorno de staging, la URL sería https://staging.pay.heropay.eu/checkout/XXX

Errors​

createPayment puede fallar por varias razones. Aquí está la lista de los errores más comunes y sus explicaciones.

errorCodeError TypeDescripción
NOT_LOGGEDErrorFalta la Api-Key o es inválida.
MERCHANT_PRODUCT_DISABLEDErrorLa cuenta que estás utilizando no está autorizada para recibir pagos. Contacta con tu administrador Hero.
INVALID_PAYMENT_TYPEErrorEl tipo de pago es inválido. Revisa tu solicitud y asegúrate de que tu cuenta Hero esté correctamente configurada por nuestro equipo.
Amount XX is smaller than paymentMin YYErrorEl monto es inferior a tu monto mínimo de pago autorizado. Si crees que este no debería ser el caso, contacta con tu administrador Hero.
Amount XX is bigger than paymentMax YYErrorEl monto es superior a tu monto máximo de pago autorizado. Si crees que este no debería ser el caso, contacta con tu administrador Hero.

getPaymentsInfos​

Puedes llamar a este endpoint cuando necesites conocer la información más reciente de uno o varios pagos, como si el pago ha sido finalizado o el monto reembolsado del pago.

Example​

query {
getPaymentsInfos(paymentIds: ["payment_id_1", "payment_id_2"]) {
... on GetPaymentsInfosResult {
result {
paymentId
isSuccess
error
reviewStatus
reason
initialPaymentAmount
pendingRefundAmount
refundedAmount
}
}
... on ValidationErrors {
validationErrors {
path
validationError
}
}
}
}

Arguments​

Este endpoint toma un argumento. El/los ID(s) del/de los pago(s) sobre los que quieres obtener información.

ArgumentoTipoDescripciónObligatorio
paymentIdsArray of StringEl/los payment_id(s) del pago.sí

Response​

La respuesta será un array de objetos para cada payment_id pasado. Solo los payment_id existentes serán devueltos con la siguiente información. Si ninguno de los payment_id existe, el resultado será un array vacío.

Por favor, consulta el flujo de pago para más información sobre cada estado y su significado.

CampoTipoDescripciónNullable
paymentIdstringEl id del pagono
isSuccessbooleanIndica si el pago ha sido finalizado o no.no
errorstringEl pago no ha sido finalizado. No valides el pedido.sí
reviewStatusintegerEl estado de revisión de riesgo. No se utiliza para nuestra solución de Procesamiento.no
reasonintegerLa razón del estado de revisión de riesgo. No se utiliza para nuestra solución de Procesamiento.sí
initialPaymentAmountintegerEl monto inicial del pago.no
pendingRefundAmountintegerLa suma de los montos de reembolso actualmente en proceso.no
refundedAmountintegerLa suma de todos los montos de reembolso exitosos para este pago.no

Ejemplo de una respuesta:

  • Éxito:
{
"result": [
{
"paymentId": "payment_id_1",
"isSuccess": true,
"error": undefined,
"reviewStatus": "ACCEPTED",
"reason": "",
"initialPaymentAmount": 8000,
"pendingRefundAmount": 0,
"refundedAmount": 0
},
{
"paymentId": "payment_id_2",
"isSuccess": false,
"error": "PAYMENT_NOT_INITIATED",
"reviewStatus": "NONE",
"reason": "None",
"initialPaymentAmount": 5000,
"pendingRefundAmount": 0,
"refundedAmount": 0
}
]
}
  • Error:
{
"result": []
}
warning

Cuando hay un error, ¡el pedido no debe ser validado! Se debe informar al cliente que su pedido ha fallado y que el pago no ha sido finalizado.

setOrderId​

Esta solicitud te da la posibilidad de definir el ID del pedido para un pago iniciado.

Example​

mutation {
setOrderId(paymentId: "payé123", orderId: "order123")
}

Arguments​

ArgumentoTipoDescripciónObligatorio
paymentIdStringEl payment_id del pago.sí
orderIdStringEl orderId que quieres vincular al Pago. Es una cadena que representa el pedido en tu sistema.sí

Response​

La respuesta es siempre true.

refundPaymentCheckout​

Cuando necesites revertir una transacción, puedes usar este endpoint y nosotros manejaremos el proceso de reembolso por ti. Esto te permite reembolsar transacciones específicas de pago.

Example​

mutation {
refundPaymentCheckout(
input: {
paymentCheckoutId: "paycheckout-6cd6e21d-c35e-4ee3-8b86-965fb3b44c99"
amount: 30000
}
) {
... on RefundPaymentCheckoutOutput {
success
}
... on GqlHeroError {
errorCode
message
}
... on ValidationErrors {
validationErrors {
path
validationError
}
}
}
}

Arguments​

Este endpoint toma un objeto de entrada con las siguientes propiedades:

PropiedadTipoDescripciónObligatorio
paymentCheckoutIdStringEl ID del pago a reembolsarsí
amountIntegerEl monto a reembolsar en céntimossí

Response​

CampoTipoDescripciónNullable
successBooleanIndica si el reembolso fue exitosono

Ejemplo de una respuesta exitosa:​

{
"data": {
"refundPaymentCheckout": {
"success": true
}
}
}

Errors​

El proceso de reembolso puede fallar por varias razones. El resolvedor devuelve diferentes tipos de errores:

Validation Errors​

Ocurre cuando la validación de entrada falla.

{
"data": {
"refundPaymentCheckout": {
"validationErrors": [
{
"path": ["amount"],
"validationError": "Amount must be a positive number"
}
]
}
}
}

Functional Errors​

Estos errores están relacionados con reglas de negocio y operaciones:

Error CodeDescripción
UNAUTHORIZEDNo tienes permiso para realizar esta acción
FUNCTIONAL_ERRORVarias violaciones de reglas de negocio, incluyendo:
- INVALID_AMOUNT: El monto es inválido (debe ser positivo y no exceder el monto original del pago)
- INVALID_PAYMENT_CHECKOUT: El pago no existe
- DRAFT_PAYMENT_CHECKOUT: No se puede reembolsar un pago en borrador
- BA_NOT_FOUND: Cuenta de negocio no encontrada
- BA_ONBOARDING_IS_NOT_COMPLETED: El proceso de onboarding de la cuenta de negocio no está completo
- BA_BALANCE_INSUFFICIENT: Fondos insuficientes en la cuenta de negocio
- BA_CANNOT_TRANSFER_FUNDS: No se pueden transferir fondos desde la cuenta de negocio
- AMOUNT_TOO_LOW: El monto del reembolso debe ser de al menos 1 céntimo
- AMOUNT_TOO_HIGH: El monto del reembolso excede el monto reembolsable
- LEDGER_BALANCE_TOO_LOW: Saldo insuficiente en la cuenta contable
- REFUND_IS_FROZEN: El pago está actualmente congelado y no puede ser reembolsado
- PAYMENT_NOT_STARTED: No se puede reembolsar un pago que no ha sido iniciado

Technical Errors​

Estos son errores internos del sistema que pueden ocurrir:

Error CodeDescripción
INTERNAL_SERVER_ERROROcurrió un error técnico durante el procesamiento
CORE_PAYMENT_REFUND_FAILEDOcurrió un error en el sistema de procesamiento de pagos

Ejemplo de una respuesta de error:​

{
"data": {
"refundPaymentCheckout": {
"errorCode": "FUNCTIONAL_ERROR",
"message": "AMOUNT_TOO_HIGH"
}
}
}