Aller au contenu principal

API

createPayment

C'est la mutation principale du flux de paiement. Elle est utile pour créer un paiement chez Hero.

Exemple

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: "<Votre identifiant client>"
}
}
) {
id
}
}

Arguments

La mutation createPayment prend un argument de type NewPayment

ArgumentTypeDescriptionObligatoire
amountIntLe montant total du paiement. Il doit être en centimes d'euros. ex: 5000 pour un paiement de 50€.oui
redirectUriStringL'URI où hero notifiera votre système. C'est aussi l'URI où Hero redirigera votre client lorsque le paiement est terminé. Cette URI ne doit pas être protégée par un système d'authentification. Il est recommandé d'inclure l'ID unique de la commande dedans.oui
comebackUriStringL'URI permettant au client de retourner à votre sélection de méthode de paiement. Si vous ne la fournissez pas, le client sera redirigé vers la dernière page visitée en cliquant sur le bouton "Revenir au site marchand" (en bas de la page de paiement Hero).non
typeEnumLe type de paiement choisi. Veuillez renvoyer la valeur reçue par avalaiblePaymentTypes.oui
issuerObjectInformations sur votre client.oui
issuer.addressObjectAdresse de facturation du clientoui
issuer.address.line1StringAdresse de facturation du client - Première ligneoui
issuer.address.line2StringAdresse de facturation du client - Deuxième lignenon
issuer.address.cityStringAdresse de facturation du client - Villeoui
issuer.address.zipCodeStringAdresse de facturation du client - Code postaloui
issuer.deliveryAddressObjectAdresse de livraison du clientnon
issuer.deliveryAddress.line1StringAdresse de livraison du client - Première ligneoui
issuer.deliveryAddress.line2StringAdresse de livraison du client - Deuxième lignenon
issuer.deliveryAddress.cityStringAdresse de livraison du client - Villeoui
issuer.deliveryAddress.zipCodeStringAdresse de livraison du client - Code postaloui
issuer.nameStringNom de l'entreprise du clientoui
issuer.contactEmailStringEmail du clientoui
issuer.contactPhoneStringNuméro de téléphone du clientoui
issuer.customerReferenceStringL'identifiant unique que vous utilisez pour ce client.non

Réponse

Lorsque le paiement est créé, l'API renvoie l'identifiant du paiement. Vous devriez sauvegarder cet ID quelque part pour pouvoir rediriger le client vers la page de paiement Hero à cette URL : https://pay.heropay.eu/checkout/XXXXX où XXX est le payment_id (en production). En environnement de staging, l'URL serait https://staging.pay.heropay.eu/checkout/XXX

Erreurs

createPayment peut échouer pour plusieurs raisons. Voici la liste des erreurs les plus courantes et leurs explications.

errorCodeType d'erreurDescription
NOT_LOGGEDErrorL'Api-Key est manquante ou invalide.
MERCHANT_PRODUCT_DISABLEDErrorLe compte que vous utilisez n'est pas autorisé à être payé. Contactez votre administrateur Hero.
INVALID_PAYMENT_TYPEErrorLe type de paiement est invalide. Vérifiez votre requête et assurez-vous que votre compte Hero est correctement configuré par notre équipe.
Amount XX is smaller than paymentMin YYErrorLe montant est inférieur à votre montant de paiement minimum autorisé. Si vous pensez que ce n'est pas le cas, contactez votre administrateur Hero.
Amount XX is bigger than paymentMax YYErrorLe montant est supérieur à votre montant de paiement maximum autorisé. Si vous pensez que ce n'est pas le cas, contactez votre administrateur Hero.

getPaymentsInfos

Vous pouvez appeler ce point de terminaison lorsque vous avez besoin de connaître les dernières informations d'un ou plusieurs paiements, comme savoir si le paiement a été finalisé ou le montant remboursé du paiement.

Exemple

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

Ce point de terminaison prend un argument. L'ID ou les IDs du/des paiement(s) dont vous souhaitez obtenir les informations.

ArgumentTypeDescriptionObligatoire
paymentIdsArray de chaînesLe(s) payment_id du/des paiement(s).oui

Réponse

La réponse sera un tableau d'objets pour chaque payment_id passé. Seuls les payment_id existants seront retournés avec les informations suivantes. Si aucun des payment_id n'existe, le résultat sera un tableau vide.

