Configurer les paiements

La plate-forme Réserver avec Google est compatible avec diverses configurations de paiement. Le Guide d'activation des paiements couvre les aspects de l'intégration courants pour toutes les intégrations de paiements, y compris:

  1. Configuration des flux pour inclure les informations tokenization_parameter
  2. Mise à jour du serveur de réservation pour accepter payment_method_token objets
  3. Aperçu des informations échangées entre un utilisateur, Réserver avec Google, le partenaire / marchand et la société de traitement des paiements.

Dans ce guide, nous verrons plus en détail comment configurer vos flux afin de spécifier les différents types de configurations de paiement applicables à vos marchands et services.

  1. Aucun paiement / Paiement à l'arrivée
  2. Pré-paiement complet
  3. Frais en cas de non-présentation / frais d'annulation
  4. Deposit

Tous les cas d'utilisation des paiements sont des extensions du cas d'utilisation sans paiement/paiement à l'arrivée (qui ne nécessite aucune configuration de paiement). Ce tutoriel commence donc par décrire cette configuration et traite les autres configurations comme des extensions.

Chaque section couvre également les champs à suivre sur le serveur de réservation afin d'accepter la configuration de paiement particulière.

Aucun paiement / Paiement à l'arrivée

Pour les services qui ne nécessitent aucun paiement au moment de la réservation, aucune configuration de paiement n'est requise au niveau du marchand ou du service. Toutefois, les prix restent obligatoires.

Il s'agit de la configuration de base d'un service, qui contient un nom, une description et un prix. Il s'agirait d'un message de service unique dans un ServiceFeed :

JSON

{
    "merchant_id": "merchant-1",
    "service_id": "service-1-a",
    "name": "Men's haircut",
    "description": "One of our stylists will cut your hair",
    "price": {
        "price_micros": 15000000,
        "currency_code": "USD"
    }
}

Aucune configuration supplémentaire, en plus de la mise en œuvre standard, n'est requise sur le serveur de réservation pour accepter le paiement à l'arrivée.

Paiement d'avance

Cette configuration permet de spécifier que le montant du service doit être payé en intégralité au moment de la réservation.

Le prépaiement est spécifié au niveau du service via le champ prepayment_type de Service. Pour exiger le paiement d'un service, définissez ce paramètre sur REQUIRED, comme dans l'exemple ci-dessous. Notez que le prix est spécifié de la même manière que dans l'exemple de paiement à l'arrivée. Ici, comme nous définissons le type de pré-paiement obligatoire sur la carte, une carte de crédit sera collectée et ce prix pourra être débité au moment du règlement.

JSON

{
    "merchant_id": "merchant-1",
    "service_id": "service-2-b",
    "name": "Spa Treatment",
    "description": "A full spa treatment",
    "price": {
        "price_micros": "200000000",
        "currency_code": "USD"
    }
    "prepayment_type": "REQUIRED"
}

Serveur de réservation

Lorsque vous acceptez les prépaiements, un jeton de paiement est transmis à votre serveur de réservation dans l'appel de CreateBooking via le champ payment_processing_parameters.unparsed_payment_method_token. Vous devez débiter exactement le montant spécifié dans le champ "price" du flux et utiliser la devise indiquée dans les flux. Ces frais doivent respecter la procédure décrite dans le Guide d'activation des paiements.

Lorsque vous renvoyez un élément CreateBookingResponse, le champ booking.payment_information doit être défini correctement pour indiquer que le pré-paiement a été fourni et traité.

La spécification PaymentInformation contient une documentation complète sur toutes les options d'information de paiement. Vous trouverez ci-dessous un exemple minimal de traitement du pré-paiement. Il est important que le prix indiqué dans le champ "price" corresponde exactement à celui spécifié dans la requête. De plus, si un taux de taxe est spécifié dans les flux ou les requêtes, il doit également être inclus exactement.

Notez également que vous devez fournir un ID de transaction. Cet ID de transaction doit être unique au minimum parmi les transactions avec ce marchand. L'identifiant de transaction qui vous est fourni par la société de traitement des paiements est un bon candidat.

JSON

