Configurer les paiements en mode bac à sable

Les commandes de projets de bout en bout permettent de configurer le mode de paiement en bac à sable lorsque : à l'aide du test rapide ou de l'environnement de bac à sable. Pendant que vous testez vos données vous pouvez passer du mode de paiement bac à sable au mode de paiement en production. Afin de les paiements tests pour votre projet de commande de bout en bout sans recharger les cartes, Bac à sable comme mode de paiement. L'environnement de production sont compatibles avec le mode de paiement bac à sable.

Configuration

Pour activer le mode de paiement Sandbox dans l'environnement de bac à sable, procédez comme suit : étapes:

  1. Dans le Centre d'actions, accédez à Configuration > Fonctionnalités.
  2. Sur la fiche Fonctionnalités du compte, recherchez la case d'option Mode de paiement.
  3. Sélectionnez l'option Bac à sable, puis cliquez sur Enregistrer les modifications.

Fiche "Fonctionnalités du compte" avec le mode bac à sable sélectionné

Pour activer le mode de paiement Sandbox dans l'environnement de test rapide, procédez comme suit : étapes:

  1. Dans le Centre Actions, accédez à Flux. > Test rapide.
  2. Cochez la case d'option Use sandbox for GPay (Utiliser le bac à sable pour GPay).

Test rapide avec le mode bac à sable sélectionné

Lorsque le mode de paiement Bac à sable est sélectionné:

  • Les commandes de bout en bout configurent Google Pay pour renvoyer des jetons d'instrument qui contiennent les données de la carte de test au lieu des informations réelles de la carte.
  • Le champ isInSandbox est défini sur true dans CheckoutRequestMessage et SubmitOrderRequestMessage.

Les différentes combinaisons d'environnement, de mode de paiement et d'isInSandbox sont les suivantes:

Environnement Mode de paiement isInSandbox
Test rapide Bac à sable true
Test rapide Production faux
Bac à sable Bac à sable true
Bac à sable Production faux
Production Production faux

Message de réponse Google Checkout

Le CheckoutResponseMessage envoyé par votre service Web de commande de repas contient PaymentOptions Lorsque vous configurer votre règlement, vous fournissez un espace réservé pour les options de paiement à l'aide d'un exemple de passerelle de paiement.

  • Veillez à mettre à jour les CheckoutResponseMessage envoyés par votre navigateur avec la configuration de tokenisation appropriée.
<ph type="x-smartling-placeholder">

Exemples de modes de paiement

Voici des exemples d'objets JSON PaymentOptions provenant d'un CheckoutResponseMessage pour différentes passerelles de paiement utilisant des clés de bac à sable:

JSON

"paymentOptions": {
    "googleProvidedOptions": {
        "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gatewayMerchantId\":\"YOUR_MERCHANT_ID\",\"gateway\":\"cybersource\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} "
    }
}

JSON

"paymentOptions": {
    "googleProvidedOptions": {
        "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gateway\":\"braintree\",\"braintree:apiVersion\":\"v1\",\"braintree:sdkVersion\":\"1.4.0\",\"braintree:merchantId\":\"YOUR_MERCHANT_ID\",\"braintree:clientKey\":\"YOUR_BRAINTREE_SANDVOX_OR_PRODUCTION_KEY\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} "
    }
}

JSON

"paymentOptions": {
    "googleProvidedOptions": {
        "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gateway\":\"stripe\",\"stripe:version\":\"2018-10-31\",\"stripe:publishableKey\":\"YOUR_PRODUCTION_OR_SANDBOX_STRIPE_KEY\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} "
    }
}

JSON

"paymentOptions": {
    "googleProvidedOptions": {
        "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gateway\":\"stripev2\",\"gatewayMerchantId\":\"YOUR_PRODUCTION_OR_SANDBOX_STRIPE_KEY\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} "
    }
}

Marquer les transactions de bac à sable

