Aktualizacja do najnowszej wersji

W lipcu 2018 r. w Google Pay API wprowadzone zostały nowe struktury obiektów PaymentDataRequest i IsReadyToPayRequest. Ten przewodnik wyjaśnia, jak zaktualizować obiekty w formacie wersji 1 Google Pay API do obiektów w formacie wersji 2.

Formy płatności

W wersji 2 Google Pay API każdy obiekt żądania zawiera wersję interfejsu API.

Wersja 1 interfejsu Google Pay API obsługiwała tylko karty. Forma płatności CARD jest jedną z wielu dostępnych opcji płatności w wersji 2 interfejsu Google Pay API. Witryny, które do tej pory miały ustawioną wartość allowedPaymentMethods w CARD, teraz muszą mieć ustawioną wartość allowedAuthMethods w PAN_ONLY. Witryny, które do tej pory miały ustawioną wartość allowedPaymentMethods w TOKENIZED_CARD, teraz muszą mieć ustawioną wartość allowedAuthMethods w CRYPTOGRAM_3DS.

Dozwolone sieci kart są podane razem z obsługiwanymi metodami uwierzytelniania kart w tych sieciach.

apiVersion 1

{
  allowedPaymentMethods: [
    'CARD',
    'TOKENIZED_CARD'
  ],
  cardRequirements: {
    allowedCardNetworks: [
      'AMEX',
      'DISCOVER',
      'JCB',
      'MASTERCARD',
      'VISA'
    ]
  }
}

apiVersion 2

{
  apiVersion: 2,
  apiVersionMinor: 0,
  allowedPaymentMethods: [{
    type: 'CARD',
    parameters: {
      allowedAuthMethods: [
        'PAN_ONLY',
        'CRYPTOGRAM_3DS'
      ],
      allowedCardNetworks: [
        'AMEX',
        'DISCOVER',
        'JCB',
        'MASTERCARD',
        'VISA'
      ]
    }
  }]
}

Dozwolone sieci kart i ich metody uwierzytelniania są zawarte w IsReadyToPayRequest dla formy płatności CARD.

Tokenizacja danych płatności kartą

Google Pay API zwraca zaszyfrowane dane karty, które są używane przez podaną bramę lub odszyfrowane na Twoich serwerach. W wersji 2 interfejsu Google Pay API tokenizacja formy płatności odbywa się wewnątrz formy płatności CARD.

apiVersion 1

{
  paymentMethodTokenizationParameters: {
    tokenizationType: 'PAYMENT_GATEWAY',
    parameters: {
      'gateway': 'example',
      'gatewayMerchantId': 'exampleMerchantId'
    }
  }
}

apiVersion 2

{
  allowedPaymentMethods: [{
    type: 'CARD',
    tokenizationSpecification: {
      type: 'PAYMENT_GATEWAY',
      parameters: {
        'gateway': 'example',
        'gatewayMerchantId': 'exampleMerchantId'
      }
    }
  }]
}

Identyfikator sprzedawcy w Google

W wersji 1 interfejsu Google Pay API identyfikator sprzedawcy w Google był właściwością najwyższego poziomu. Teraz znajduje się w obiekcie MerchantInfo wraz z opcjonalną nazwą sprzedawcy.

apiVersion 1

{
  merchantId: '12345678901234567890'
}

apiVersion 2

{
  merchantInfo: {
    merchantId: '12345678901234567890'
  }
}

Adres rozliczeniowy

Opcjonalny adres rozliczeniowy i numer telefonu na potrzeby rozliczeń są powiązane z formą płatności CARD. Witryna może wysłać żądanie adresu rozliczeniowego – w takiej sytuacji konfiguracja spodziewanej odpowiedzi znajduje się w obiekcie BillingAddressParameters.

apiVersion 1

{
  cardRequirements: {
    billingAddressRequired: true,
    billingAddressFormat: 'FULL'
  },
  phoneNumberRequired: true
}

apiVersion 2