{
    "prepayment_status": "PREPAYMENT_PROVIDED",
    "payment_processed_by": "PROCESSED_BY_PARTNER",
    "payment_transaction_id": "[this-transaction-id]",
    "price": {
        "price_micros": "200000000",
        "currency_code": "USD"
    }
}

Frais de non-présentation

Des frais de non-présentation peuvent être facturés à un utilisateur s'il ne participe pas à sa réservation ou s'il annule son séjour après le délai d'annulation. Si aucune période d'annulation n'est spécifiée, l'heure de début du créneau sera définie par défaut.

Pour spécifier des frais de non-présentation, vous devez inclure le champ no_show_fee dans le flux de service, comme indiqué dans l'exemple ci-dessous:

JSON

{
    "merchant_id": "merchant-1",
    "service_id": "service-2-b",
    "name": "Spa Treatment",
    "description": "A full spa treatment",
    "price": {
        "price_micros": 200000000,
        "currency_code": "USD"
    }
    "scheduling_rules": {
        "min_advance_online_canceling": 14400,
    }
    "no_show_fee": {
        "fee": {
            "price_micros": 25000000,
            "currency_code": "USD"
        }
        "fee_type": "FIXED_RATE_DEFAULT"
    }
}

Dans l'exemple ci-dessus, le partenaire ou le marchand est autorisé à facturer un taux fixe de 25 $, comme spécifié dans le champ no_show_fee.fee.price_micros, si le titulaire du rendez-vous n'assiste pas au rendez-vous. Ces frais peuvent également être facturés si l'utilisateur annule son rendez-vous dans les quatre heures (14 400 secondes) précédant le rendez-vous, comme spécifié dans le champ scheduling_rules.min_advance_online_canceling.

Pour savoir comment ne pas définir de frais de spectacle au niveau de la disponibilité, consultez cette section.

Serveur de réservation

Lors du traitement d'une requête incluant des frais de non-présentation, un jeton de paiement est transmis à votre serveur de réservation dans l'appel de CreateBooking via le champ payment_processing_parameters.unparsed_payment_method_token. Ce jeton est transmis de la même manière que dans le cas du pré-paiement. Toutefois, comme le jeton n'est autorisé que sur une courte période, vous devez appeler l'API correspondante de la société de traitement des paiements pour convertir ce jeton en une version que vous pourrez conserver plus tard. Cette procédure est décrite dans la section "Activer les paiements" du guide Flux de jetons de non-présentation.

Lorsque vous renvoyez un CreateBookingResponse, le champ booking.payment_information doit être défini pour renvoyer correctement l'état des frais de non-présentation, comme dans l'exemple ci-dessous.

JSON

{
    "prepayment_status": "PREPAYMENT_PROVIDED",
    "payment_processed_by": "PROCESSED_BY_PARTNER",
    "payment_transaction_id": "[this-transaction-id]",
    "price": {
        "price_micros": "200000000",
        "currency_code": "USD"
    }
    "no_show_fee": {
        "fee": {
            "price_micros": 25000000,
            "currency_code": "USD"
        }
        "fee_type": "FIXED_RATE_DEFAULT"
    }
}

Notez que no_show_fee est défini pour refléter le prix et la structure des frais susceptibles d'être facturés. Notez également que, comme dans l'exemple de prépaiement, un transaction_id est requis dans ce message.

Notez également que le champ booking_id défini dans CreateBookingResponse est un champ obligatoire pour les mises à jour en temps réel qui doivent être envoyées lors de la facturation des frais de non-présentation. Cet identifiant doit être stocké à côté des informations sur la réservation.

Mises à jour en temps réel

Si un utilisateur n'arrive pas à l'heure prévue pour sa réservation ou s'il annule la réservation après la période d'annulation (par exemple, en vous contactant directement), vous pouvez facturer les frais de non-présentation spécifiés à l'aide des informations de paiement que vous avez enregistrées au moment de la réservation. Lorsque vous facturez des frais de non-présentation, vous devez envoyer une mise à jour en temps réel indiquant que les frais de non-présentation ont été facturés.

Pour les réservations créées par CreateBooking, une mise à jour doit être envoyée à notification.partners.bookings.patch. Le corps de cette requête doit inclure la mise à jour de la réservation, dont l'état est NO_SHOW_PENALIZED. Cet état indique à Google qu'un débit a été effectué.

