import { Client } from "./client"; import { callback } from "./core"; import { HostedFields } from "./hosted-fields"; export interface UnionPayAccountDetails { cardType: string; lastTwo: string; description: string; } export interface UnionPayTokenizePayload { nonce: string; type: string; details: UnionPayAccountDetails; } /** *

true - the user will receive an SMS code that needs to be supplied for tokenization. *

false - the card can be immediately tokenized. */ export interface UnionPayEnrollPayload { enrollmentId: string; smsCodeRequired: boolean; } export interface UnionPayProperties { supportsTwoStepAuthAndCapture: boolean; isSupported: boolean; } export interface UnionPayFetchCapabilitiesPayload { isUnionPay: boolean; isDebit: boolean; unionPay: UnionPayProperties; } export interface UnionPay { /** * Fetches the capabilities of a card, including whether or not the SMS enrollment process is required. * @example With raw card data * unionpayInstance.fetchCapabilities({ * card: { * number: '4111111111111111' * } * }, function (fetchErr, cardCapabilities) { * if (fetchErr) { * console.error(fetchErr); * return; * } * * if (cardCapabilities.isUnionPay) { * if (cardCapabilities.unionPay && !cardCapabilities.unionPay.isSupported) { * // Braintree cannot process this UnionPay card. * // Ask the user for a different card. * return; * } * * if (cardCapabilities.isDebit) { * // CVV and expiration date are not required * } else { * // CVV and expiration date are required * } * * // Show mobile phone number field for enrollment * } * }); * @example With Hosted Fields * // Fetch capabilities on `blur` inside of the Hosted Fields `create` callback * hostedFieldsInstance.on('blur', function (event) { * // Only attempt to fetch capabilities when a valid card number has been entered * if (event.emittedBy === 'number' && event.fields.number.isValid) { * unionpayInstance.fetchCapabilities({ * hostedFields: hostedFieldsInstance * }, function (fetchErr, cardCapabilities) { * if (fetchErr) { * console.error(fetchErr); * return; * } * * if (cardCapabilities.isUnionPay) { * if (cardCapabilities.unionPay && !cardCapabilities.unionPay.isSupported) { * // Braintree cannot process this UnionPay card. * // Ask the user for a different card. * return; * } * if (cardCapabilities.isDebit) { * // CVV and expiration date are not required * // Hide the containers with your `cvv` and `expirationDate` fields * } else { * // CVV and expiration date are required * } * } else { * // Not a UnionPay card * // When form is complete, tokenize using your Hosted Fields instance * } * * // Show your own mobile country code and phone number inputs for enrollment * }); * }); * }); */ fetchCapabilities( options: { card: any } | { hostedFields: HostedFields }, callback: callback, ): void; fetchCapabilities( options: { card: any } | { hostedFields: HostedFields }, ): Promise; /** * Enrolls a UnionPay card. Use {@link UnionPay#fetchCapabilities|fetchCapabilities} to determine if the SMS enrollment * process is required. * @example With raw card data * unionpayInstance.enroll({ * card: { * number: '4111111111111111', * expirationMonth: '12', * expirationYear: '2038' * }, * mobile: { * countryCode: '62', * number: '111111111111' * } * }, function (enrollErr, response) { * if (enrollErr) { * console.error(enrollErr); * return; * } * * if (response.smsCodeRequired) { * // If smsCodeRequired, wait for SMS auth code from customer * // Then use response.enrollmentId during {@link UnionPay#tokenize} * } else { * // SMS code is not required from the user. * // {@link UnionPay#tokenize} can be called immediately * }); * @example With Hosted Fields * unionpayInstance.enroll({ * hostedFields: hostedFields, * mobile: { * countryCode: '62', * number: '111111111111' * } * }, function (enrollErr, response) { * if (enrollErr) { * console.error(enrollErr); * return; * } * * if (response.smsCodeRequired) { * // If smsCodeRequired, wait for SMS auth code from customer * // Then use response.enrollmentId during {@link UnionPay#tokenize} * } else { * // SMS code is not required from the user. * // {@link UnionPay#tokenize} can be called immediately * } * }); */ enroll( options: { card: any; mobile: any } | { hostedFields: HostedFields; mobile: any }, callback: callback, ): void; enroll( options: { card: any; mobile: any } | { hostedFields: HostedFields; mobile: any }, ): Promise; /** * Tokenizes a UnionPay card and returns a nonce payload. * @example With raw card data * unionpayInstance.tokenize({ * card: { * number: '4111111111111111', * expirationMonth: '12', * expirationYear: '2038', * cvv: '123' * }, * enrollmentId: enrollResponse.enrollmentId, // Returned from enroll * smsCode: '11111' // Received by customer's phone, if SMS enrollment was required. Otherwise it should be omitted * }, function (tokenizeErr, response) { * if (tokenizeErr) { * console.error(tokenizeErr); * return; * } * * // Send response.nonce to your server * }); * @example With Hosted Fields * unionpayInstance.tokenize({ * hostedFields: hostedFieldsInstance, * enrollmentId: enrollResponse.enrollmentId, // Returned from enroll * smsCode: '11111' // Received by customer's phone, if SMS enrollment was required. Otherwise it should be omitted * }, function (tokenizeErr, response) { * if (tokenizeErr) { * console.error(tokenizeErr); * return; * } * * // Send response.nonce to your server * }); */ tokenize( options: | { card: any; enrollmentId: string; smsCode: string } | { hostedFields: HostedFields; enrollmentId: string; smsCode: string }, callback: callback, ): void; tokenize( options: | { card: any; enrollmentId: string; smsCode: string } | { hostedFields: HostedFields; enrollmentId: string; smsCode: string; }, ): Promise; /** * Cleanly tear down anything set up by {@link module:braintree-web/unionpay.create|create}. * This only needs to be called when using UnionPay with Hosted Fields. * @example * unionpayInstance.teardown(function (teardownErr) { * if (teardownErr) { * console.error('Could not tear down UnionPay.'); * } else { * console.log('UnionPay has been torn down.'); * } * }); */ teardown(callback?: callback): void; } /** * braintree.unionpay.create({ client: clientInstance }, function (createErr, unionpayInstance) { * if (createErr) { * console.error(createErr); * return; * } * // ... * }); */ export function create(options: { client: Client }): Promise; export function create(options: { client: Client }, callback: callback): void;