Pour créer un paiement via la plateforme, vous avez le choix entre la payment page integration,
où le client est redirigé vers notre page de paiement, la iframe integration, où le formulaire de paiement
est placé dans un iframe à l’aide de notre intégration JavaScript, ou la lightbox integration, afin d’obtenir
une intégration transparente et conforme à la norme PCI DSS dans votre checkout.
Le processus de la page de paiement est le suivant (simplifié) :
Créez un transaction object via notre API.
Demandez l’URL de la page de paiement.
Redirigez l’utilisateur vers la page de paiement.
Traitez la requête webhook entrante pour autoriser la transaction dans l’application du marchand.
Avant de commencer l’intégration de la page de paiement, vous devriez :
Créer un compte et vous inscrire.
Créer un utilisateur d’application sous Account > Utilisateurs > Utilisateur d’application.
Apprendre à vous authentifier et vous connecter à notre service web.
|
Note
|
Veuillez consulter notre dépôt GitHub où nous proposons
des SDK prêts à télécharger dans différents langages, qui facilitent considérablement vos efforts d’intégration.
|
Nous vous proposons également un client API qui vous permet de tester les requêtes envoyées à l’API et de consulter les réponses.
Lorsque le client termine le checkout, créez une commande dans votre boutique.
Vous devez créer un transaction object à l’aide de la méthode create
du Transaction Service.
Utilisez le service build payment page URL pour créer l’URL de la page de paiement et redirigez le client vers cette URL. Le client saisit les données de paiement sur la page de paiement. Selon le mode de paiement, il sera redirigé si nécessaire.
Lorsque la transaction est traitée ou a échoué de notre côté, le client est redirigé vers la successUrl ou
la failedUrl définie lors de la création de l’objet de transaction.
Écoutez la notification pour marquer la commande dans le système du marchand comme authorized ou failed.
Vous pouvez améliorer ce processus en laissant le client sélectionner le mode de paiement déjà dans l’application du marchand. Avec l’opération
fetch possible payment methods du Transaction Service, nous offrons la possibilité de
récupérer les modes de paiement activés pour un espace donné. Comme nous décrivons ici le mode d’intégration de la page de paiement, vous devez passer payment_page comme mode d’intégration.
En résultat, la méthode renvoie les modes de paiement possibles. Ces modes de paiement constituent la base de la liste des modes de paiement
présentés au client. La propriété allowedPaymentMethods de l’objet de transaction permet de restreindre
les modes de paiement autorisés pour la transaction concernée à la sélection effectuée précédemment par le client.
Pour créer un objet de transaction, vous devez utiliser
l’opération Créer une transaction.
Ici, vous fournissez les données client dont vous disposez, y compris les lignes d’articles et les prix.
Cela créera une transaction à l’état pending dans votre espace.
Requête
{
"billingAddress":{
"city":"Winterthur",
"commercialRegisterNumber":"",
"country":"CH",
"dateOfBirth":"",
"emailAddress":"[email protected]",
"familyName":"Test",
"gender":"",
"givenName":"Sam",
"mobilePhoneNumber":"",
"organizationName":"Wallee AG",
"phoneNumber":"",
"postCode":"8400",
"salesTaxNumber":"",
"salutation":"",
"socialSecurityNumber":"",
"state":"",
"street":"Neuwiesenstrasse 15"
},
"currency":"EUR",
"language":"de-CH",
"lineItems":[
{
"amountIncludingTax":"11.87",
"name":"Barbell Pull Up Bar",
"quantity":"1",
"shippingRequired":"true",
"sku":"barbell-pullup",
"type":"PRODUCT",
"uniqueId":"barbell-pullup"
},
{
"amountIncludingTax":"559",
"name":"Rowing Machine",
"quantity":"1",
"shippingRequired":"true",
"sku":"rowing-machine",
"type":"PRODUCT",
"uniqueId":"rowing-machine"
},
{
"amountIncludingTax":"17.98",
"name":"Super Whey Protein",
"quantity":"4",
"shippingRequired":"true",
"sku":"super-whey",
"taxes":[
{
"rate":"10",
"title":"VAT"
},
{
"rate":"3.5",
"title":"Supplement Fee"
}
],
"type":"PRODUCT",
"uniqueId":"super-whey"
},
{
"amountIncludingTax":"12.5",
"name":"Special Chär Test",
"quantity":"1",
"shippingRequired":"false",
"sku":"special-chär-test",
"type":"SHIPPING",
"uniqueId":"special-chär-test"
},
{
"amountIncludingTax":"12.5",
"name":"Standard Shipping",
"quantity":"1",
"shippingRequired":"false",
"sku":"standard-shipping",
"type":"SHIPPING",
"uniqueId":"standard-shipping"
},
{
"amountIncludingTax":"-10",
"name":"Spring Discount",
"quantity":"1",
"shippingRequired":"false",
"sku":"spring-discount",
"type":"DISCOUNT",
"uniqueId":"spring-discount"
}
],
"merchantReference":"DEV-2630",
"shippingAddress":{
"city":"Winterthur",
"commercialRegisterNumber":"",
"country":"CH",
"dateOfBirth":"",
"emailAddress":"[email protected]",
"familyName":"Test",
"gender":"",
"givenName":"Sam",
"mobilePhoneNumber":"",
"organizationName":"Wallee AG",
"phoneNumber":"",
"postCode":"8400",
"salesTaxNumber":"",
"salutation":"",
"socialSecurityNumber":"",
"state":"",
"street":"Neuwiesenstrasse 15"
}
}
Réponse
La réponse que vous recevrez contient le champ id (dans l’exemple ci-dessous 109472) qui sera désormais
utilisé pour effectuer d’autres opérations avec cette transaction.
{
"allowedPaymentMethodBrands": [],
"allowedPaymentMethodConfigurations": [],
"authorizationAmount": 603.85,
"authorizationTimeoutOn": "2017-12-07T08:44:09.119Z",
"autoConfirmationEnabled": true,
"chargeRetryEnabled": true,
"confirmedBy": 0,
"createdBy": 0,
"createdOn": "2017-12-07T08:14:09.119Z",
"currency": "EUR",
"customersPresence": "VIRTUAL_PRESENT",
"endOfLife": "2017-12-21T08:14:09.119Z",
"group": {
"id": 109478
},
"id": 109472,
"language": "de-CH",
"linkedSpaceId": 396,
"merchantReference": "DEV-2630",
"metaData": {},
"plannedPurgeDate": "2017-12-21T08:14:09.119Z",
"refundedAmount": 0,
"state": "PENDING",
"timeZone": "Z",
"version": 1
}
Les propriétés d’une transaction peuvent être mises à jour tant que celle-ci n’est pas à l’état confirmed.
Pour ce faire, utilisez l’opération update du service de transaction.
|
Note
|
Consultez la section Versionnage / verrouillage des objets
qui décrit comment vous devez gérer la propriété version pour éviter les conflits de verrouillage optimiste.
|
Requête
Dans l’exemple ci-dessous, nous allons mettre à jour les lignes d’articles et supprimer la ligne de remise que nous avons ajoutée dans l’exemple précédent.
{
"billingAddress": {
"city": "Winterthur",
"country": "CH",
"emailAddress": "[email protected]",
"familyName": "Test",
"givenName": "Sam",
"postCode": "8400",
"street": "Neuwiesenstrasse 15"
},
"currency": "EUR",
"id": 109472,
"language": "de-CH",
"lineItems": [
{
"amountIncludingTax": "11.87",
"name": "Barbell Pull Up Bar",
"quantity": "1",
"sku": "barbell-pullup",
"type": "PRODUCT",
"uniqueId": "barbell-pullup"
},
{
"amountIncludingTax": "559",
"name": "Rowing Machine",
"quantity": "1",
"sku": "rowing-machine",
"type": "PRODUCT",
"uniqueId": "rowing-machine"
},
{
"amountIncludingTax": "17.98",
"name": "Super Whey Protein",
"quantity": "4",
"sku": "super-whey",
"type": "PRODUCT",
"uniqueId": "super-whey"
},
{
"amountIncludingTax": "12.5",
"name": "Special Chär Test",
"quantity": "1",
"sku": "special-chär-test",
"type": "SHIPPING",
"uniqueId": "special-chär-test"
},
{
"amountIncludingTax": "12.5",
"name": "Standard Shipping",
"quantity": "1",
"sku": "standard-shipping",
"type": "SHIPPING",
"uniqueId": "standard-shipping"
}
],
"merchantReference": "DEV-2630",
"shippingAddress": {
"city": "Winterthur",
"country": "CH",
"emailAddress": "[email protected]",
"familyName": "Test",
"givenName": "Sam",
"postCode": "8400",
"street": "Neuwiesenstrasse 15"
},
"version": 3
}
Réponse
La réponse contient l’objet de transaction mis à jour.
{
"currency": "EUR",
"id": 109472,
"language": "de-CH",
"merchantReference": "DEV-2630",
"version": 3
}
Pour obtenir une meilleure intégration, il est utile de montrer à vos clients déjà dans le checkout quels modes de paiement seraient disponibles sur la base des données de l’objet de transaction. La réponse devrait être rendue et affichée comme options de paiement dans votre checkout.
Pour présélectionner le mode de paiement sur la transaction,
vous devriez mettre à jour la transaction comme montré précédemment en fournissant
l’identifiant allowedPaymentMethodConfiguration qui est renvoyé
par fetchPossiblePaymentMethods pour la transaction donnée.
Réponse
La réponse renvoie les modes de paiement possibles pour la transaction donnée.
{
"data": [{
"dataCollectionType": "ONSITE",
"description": {
"en-US": ""
},
"id": 510,
"imageResourcePath": null,
"linkedSpaceId": 396,
"name": "Credit / Debit Card",
"oneClickPaymentMode": "ALLOW",
"paymentMethod": {
"id": 1457546097597
},
"plannedPurgeDate": null,
"resolvedDescription": {
"en-US": "Pay conveniently with your credit or debit card."
},
"resolvedImageUrl": "https://checkout.postfinance.ch/s/396/resource/icon/payment/method/credit-debit-card.svg",
"resolvedTitle": {
"en-US": "Credit / Debit Card"
},
"sortOrder": 1,
"spaceId": 396,
"state": "ACTIVE",
"title": {
"en-US": ""
},
"version": 2
}],
"hasMore": false,
"limit": 1
}
Vous pouvez maintenant utiliser ces informations pour afficher la sélection du mode de paiement
dans votre boutique. Une fois que le client a choisi le mode de paiement, vous pouvez
mettre à jour la transaction ci-dessus en fournissant les allowedPaymentMethodConfigurations
avec l’opération update du service de transaction.
Requête
{
"allowedPaymentMethodConfigurations": [
{
"id": 507
}
],
"id": 109472,
"version": 4
}
Pour rediriger le client vers la page de paiement, vous utilisez l’opération Construire l’URL de la page de paiement qui renvoie l’URL de la page de paiement vers laquelle rediriger le client.
|
Note
|
Nous offrons une grande flexibilité pour personnaliser l’apparence de la page de paiement à l’aide de notre éditeur de ressources. Vous trouverez plus d’informations dans la documentation sur les ressources et la personnalisation. |
Pour être informé de l’état de la transaction, vous devriez enregistrer des notifications webhook de votre côté. Les webhooks vous informeront des changements d’état des entités sélectionnées et devraient déclencher le traitement ultérieur des résultats de la transaction dans votre application.
Vous trouverez plus d’informations sur les webhooks, les écouteurs de webhooks et leur configuration dans la documentation sur les webhooks.