///
import { Client } from "./client";
import { callback } from "./core";
// We don't want to export GooglePaymentBase
export {};
export type GooglePaymentTokenizeValues = "Yes" | "No" | "Unknown";
export interface GooglePaymentDetails {
cardType: string;
lastFour: string;
lastTow: string;
isNetworkTokenized: boolean;
bin: string;
}
export interface GooglePaymentTokenizePayload {
nonce: string;
details: GooglePaymentDetails;
description: string;
type: string;
binData: {
commercial: GooglePaymentTokenizeValues;
countryOfIssuance: string;
debit: GooglePaymentTokenizeValues;
durbinRegulated: GooglePaymentTokenizeValues;
healthcare: GooglePaymentTokenizeValues;
issuingBank: GooglePaymentTokenizeValues;
payroll: GooglePaymentTokenizeValues;
prepaid: GooglePaymentTokenizeValues;
productId: string;
};
}
type GooglePaymentDataRequestResult =
| google.payments.api.PaymentDataRequest
| Promise;
interface GooglePaymentBase {
/**
* Parse the response from the tokenization.
* @example with callback
* var paymentsClient = new google.payments.api.PaymentsClient({
* environment: 'TEST' // or 'PRODUCTION'
* })
*
* paymentsClient.loadPaymentData(paymentDataRequestFromCreatePaymentDataRequest).then(function (response) {
* googlePaymentInstance.parseResponse(response, function (err, data) {
* if (err) {
* // handle errors
* }
* // send parsedResponse.nonce to your server
* });
* });
* @example with promise
* var paymentsClient = new google.payments.api.PaymentsClient({
* environment: 'TEST' // or 'PRODUCTION'
* })
*
* paymentsClient.loadPaymentData(paymentDataRequestFromCreatePaymentDataRequest).then(function (response) {
* return googlePaymentInstance.parseResponse(response);
* }).then(function (parsedResponse) {
* // send parsedResponse.nonce to your server
* }).catch(function (err) {
* // handle errors
* });
*/
parseResponse(response: any): Promise;
parseResponse(response: any, callback?: callback): void;
/**
* Create a configuration object for use in the `loadPaymentData` method.
*
* **Note**: Version 1 of the Google Pay Api is deprecated and will become unsupported in a future version.
* Until then, version 1 will continue to be used by default, and version 1 schema parameters and overrides will
* remain functional on existing integrations. However, new integrations and all following examples will be
* presented in the GooglePay version 2 schema.
* See [Google Pay's upgrade guide](https://developers.google.com/pay/api/web/guides/resources/update-to-latest-version)
* to see how to update your integration.
*
* If `options.googlePayVersion === 2` was set during the initial {@link module:braintree-web/google-payment.create|create} call,
* overrides must match the Google Pay v2 schema to be valid.
* Optionally, any of the parameters in the [PaymentDataRequest](https://developers.google.com/pay/api/web/reference/object#PaymentDataRequest)
* parameters can be overridden, but note that it is recommended only to override top level parameters to avoid
* squashing deeply nested configuration objects.
* An example can be found below showing how to safely edit these deeply nested objects.
*
* @example
* var paymentDataRequest = googlePaymentInstance.createPaymentDataRequest({
* merchantInfo: {
* merchantId: 'my-merchant-id-from-google'
* },
* transactionInfo: {
* currencyCode: 'USD',
* totalPriceStatus: 'FINAL',
* totalPrice: '100.00'
* }
* });
*
* // Update card payment methods to require billing address
* var cardPaymentMethod = paymentDataRequest.allowedPaymentMethods;
* cardPaymentMethod.parameters.billingAddressRequired = true;
* cardPaymentMethod.parameters.billingAddressParameters = {
* format: 'FULL',
* phoneNumberRequired: true
* };
*
* var paymentsClient = new google.payments.api.PaymentsClient({
* environment: 'TEST' // or 'PRODUCTION'
* })
*
* paymentsClient.loadPaymentData(paymentDataRequest).then(function (response) {
* // handle response with googlePaymentInstance.parseResponse
* // (see below)
* });
*
* @example With deferred client
* googlePaymentInstance.createPaymentDataRequest({
* merchantInfo: {
* merchantId: 'my-merchant-id-from-google'
* },
* transactionInfo: {
* currencyCode: 'USD',
* totalPriceStatus: 'FINAL',
* totalPrice: '100.00'
* }
* }).then(function (paymentDataRequest) {
* // Update card payment methods to require billing address
* var cardPaymentMethod = paymentDataRequest.allowedPaymentMethods;
* cardPaymentMethod.parameters.billingAddressRequired = true;
* cardPaymentMethod.parameters.billingAddressParameters = {
* format: 'FULL',
* phoneNumberRequired: true
* };
*
* var paymentsClient = new google.payments.api.PaymentsClient({
* environment: 'TEST' // or 'PRODUCTION'
* })
*
* return paymentsClient.loadPaymentData(paymentDataRequest);
* }).then(function (response) {
* // handle response with googlePaymentInstance.parseResponse
* // (see below)
* });
*/
createPaymentDataRequest(overrides?: {
emailRequired?: boolean | undefined;
merchantInfo?:
| {
merchantId: string;
}
| undefined;
transactionInfo: {
currencyCode: string;
totalPriceStatus: string;
totalPrice: string;
};
}): T;
}
export type GooglePayment = GooglePaymentBase;
export type GooglePaymentDeferred = GooglePaymentBase>;
/**
* // include https://pay.google.com/gp/p/js/pay.js in a script tag
* // on your page to load the `google.payments.api.PaymentsClient` global object.
*
* var paymentButton = document.querySelector('#google-pay-button');
* var paymentsClient = new google.payments.api.PaymentsClient({
* environment: 'TEST' // or 'PRODUCTION'
* });
*
* braintree.client.create({
* authorization: 'tokenization-key-or-client-token'
* }).then(function (clientInstance) {
* return braintree.googlePayment.create({
* client: clientInstance,
* googlePayVersion: 2,
* googleMerchantId: 'your-merchant-id-from-google'
* });
* }).then(function (googlePaymentInstance) {
* paymentButton.addEventListener('click', function (event) {
* var paymentDataRequest;
*
* event.preventDefault();
*
* paymentDataRequest = googlePaymentInstance.createPaymentDataRequest({
* transactionInfo: {
* currencyCode: 'USD',
* totalPriceStatus: 'FINAL',
* totalPrice: '100.00'
* }
* });
*
* paymentsClient.loadPaymentData(paymentDataRequest).then(function (paymentData) {
* return googlePaymentInstance.parseResponse(paymentData);
* }).then(function (result) {
* // send result.nonce to your server
* }).catch(function (err) {
* // handle err
* });
* });
* });
*
* @example Check Browser and Customer Compatibility
* var paymentsClient = new google.payments.api.PaymentsClient({
* environment: 'TEST' // or 'PRODUCTION'
* });
*
* function setupGooglePayButton(googlePaymentInstance) {
* var button = document.createElement('button');
*
* button.id = 'google-pay';
* button.appendChild(document.createTextNode('Google Pay'));
* button.addEventListener('click', function (event) {
* var paymentRequestData;
*
* event.preventDefault();
*
* paymentDataRequest = googlePaymentInstance.createPaymentDataRequest({
* transactionInfo: {
* currencyCode: 'USD',
* totalPriceStatus: 'FINAL',
* totalPrice: '100.00' // your amount
* }
* });
*
* paymentsClient.loadPaymentData(paymentDataRequest).then(function (paymentData) {
* return googlePaymentInstance.parseResponse(paymentData);
* }).then(function (result) {
* // send result.nonce to your server
* }).catch(function (err) {
* // handle errors
* });
* });
*
* document.getElementById('container').appendChild(button);
* }
*
* braintree.client.create({
* authorization: 'tokenization-key-or-client-token'
* }).then(function (clientInstance) {
* return braintree.googlePayment.create({
* client: clientInstance,
* googlePayVersion: 2,
* googleMerchantId: 'your-merchant-id-from-google'
* });
* }).then(function (googlePaymentInstance) {
*
* return paymentsClient.isReadyToPay({
* // see https://developers.google.com/pay/api/web/reference/object#IsReadyToPayRequest for all options
* apiVersion: 2,
* apiVersionMinor: 0,
* allowedPaymentMethods: googlePaymentInstance.createPaymentDataRequest().allowedPaymentMethods,
* existingPaymentMethodRequired: true
* });
* }).then(function (response) {
* if (response.result) {
* setupGooglePayButton(googlePaymentInstance);
* }
* }).catch(function (err) {
* // handle setup errors
* });
*/
export function create(options: {
client?: Client | undefined;
authorization?: string | undefined;
useDeferredClient?: false | undefined;
googlePayVersion?: number | undefined;
googleMerchantId?: string | undefined;
}): Promise;
export function create(options: {
client?: Client | undefined;
authorization?: string | undefined;
useDeferredClient: true;
googlePayVersion?: number | undefined;
googleMerchantId?: string | undefined;
}): Promise;
export function create(
options: {
client?: Client | undefined;
authorization?: string | undefined;
useDeferredClient?: false | undefined;
googlePayVersion?: number | undefined;
googleMerchantId?: string | undefined;
},
callback?: callback,
): void;
export function create(
options: {
client?: Client | undefined;
authorization?: string | undefined;
useDeferredClient: true;
googlePayVersion?: number | undefined;
googleMerchantId?: string | undefined;
},
callback?: callback,
): void;