Veuillez consulter le flux de paiement pour plus d'informations sur chaque statut et sa signification.

ChampTypeDescriptionNullable
paymentIdstringL'identifiant du paiementnon
isSuccessbooléenIndique si le paiement a été finalisé ou non.non
errorstringLe paiement n'a pas été finalisé. Ne validez pas la commande.oui
reviewStatusentierLe statut de l'examen des risques. Non utilisé pour notre solution de traitement.non
reasonentierLa raison du statut d'examen des risques. Non utilisé pour notre solution de traitement.oui
initialPaymentAmountentierLe montant initial du paiement.non
pendingRefundAmountentierLa somme des montants de remboursement en cours de traitement.non
refundedAmountentierLa somme de tous les montants de remboursement réussis pour ce paiement.non

Exemple d'une réponse :

  • Succès :
{
"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
}
]
}
  • Erreur :
{
"result": []
}
attention

Lorsqu'il y a une erreur la commande ne doit pas être validée ! Le client doit être informé que sa commande a échoué et que le paiement n'a pas été finalisé.

setOrderId

Cette requête vous donne la possibilité de définir l'ID de commande pour un paiement initié.

Exemple

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

Arguments

ArgumentTypeDescriptionObligatoire
paymentIdStringLe payment_id du paiement.oui
orderIdStringL'orderId que vous souhaitez lier au paiement. C'est une chaîne qui représente la commande dans votre système.oui

Réponse

La réponse est toujours true.

refundPaymentCheckout

Lorsque vous devez annuler une transaction, vous pouvez utiliser ce point de terminaison et nous nous occuperons du processus de remboursement pour vous. Cela vous permet de rembourser des transactions spécifiques de paiement checkout.

Exemple

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

Ce point de terminaison prend un objet d'entrée avec les propriétés suivantes :

PropriétéTypeDescriptionObligatoire
paymentCheckoutIdStringL'ID du paiement checkout à rembourseroui
amountIntegerLe montant à rembourser en centimesoui

Réponse

ChampTypeDescriptionNullable
successBooléenIndique si le remboursement a réussinon

Exemple d'une réponse réussie :

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

Erreurs

Le processus de remboursement peut échouer pour diverses raisons. Le resolver retourne différents types d'erreurs :

Erreurs de validation

Se produit lorsque la validation de l'entrée échoue.

{
"data": {
"refundPaymentCheckout": {
"validationErrors": [
{
"path": ["amount"],
"validationError": "Le montant doit être un nombre positif"
}
]
}
}
}

Erreurs fonctionnelles

Ces erreurs sont liées aux règles métier et aux opérations :

Code d'erreurDescription
UNAUTHORIZEDVous n'avez pas la permission d'effectuer cette action
FUNCTIONAL_ERRORDiverses violations de règles métier, notamment :
- INVALID_AMOUNT : Le montant est invalide (doit être positif et ne pas dépasser le montant original du paiement)
- INVALID_PAYMENT_CHECKOUT : Le paiement checkout n'existe pas
- DRAFT_PAYMENT_CHECKOUT : Impossible de rembourser un paiement checkout en brouillon
- BA_NOT_FOUND : Compte professionnel non trouvé
- BA_ONBOARDING_IS_NOT_COMPLETED : L'onboarding du compte professionnel n'est pas terminé
- BA_BALANCE_INSUFFICIENT : Fonds insuffisants sur le compte professionnel
- BA_CANNOT_TRANSFER_FUNDS : Impossible de transférer des fonds depuis le compte professionnel
- AMOUNT_TOO_LOW : Le montant de remboursement doit être d'au moins 1 centime
- AMOUNT_TOO_HIGH : Le montant de remboursement dépasse le montant remboursable
- LEDGER_BALANCE_TOO_LOW : Solde insuffisant dans le compte du grand livre
- REFUND_IS_FROZEN : Le paiement est actuellement gelé et ne peut pas être remboursé
- PAYMENT_NOT_STARTED : Impossible de rembourser un paiement qui n'a pas été initié

Erreurs techniques

Ce sont des erreurs système internes qui peuvent survenir :

Code d'erreurDescription
INTERNAL_SERVER_ERRORUne erreur technique s'est produite lors du traitement
CORE_PAYMENT_REFUND_FAILEDUne erreur s'est produite dans le système de traitement des paiements

Exemple d'une réponse d'erreur :

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