{
  allowedPaymentMethods: [{
    type: 'CARD',
    parameters: {
      billingAddressRequired: true,
      billingAddressParameters: {
        format: 'FULL',
        phoneNumberRequired: true
      }
    }
  }]
}

Adres dostawy

Opcjonalny adres dostawy nadal jest wymagany na najwyższym poziomie obiektu PaymentDataRequest. Nazwa shippingAddressRequirements została zmieniona na shippingAddressParameters.

Do tej pory odpowiedzi Google Pay API na żądanie numeru telefonu mogły zwracać numer telefonu jako część adresu dostawy. Numer telefonu na potrzeby dostawy nie jest już obsługiwany w żadnej wersji Google Pay API. Trzeba zaktualizować funkcje przetwarzające odpowiedź, które oczekują podania numeru telefonu na potrzeby dostawy.

apiVersion 1

{
  shippingAddressRequired: true,
  shippingAddressRequirements: {
    allowedCountryCodes: [
      'US',
      'CA'
    ]
  }
}

apiVersion 2

{
  shippingAddressRequired: true,
  shippingAddressParameters: {
    allowedCountryCodes: [
      'US',
      'CA'
    ]
  }
}

Odpowiedź PaymentData

Odpowiedź obiektu PaymentData dla witryn z właściwością apiVersion o wartości 2 w PaymentDataRequest zmieniła się i teraz jako jednej z dostępnych odpowiedzi dotyczących danych płatności używa kart. Właściwości apiVersion i apiVersionMinor w obiekcie PaymentDataRequest występują w odpowiedzi PaymentData, aby określić spodziewany format.

apiVersion 1

{
  // no version specified
}

apiVersion 2

{
  apiVersion: 2,
  apiVersionMinor: 0
}

Informacje o wybranej formie płatności i jej tokenizacji znajdują się we właściwości paymentMethodData. Z obiektu cardInfo karty zostały usunięte dwie właściwości: cardClass i cardImageUri.

apiVersion 1

{
  cardInfo: {
    cardDescription: 'Visa •••• 1234',
    cardNetwork: 'VISA',
    cardDetails: 1234
  },
  paymentMethodToken: {
    tokenizationType: 'PAYMENT_GATEWAY',
    token: 'examplePaymentMethodToken'
  }
}

apiVersion 2

{
  paymentMethodData: {
    type: 'CARD',
    description: 'Visa •••• 1234',
    info: {
      cardNetwork: 'VISA',
      cardDetails: '1234'
    },
    tokenizationData: {
      type: 'PAYMENT_GATEWAY',
      token: 'examplePaymentMethodToken'
    }
  }
}

Odpowiedź na zaszyfrowaną wiadomość

W witrynach, które używają typu tokenizacji formy płatności DIRECT i obsługują formę płatności TOKENIZED_CARD zgodnie z wersją 1 interfejsu API, trzeba zaktualizować sposób obsługi odszyfrowanej właściwości encryptedMessage. Jest to konieczne, aby dalej przekazywać tokeny urządzeń z Androidem uwierzytelnianych za pomocą kryptogramu 3-D Secure i opcjonalnie za pomocą wskaźnika handlu elektronicznego (electronic commerce indicator, ECI) do bramy lub firmy obsługującej płatności. Karta to paymentMethod z wartością CARD. W paymentMethodDetails.authMethod zawiera dodatkowe informacje o metodzie uwierzytelniania wybranej karty.

apiVersion 1

{
  "paymentMethod": "TOKENIZED_CARD",
  "paymentMethodDetails": {
    "authMethod": "3DS",
    "dpan": "1111222233334444",
    "expirationMonth": 10,
    "expirationYear": 2020,
    "3dsCryptogram": "AAAAAA...",
    "3dsEciIndicator": "eci indicator"
  }
}

apiVersion 2

{
  "paymentMethod": "CARD",
  "paymentMethodDetails": {
    "authMethod": "CRYPTOGRAM_3DS",
    "pan": "1111222233334444",
    "expirationMonth": 10,
    "expirationYear": 2020,
    "cryptogram": "AAAAAA...",
    "eciIndicator": "eci indicator"
  }
}