Korumalı alan ödemelerini ayarlama

Uçtan uca sipariş projeleri, Hızlı Test veya Korumalı Alan ortamını kullanırken Korumalı Alan Ödeme Modunu yapılandırmaya olanak tanır. Veri feed'inizi test ederken korumalı alan ve üretim ödeme modları arasında geçiş yapabilirsiniz. Sipariş Sonu-Başına projenizin ödemelerini kartları şarj etmeden test etmek için Ödeme Modu olarak Korumalı Alan'ı kullanın. Üretim ortamı, korumalı alan ödeme modunu desteklemez.

Yapılandırma

Korumalı alan ortamında korumalı alan ödeme modunu etkinleştirmek için aşağıdaki adımları uygulayın:

  1. İşlem Merkezi'nde Yapılandırma > Özellikler'e gidin.
  2. Hesap özellikleri kartında Ödeme Modu radyo düğmesini bulun.
  3. Korumalı alan seçeneğini belirleyin ve Değişiklikleri kaydet'i tıklayın.

Sandbox modu seçiliyken hesap özellikleri kartı

Hızlı Test ortamında korumalı alan ödeme modunu etkinleştirmek için aşağıdaki adımları uygulayın:

  1. İşlem Merkezi'nde Feed'ler > Hızlı Test'e gidin.
  2. GPay için korumalı alanı kullan radyo düğmesini seçin.

Korumalı alan modu seçiliyken hızlı test

Korumalı Alan ödeme modu seçildiğinde:

  • Uçtan uca sipariş, Google Pay'i gerçek kart ayrıntıları yerine test kartı verileri içeren araç jetonları döndürecek şekilde yapılandırır.
  • isInSandbox alanı, CheckoutRequestMessage ve SubmitOrderRequestMessage'de true olarak ayarlanır.

Ortam, Ödeme Modu ve isInSandbox için farklı kombinasyonlar şunlardır:

Ortam Ödeme Modu isInSandbox
Kısa Test Korumalı Alan true
Kısa Test Üretim yanlış
Korumalı Alan Korumalı Alan true
Korumalı Alan Üretim yanlış
Üretim Üretim yanlış

Ödeme Yanıtı Mesajı

Yemek Siparişi web hizmetiniz tarafından gönderilen CheckoutResponseMessage, PaymentOptions içeriyor. Ödeme adımınızı ayarlarken örnek bir ödeme ağ geçidi kullanarak ödeme seçenekleri yer tutucusu sağlarsınız.

  • Web hizmetiniz tarafından gönderilen CheckoutResponseMessage öğesini uygun jeton oluşturma yapılandırmasıyla güncellediğinizden emin olun.

Ödeme seçeneği örnekleri

Aşağıda, korumalı alan anahtarlarını kullanan çeşitli ödeme ağ geçitleri için CheckoutResponseMessage'deki örnek JSON PaymentOptions nesneleri verilmiştir:

JSONJSONJSONJSON
"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\"}} "
    }
}
"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\"}} "
    }
}
"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\"}} "
    }
}
"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\"}} "
    }
}

Korumalı alan işlemlerini işaretleme

Sandbox Ödeme Modu etkinleştirildiğinde isInSandbox alanı isteğe dahil edilir ve web hizmetinizin uç noktasına (CheckoutRequestMessage ve SubmitOrderRequestMessage) gelen istekler için true olarak ayarlanır. isInSandbox alanı true olarak ayarlandığında şunları yapın:

  • Ödeme ağ geçidinizin jeton oluşturma yapılandırmasında üretim anahtarları yerine korumalı alan anahtarları kullanın. Çoğu ödeme işleyici hem korumalı alan hem de üretim için API anahtarları sağlar.
  • Web servis sağlayıcıyla (genellikle restoran) herhangi bir iletişimi tetiklemeyin. Bu sağlayıcıların korumalı alan işlemlerinden haberdar olması gerekmez.

Test kredi kartları, işlem korumalı alanı etkinleştirilmiş olsa bile desteklenmez. İşlem yaparken gerçek bir kredi kartı kullanmanız gerekir. Ancak korumalı alan enstrüman jetonları, ödeme alınamayan test kartı ayrıntılarını içerir.

Ödemeleri işleme

Bir müşteri siparişini gönderdiğinde, uçtan uca sipariş verme özelliği SubmitOrderRequestMessage mesajını web hizmetinizin uç noktasına gönderir. Google Pay jetonu, SubmitOrderRequestMessage instrumentToken alanına base64 kodlu bir dize olarak dahil edilir. Müşterinin ödemesini işleme almak için ödeme ağ geçidinize bağlı olarak aşağıdakilerden birini yapın:

Ödeme ağ geçidi
Stripe veya Braintree Base64 kodlamalı jeton dizesinin kodunu çözün ve ödemeyi işlemek için kod çözülmüş jeton yükünde bulunan uygun verileri ödeme ağ geçidinize gönderin.
Diğer tüm ödeme ağ geçitleri (stripev2 dahil) Ödemeyi işlemek için base-64 kodlu jeton dizesinin tamamını ödeme ağ geçidi API'nize gönderin. Google Pay ödeme yöntemi jeton yapısı, ödemeyi işlemek için ödeme ağ geçidinizin şifresini çözebileceği şifrelenmiş alanlar içerir.

Kodu çözülmüş yük örneği

Aşağıdaki örneklerde, çeşitli ödeme ağ geçitleri için instrumentToken alanında döndürülen kodlanmış yük gösterilmektedir:

JSONJSONJSONJSON

Bu JSON örneği, Braintree kullanılırken kodu çözülmüş bir ödeme jetonunu temsil etmektedir. Ödemeyi işlemek için nonce alanının değerini ayıklayıp

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

Braintree kontrol panelinde Google Pay etkin değilse instrumentToken alanının kod çözme işlemi sonucunda aşağıdaki hata ortaya çıkar:

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

Bu JSON örneği, Stripe kullanılırken kodu çözülmüş bir ödeme jetonunu temsil etmektedir. Ödemeyi işlemek için id alanının değerini ayıklayıp Stripe'a gönderin.

{
  "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
}

Bu JSON örneği, stripev2 kullanılırken kodu çözülmüş bir ödeme jetonunu temsil eder.

  {
  "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\"}"
}
  

Bu JSON örneği, Square kullanılırken kodu çözülmüş bir ödeme jetonunu temsil etmektedir.

  {
    "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\"}"
  }
    

Ödemeyi jetonu kullanarak işlemek için source_id alanında gpay: ön ekiyle istek göndererek 64 tabanlı kodlanmış jeton dizesini Square'ın ödeme API'sine döndürün.

  {
    "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"
    }
  }

Aşağıda, Braintree'den gelen base64 kodlu instrumentToken değerinin kodunu çözen bir Node.js örneği verilmiştir:

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