Lorsque le mode de paiement en bac à sable est activé, le champ isInSandbox est inclus dans la requête et défini sur true pour les requêtes entrantes vers votre serveur Web point de terminaison du service (CheckoutRequestMessage et SubmitOrderRequestMessage). Procédez comme suit lorsque le champ isInSandbox est défini sur true:

  • Utiliser des clés de bac à sable plutôt que des clés de production dans la tokenisation configuration de votre passerelle de paiement. La plupart des sociétés de traitement des paiements fournissent des API pour le bac à sable et la production.
  • Ne déclenchez aucune communication avec le fournisseur de services Web, généralement les restaurants, car ils n'ont pas besoin d'être informés des transactions dans le bac à sable.

Les cartes de crédit de test ne sont pas acceptées, même lorsque le bac à sable des transactions est est activé. Vous devez utiliser une carte de crédit réelle lorsque vous effectuez une transaction. Toutefois, Les jetons d'instrument de bac à sable contiennent des informations relatives à une carte test qui ne sont pas facturables.

<ph type="x-smartling-placeholder">

Traiter les paiements

Lorsqu'un client envoie sa commande, Ordering End-to-End envoie la SubmitOrderRequestMessage au point de terminaison de votre service Web. Google Pay jeton est incluse en tant que chaîne encodée en base64 dans le fichier SubmitOrderRequestMessage. instrumentToken . Pour traiter le paiement du client, effectuez l'une des opérations suivantes, en fonction de votre passerelle de paiement:

Passerelle de paiement
Stripe ou Braintree Décodez la chaîne de jeton encodée en base64 et envoyez les données appropriées contenues dans la charge utile du jeton décodée à votre passerelle de paiement pour traiter le paiement.
Toutes les autres passerelles de paiement (y compris Stripev2) Envoyez la chaîne complète du jeton encodée en base64 à votre API de passerelle de paiement pour traiter le paiement. La structure des jetons de mode de paiement de Google Pay contient des champs chiffrés que votre passerelle de paiement peut déchiffrer pour traiter le paiement.
<ph type="x-smartling-placeholder">

Exemple de charge utile décodée

Les exemples suivants montrent les charges utiles décodées renvoyées dans le instrumentToken pour différentes passerelles de paiement:

<ph type="x-smartling-placeholder">

JSON

Cet exemple JSON représente un jeton de paiement décodé lors de l'utilisation Braintree. Extraire la valeur du champ nonce et envoyez la valeur à Braintree pour traiter le paiement.

{
  "androidPayCards": [{
    "type": "AndroidPayCard",
    "nonce": "aeeb8297-4242...",
    "description": "AndroidPay",
    "consumed": false,
    "details": {
      "cardType": "Visa",
      "lastTwo": "29"
    }
  }]
}

Si Google Pay n'est pas activé dans le panneau de configuration de Braintree, Le champ instrumentToken renvoie l'erreur suivante:

{
  "error": {
    "message": "Record not found"
  },
  "fieldErrors": []
}

JSON

Cet exemple JSON représente un jeton de paiement décodé lors de l'utilisation de Stripe. Extrayez la valeur du champ id et envoyez-la à Stripe pour traiter le paiement.

{
  "id": "tok_abcdefg1234...",
  "object": "token",
  "card": {
    "id": "card_abcde...",
    "object": "card",
    "address_city": null,
    "address_country": null,
    "address_line1": null,
    "address_line1_check": null,
    "address_line2": null,
    "address_state": null,
    "address_zip": null,
    "address_zip_check": null,
    "brand": "Visa",
    "country": "US",
    "cvc_check": null,
    "dynamic_last4": "1234",
    "exp_month": 1,
    "exp_year": 2019,
    "funding": "credit",
    "last4": "1234",
    "metadata": {},
    "name": null,
    "tokenization_method": "android_pay"
  },
  "client_ip": "74.125.177.36",
  "created": 1500483670,
  "livemode": false,
  "type": "card",
  "used": false
}

JSON