Par exemple, une requête peut être envoyée à:

PATCH https://mapsbooking.googleapis.com/v1alpha/notification/partners/12345678/bookings/123123123?updateMask=status

Avec un corps de requête:

JSON

{
    "name": "partners/12345678/bookings/123123123"
    "merchantId": "merchant-1"
    "serviceId": "service-2-b"
    "status": "NO_SHOW_PENALIZED"
}

Deposit

Les acomptes sont utilisés pour collecter un débit initial comme condition requise pour la réservation. Les acomptes peuvent être facturés lors de la réservation ou ultérieurement. Vous devrez peut-être définir les conditions de remboursement, ainsi que les délais de réservation en ligne.

Pour spécifier un virement, vous devez inclure dans le flux de service le champ deposit, comme illustré dans l'exemple ci-dessous:

JSON

{
    "merchant_id": "merchant-1",
    "service_id": "service-2-b",
    "name": "Spa Treatment",
    "description": "A full spa treatment",
    "price": {
        "price_micros": 200000000,
        "currency_code": "USD"
    }
    "scheduling_rules": {
        "min_advance_online_canceling": 86400,
    }
    "deposit": {
        "deposit": {
            "price_micros": 25000000,
            "currency_code": USD,
            "min_advance_cancellation_sec": 14400,
        }
        "deposit_type": "FIXED_RATE_DEFAULT"
    }
}

Dans cet exemple, min_advance_online_canceling définit le délai d'annulation et deposit.min_advance_cancellation_sec définit le moment auquel le virement est remboursable. Notez que dans l'exemple ci-dessus, un virement peut spécifier un délai d'annulation indépendamment des conditions de remboursement. Dans ce cas, l'utilisateur peut annuler le service en ligne jusqu'à 24 heures à l'avance (86 400 secondes). Cela permet au marchand d'être directement informé de toute annulation tardive. Toutefois, l'utilisateur peut toujours bénéficier d'un remboursement jusqu'à quatre heures à l'avance (14 400 secondes) avant la réservation (en vous contactant ou en contactant le marchand pour annulation), ce qui apparaîtra dans les conditions lors du règlement et dans l'e-mail de confirmation.

Pour savoir comment définir les dépôts au niveau de la disponibilité, consultez cette section.

Serveur de réservation

Lors du traitement d'une requête incluant un virement, un jeton de paiement est transmis à votre serveur de réservation dans l'appel de CreateBooking via le champ payment_processing_parameters.unparsed_payment_method_token. Ce jeton est transmis de la même manière que dans le cas du pré-paiement. Si vous facturez le montant du virement ou que vous avez retiré le blocage au moment de la réservation, vous pouvez le faire lors de cette demande.

Si vous avez l'intention de débiter le dépôt plus tard, car le jeton n'est autorisé que pour une courte période, vous devez appeler l'API correspondante de votre société de traitement des paiements pour mettre à niveau ce jeton vers une version que vous pourrez conserver plus tard. Cette procédure est décrite dans la section "Activer les paiements" du flux de jetons de dépôt.

Lorsque vous renvoyez un CreateBookingResponse, le champ booking.payment_information doit renvoyer correctement l'état du dépôt, comme dans l'exemple ci-dessous.

JSON

{
    "prepayment_status": "PREPAYMENT_PROVIDED",
    "payment_processed_by": "PROCESSED_BY_PARTNER",
    "payment_transaction_id": "[this-transaction-id]",
    "price": {
        "price_micros": "200000000",
        "currency_code": "USD"
    }
    "deposit": {
        "deposit": {
            "price_micros": 25000000,
            "currency_code": USD,
            "min_advance_cancellation_sec": 28800,
        }
        "deposit_type": "FIXED_RATE_DEFAULT"
    }
}

Notez que le dépôt est défini pour refléter le prix et la structure du dépôt qui sera facturé ou retenu. Notez également que, comme dans l'exemple de prépaiement, un transaction_id est requis dans ce message.

Mises à jour en temps réel

Si un utilisateur annule sa réservation avant le délai d'annulation du dépôt, vous devez rembourser tout acompte que vous avez facturé sur la carte de l'utilisateur. Lorsque vous remboursez un dépôt, vous devez envoyer une mise à jour en temps réel indiquant que le dépôt a été remboursé.

Pour les réservations créées par CreateBooking, une mise à jour doit être envoyée à notification.partners.bookings.patch. Le corps de cette requête doit inclure la réservation mise à jour, avec l'état défini sur CANCELED et le champ paymentInformation.prepaymentStatus défini sur PREPAYMENT_REFUNDED. Cela indique à Google que le virement a été remboursé.

Par exemple, une requête peut être envoyée à:

PATCH https://mapsbooking.googleapis.com/v1alpha/notification/partners/12345678/bookings/123123123?updateMask=status

Avec un corps de requête:

JSON

{
    "name": "partners/12345678/bookings/123123123"
    "merchantId": "merchant-1"
    "serviceId": "service-2-b"
    "status": "CANCELED"
    "paymentInformation": {
      "prepaymentStatus": "PREPAYMENT_REFUNDED"
    }
    
}

Carte de crédit requise

Un service peut nécessiter une carte de crédit comme preuve supplémentaire de l'identité de l'utilisateur. Cependant, il ne doit pas être utilisé pour le prépaiement, les acomptes et les frais de non présentation. Si ces cas d'utilisation sont requis, ils doivent être configurés explicitement en suivant les étapes ci-dessus. Notez également que l'utilisation d'une carte de crédit entraîne souvent une baisse significative des réservations pour ce service.

Pour qu'une carte de crédit soit requise au moment du règlement, vous devez définir le champ require_credit_card sur REQUIRE_CREDIT_CARD_ALWAYS.

JSON

{
    "merchant_id": "merchant-1",
    "service_id": "service-1-a",
    "name": "Men's haircut",
    "description": "One of our stylists will cut your hair",
    "price": {
        "price_micros": 15000000,
        "currency_code": "USD"
    },
    "require_credit_card": "REQUIRE_CREDIT_CARD_ALWAYS"
}

Serveur de réservation

Lors du traitement d'une requête incluant une exigence de carte de crédit, un jeton de paiement est transmis à votre serveur de réservation dans l'appel de CreateBooking via le champ payment_processing_parameters.unparsed_payment_method_token. Ce jeton est transmis de la même manière que dans le cas du pré-paiement. Toutefois, comme le jeton n'est autorisé que sur une courte période, vous devez appeler l'API correspondante de la société de traitement des paiements pour convertir ce jeton en une version que vous pourrez conserver plus tard.

Aucune information supplémentaire n'est requise dans la réponse du serveur de réservation, en dehors du cas d'utilisation du paiement à l'arrivée.

Remplacer la tarification au niveau de disponibilité

Dans tous les exemples ci-dessus, la structure de prix / frais est spécifiée au niveau du service. Dans la plupart des cas, cette tarification au niveau du service doit être utilisée. Toutefois, dans certains cas, il est judicieux de modifier la structure des paiements pour certains créneaux de disponibilité. Par exemple, les situations suivantes peuvent être gérées en remplaçant les prix / frais au niveau de la disponibilité:

  • Les prix sont réduits le mardi et augmentés le samedi.
  • Aucuns frais de spectacle ne s'appliquent à la disponibilité entre 17h et 19h.
  • Le service fourni par un styliste senior est plus cher qu'un styliste junior.

Le tableau ci-dessous présente, pour chaque mode de paiement / frais, le champ à utiliser dans le flux disponibilité pour remplacer la définition du niveau de service.

Type de paiement Frais / Prix – Définition Remplacement ?
Payer à l'arrivée Service.price Prix remplaçable via Availability.payment_option_id faisant référence à Merchant.payment_option
Paiement d'avance Service.price Vous pouvez remplacer le prix par Availability.payment_option_id en faisant référence à Merchant.payment_option
Aucuns frais de spectacle Service.no_show_fee Availability.no_show_fee
Deposit Service.deposit Availability.deposit
Exiger une carte de crédit Service.require_credit_card Availability.require_credit_card

Notez que pour ignorer le prix au niveau de la disponibilité, vous devez d'abord définir une option de paiement au niveau du marchand. Pour savoir comment ajouter des périodes d'annulation au niveau de la disponibilité, consultez le guide Ajouter des périodes d'annulation.