Cet exemple JSON représente un jeton de paiement décodé lors de l'utilisation de Stripev2.

  {
  "protocolVersion":"ECv2",
  "signature":"MEQCIH6Q4OwQ0jAceFEkGF0JID6sJNXxOEi4r+mA7biRxqBQAiAondqoUpU/bdsrAOpZIsrHQS9nwiiNwOrr24RyPeHA0Q\u003d\u003d",
  "intermediateSigningKey":{
    "signedKey": "{\"keyExpiration\":\"1542323393147\",\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/1+3HBVSbdv+j7NaArdgMyoSAM43yRydzqdg1TxodSzA96Dj4Mc1EiKroxxunavVIvdxGnJeFViTzFvzFRxyCw\\u003d\\u003d\"}",
    "signatures": ["MEYCIQCO2EIi48s8VTH+ilMEpoXLFfkxAwHjfPSCVED/QDSHmQIhALLJmrUlNAY8hDQRV/y1iKZGsWpeNmIP+z+tCQHQxP0v"]
  },
  "signedMessage":"{\"tag\":\"jpGz1F1Bcoi/fCNxI9n7Qrsw7i7KHrGtTf3NrRclt+U\\u003d\",\"ephemeralPublicKey\":\"BJatyFvFPPD21l8/uLP46Ta1hsKHndf8Z+tAgk+DEPQgYTkhHy19cF3h/bXs0tWTmZtnNm+vlVrKbRU9K8+7cZs\\u003d\",\"encryptedMessage\":\"mKOoXwi8OavZ\"}"
}
  

JSON

Cet exemple JSON représente un jeton de paiement décodé lors de l'utilisation de Square.

  {
    "signature": "MEYCIQCMAsWCrY2GfHM/gMAKiK3QCKJJOIkjZeTQGzcdWgvrhwIhAJ3mXwe+wmU9z+Apv1rTDsCVQBzayvWzT4ywxytrSPla",
    "protocolVersion": "ECv1",
    "signedMessage": "{\"encryptedMessage\":\"WkYz21EYxojwTqWh6A3oYXtmctu1PlqF+tNYPA4cq017nqj16Ge7kaVR7MI1XG1OrCmcMwP20u5Zb5E28XYan8UI8M4L120orvE9XU1ivZuO4Myq2O3ue8v0lY1MDx8Mnk+5mkAv1kLmzJc91gEQ2leIwrPuMDYqsQUHzTR3Jikh5/v+iWRkyQPKKxgj5c6Erdu/pkg1xV6fQJcHNdq9Jw11zl95x6eQurxw2Uy8v811azGr+noKJbw0uye72MkhmzMS5QKOzwGT9nBfO+zPLYSEewsdOcPbNZF94zk/KU9nxom/gQ+eYEMIZvOj9lO4gQqDqR6DyWyStk7MjeXQTvXWZBI1JpqvOrlTHL0Ct18RpbfOio7hAtafzb0NnqEKlsun+SSpJmvI7U6n6Cnu1JUMUGfT/Jsi6RJ3N6pRw2BubeR1925Xl3jXQnlz5io6X1YRlAcnshZyf6CjBpKES32aTf1m1IHRhZ2Jj6i/g7Y\\u003d\",\"ephemeralPublicKey\":\"BDQA0Cf//BHPcnB0R/GRrWa2g7T1QF97eOhAYy7l45M+kJnsoeL9OaUQV/KIMLvcgbmKkZIm2FQeL7ftd6S4q4c\\u003d\",\"tag\":\"DHtVyXNo+PDr7Thi/EjBBbsr2k7y1SwGIn0D9mmPTJc\\u003d\"}"
  }
    

Pour traiter le paiement à l'aide du jeton, renvoyez la chaîne de jeton encodée en base64 avec votre requête à l'API de paiement de Square dans le champ source_id précédé de gpay :

  {
    "idempotency_key": "ID",
    "source_id": "gpay:GOOGLE_PAY_BASE64_ENCODED_TOKEN",
    "amount_money": {
        "amount": 50,
        "currency": "USD"
    },
    "location_id": "LOCATION_ID",
    "billing_address": {
        "postal_code": "11111"
    }
  }

Voici un exemple Node.js qui décode l'image instrumentToken dans Braintree:

Node.js

function decodeToken(instrumentToken) {
  let decodedString = new Buffer(instrumentToken, 'base64').toString('ascii')
  if (decodedString.androidPayCards) {
    return decodedString.androidPayCards[0].nonce;
  }
}