///
import { Client } from "./client";
import { callback } from "./core";
export interface PayPalCheckoutCreatePaymentOptions {
flow: paypal.FlowType;
intent?: paypal.Intent | undefined;
offerCredit?: boolean | undefined;
amount?: string | number | undefined;
currency?: string | undefined;
displayName?: string | undefined;
locale?: string | undefined;
vaultInitiatedCheckoutPaymentMethodToken?: string | undefined;
shippingOptions?: paypal.ShippingOption[] | undefined;
enableShippingAddress?: boolean | undefined;
shippingAddressOverride?: paypal.Address | undefined;
shippingAddressEditable?: boolean | undefined;
requestBillingAgreement?: boolean | undefined;
billingAgreementDescription?: string | undefined;
landingPageType?: string | undefined;
lineItems?: paypal.LineItem[] | undefined;
}
export interface PayPalCheckoutTokenizationOptions {
payerId: string;
paymentId?: string | undefined;
billingToken?: string | undefined;
vault?: boolean | undefined;
}
export interface PayPalCheckoutLoadPayPalSDKOptions {
/**
* By default, this will be the client id associated with the authorization used to create the
* Braintree component. When used in conjunction with passing authorization when creating the
* PayPal Checkout component, you can speed up the loading of the PayPal SDK.
*/
"client-id"?: string | undefined;
// tslint:disable:no-redundant-jsdoc
/**
* By default, the PayPal SDK defaults to an intent of capture. Since the default intent when
* calling createPayment is authorize, the PayPal SDK will be loaded with intent=authorize. If you
* wish to use a different intent when calling createPayment, make sure it matches here. If sale
* is used, it will be converted to capture for the PayPal SDK. If the vault: true param is used,
* no default intent will be passed.
*
* @default 'authorize'
*/
intent?: "authorize" | "capture" | "sale" | "tokenize" | undefined;
// tslint:disable:no-redundant-jsdoc
/**
* If a currency is passed in createPayment, it must match the currency passed here.
*
* @default 'USD'
*/
currency?: string | undefined;
/**
* Must be true when using flow: vault in createPayment.
*/
vault?: boolean | undefined;
// tslint:disable:no-redundant-jsdoc
/**
* By default, the Braintree SDK will only load the PayPal smart buttons component. If you would
* like to load just the messages component, pass messages. If you would like to load both, pass
* buttons,messages
*
* @default 'buttons'
*/
components?: "buttons" | "messages" | "buttons,messages" | undefined;
/**
* The data attributes to apply to the script. Any data attribute can be passed. A subset of the
* parameters are listed below. For a full list of data attributes, see the PayPal docs.
*/
dataAttributes?:
| {
/**
* CSP nonce used for rendering the button.
*/
"csp-nonce"?: string | undefined;
/**
* Client token used for identifying your buyers.
*/
"data-client-token"?: string | undefined;
/**
* Order ID used for optimizing the funding that displays.
*/
"data-order-id"?: string | undefined;
/**
* Log page type and interactions for the JavaScript SDK.
*/
"data-page-type"?: string | undefined;
/**
* Partner attribution ID used for revenue attribution.
*/
"data-partner-attribution-id"?: string | undefined;
}
| undefined;
/**
* Funding sources to disallow from showing in the checkout buttons.
* Do not use this query parameter to disable advanced credit and debit card payments.
* e.g. card, credit, bancontact
* The full list is available in the PayPal SDK docs.
*/
"disable-funding"?: string;
/**
* Funding sources to allow in the checkout buttons.
* e.g. venmo, paylater
* The full list is available in the PayPal SDK docs.
*/
"enable-funding"?: string;
/**
* The locale used to localize any components.
* PayPal recommends not setting this parameter, as the buyer's locale is automatically set by PayPal.
* e.g. en_US, fr_FR, de_DE
*/
locale?: string;
/**
* Enable debug mode for ease of debugging. Do not enable for production traffic.
*/
debug?: boolean;
/**
* Set to true if the transaction is completed on the PayPal review page or false if the amount
* captured changes after the buyer returns to your site. Not applicable for subscriptions.
* Important: If you're integrating with a PayPal API, make sure the commit value you pass
* in the API call matches the value you pass in the JavaScript call.
*/
commit?: boolean;
/**
* The buyer country. Available in Sandbox for testing.
*/
"buyer-country"?: string;
/**
* The date of integration. Used to ensure backwards compatibility.
* Format: YYYY-MM-DD
*/
"integration-date"?: string;
/**
* The merchant for whom you are facilitating a transaction.
*/
"merchant-id"?: string;
}
export interface PayPalCheckoutUpdatePaymentOptions {
/**
* This should be PayPal paymentId.
*/
paymentId: string;
/**
* The amount of the transaction, including the amount of the selected shipping option, and all line_items.
* Supports up to 2 decimal digits.
*/
amount: string | number;
/**
* The currency code of the amount, such as 'USD'. Required when using the Checkout flow.
*/
currency: string;
/**
* List of {@link paypal.ShippingOption|shipping options} offered by the payee or merchant to the payer to ship or pick up their items.
* @see {@link https://braintree.github.io/braintree-web/current/PayPalCheckout.html#~shippingOption}
*/
shippingOptions?: paypal.ShippingOption[];
/**
* The {@link paypal.LineItem|line items} for this transaction. It can include up to 249 line items.
* @see {@link https://braintree.github.io/braintree-web/current/PayPalCheckout.html#~lineItem}
*/
lineItems?: paypal.LineItem[];
/**
* Optional collection of amounts that break down the total into individual pieces.
*/
amountBreakdown?: {
/**
* Item amount
*/
itemTotal?: string;
/**
* Shipping amount
*/
shipping?: string;
/**
* Handling amount
*/
handling?: string;
/**
* Tax amount
*/
taxTotal?: string;
/**
* Insurance amount
*/
insurance?: string;
/**
* Shipping discount amount
*/
shippingDiscount?: string;
/**
* Discount amount
*/
discount?: string;
};
}
export interface PayPalCheckoutUpdatePaymentServerDataReturn {
authorization: {
error: string | null;
errorDescription: string | null;
processorResponseCode: string | null;
};
_httpStatus: number;
}
export interface PayPalCheckout {
/**
* Resolves when the PayPal SDK has been succesfully loaded onto the page.
*
* @link https://braintree.github.io/braintree-web/current/PayPalCheckout.html#loadPayPalSDK
*/
loadPayPalSDK(options?: PayPalCheckoutLoadPayPalSDKOptions): Promise;
loadPayPalSDK(options?: PayPalCheckoutLoadPayPalSDKOptions, callback?: callback): void;
/**
* Creates a PayPal payment ID or billing token using the given options. This is meant to be passed to PayPal's checkout.js library.
* When a {@link callback} is defined, the function returns undefined and invokes the callback with the id to be used with the checkout.js
* library. Otherwise, it returns a Promise that resolves with the id.
* `authorize` - Submits the transaction for authorization but not settlement.
* `order` - Validates the transaction without an authorization (i.e. without holding funds).
* Useful for authorizing and capturing funds up to 90 days after the order has been placed. Only available for Checkout flow.
* `capture` - Payment will be immediately submitted for settlement upon creating a transaction.
* `sale` can be used as an alias for this value.
* Supported locales are:
* `da_DK`,
* `de_DE`,
* `en_AU`,
* `en_GB`,
* `en_US`,
* `es_ES`,
* `fr_CA`,
* `fr_FR`,
* `id_ID`,
* `it_IT`,
* `ja_JP`,
* `ko_KR`,
* `nl_NL`,
* `no_NO`,
* `pl_PL`,
* `pt_BR`,
* `pt_PT`,
* `ru_RU`,
* `sv_SE`,
* `th_TH`,
* `zh_CN`,
* `zh_HK`,
* and `zh_TW`.
* * * `login` - A PayPal account login page is used.
* * `billing` - A non-PayPal account landing page is used.
* // this paypal object is created by checkout.js
* // see https://github.com/paypal/paypal-checkout
* paypal.Buttons({
* createOrder: function () {
* // when createPayment resolves, it is automatically passed to checkout.js
* return paypalCheckoutInstance.createPayment({
* flow: 'checkout',
* amount: '10.00',
* currency: 'USD',
* intent: 'capture' // this value must either be `capture` or match the intent passed into the PayPal SDK intent query parameter
* });
* },
* // Add other options, e.g. onApproved, onCancel, onError
* }).render('#paypal-button');
*
* @example
* // shippingOptions are passed to createPayment. You can review the result from onAuthorize to determine which shipping option id was selected.
* ```javascript
* braintree.client.create({
* authorization: 'authorization'
* }).then(function (clientInstance) {
* return braintree.paypalCheckout.create({
* client: clientInstance
* });
* }).then(function (paypalCheckoutInstance) {
* return paypal.Button.render({
* env: 'production'
*
* payment: function () {
* return paypalCheckoutInstance.createPayment({
* flow: 'checkout',
* amount: '10.00',
* currency: 'USD',
* shippingOptions: [
* {
* id: 'UUID-9',
* type: 'PICKUP',
* label: 'Store Location Five',
* selected: true,
* amount: {
* value: '1.00',
* currency: 'USD'
* }
* },
* {
* id: 'shipping-speed-fast',
* type: 'SHIPPING',
* label: 'Fast Shipping',
* selected: false,
* amount: {
* value: '1.00',
* currency: 'USD'
* }
* },
* {
* id: 'shipping-speed-slow',
* type: 'SHIPPING',
* label: 'Slow Shipping',
* selected: false,
* amount: {
* value: '1.00',
* currency: 'USD'
* }
* }
* ]
* });
* },
*
* onAuthorize: function (data, actions) {
* return paypalCheckoutInstance.tokenizePayment(data).then(function (payload) {
* // Submit payload.nonce to your server
* });
* }
* }, '#paypal-button');
* }).catch(function (err) {
* console.error('Error!', err);
* });
* ```
*/
createPayment(options: PayPalCheckoutCreatePaymentOptions, callback?: callback): Promise;
/**
* Tokenizes the authorize data from PayPal's checkout.js library when completing a buyer approval flow.
* When a {@link callback} is defined, invokes the callback with {@link PayPalCheckout~tokenizePayload|tokenizePayload} and returns undefined.
* Otherwise, returns a Promise that resolves with a {@link PayPalCheckout~tokenizePayload|tokenizePayload}.
* @example Opt out of auto-vaulting behavior
* // create the paypalCheckoutInstance with a client token generated with a customer id
* paypal.Buttons({
* createBillingAgreement: function () {
* return paypalCheckoutInstance.createPayment({
* flow: 'vault'
* // your other createPayment options here
* });
* },
* onApproved: function (data) {
* data.vault = false;
*
* return paypalCheckoutInstance.tokenizePayment(data);
* },
* // Add other options, e.g. onCancel, onError
* }).render('#paypal-button');
*/
tokenizePayment(tokenizeOptions: PayPalCheckoutTokenizationOptions): Promise;
tokenizePayment(tokenizeOptions: PayPalCheckoutTokenizationOptions, callback?: callback): void;
/**
* Resolves with the PayPal client id to be used when loading the PayPal SDK. * @example
* paypalCheckoutInstance.getClientId().then(function (id) {
* var script = document.createElement('script');
*
* script.src = 'https://www.paypal.com/sdk/js?client-id=' + id;
* script.onload = function () {
* // setup the PayPal SDK
* };
*
* document.body.appendChild(script);
* });
*/
getClientId(): Promise;
getClientId(callback: (id: string) => void): void;
/**
* Initializes the PayPal checkout flow with a payment method nonce that represents a vaulted PayPal account.
* When a {@link callback} is defined, the function returns undefined and invokes the callback with the id to be used with the checkout.js library.
* Otherwise, it returns a Promise that resolves with the id.
* `flow` cannot be set (will always be `'checkout'`)
* `amount`, `currency`, and `vaultInitiatedCheckoutPaymentMethodToken` are required instead of optional
* * Additional configuration is available (listed below)
* @example
* paypalCheckoutInstance.startVaultInitiatedCheckout({
* vaultInitiatedCheckoutPaymentMethodToken: 'nonce-that-represents-a-vaulted-paypal-account',
* amount: '10.00',
* currency: 'USD'
* }).then(function (payload) {
* // send payload.nonce to your server
* }).catch(function (err) {
* if (err.code === 'PAYPAL_POPUP_CLOSED') {
* // indicates that customer canceled by
* // manually closing the PayPal popup
* }
*
* // handle other errors
* });
*/
startVaultInitiatedCheckout(options: { optOutOfModalBackdrop: boolean }): Promise;
startVaultInitiatedCheckout(options: { optOutOfModalBackdrop: boolean }, callback: callback): void;
/**
* Cleanly tear down anything set up by {@link module:braintree-web/paypal-checkout.create|create}.
* @example
* paypalCheckoutInstance.teardown();
* @example With callback
* paypalCheckoutInstance.teardown(function () {
* // teardown is complete
* });
*/
teardown(callback: () => void): void;
teardown(): Promise;
/**
* Use this function to update {@link paypal.LineItem|line items} and/or {@link paypal.ShippingOption|shipping options} associated with a
* PayPalCheckout flow (paymentId). When a {@link callback} is defined, this function returns undefined and invokes the callback.
* The second callback argument, `data`, is the returned server data. If no callback is provided, `updatePayment` returns a
* promise that resolves with the server data.
* @example
* // this paypal object is created by the PayPal JS SDK
* // see https://github.com/paypal/paypal-checkout-components
* paypal.Buttons({
* createOrder: function () {
* // when createPayment resolves, it is automatically passed to the PayPal JS SDK
* return paypalCheckoutInstance.createPayment({
* //
* });
* },
* onShippingChange: function (data) {
* // Examine data and determine if the payment needs to be updated.
* // when updatePayment resolves, it is automatically passed to the PayPal JS SDK
* return paypalCheckoutInstance.updatePayment({
* paymentId: data.paymentId,
* amount: '15.00',
* currency: 'USD',
* shippingOptions: [
* {
* id: 'shipping-speed-fast',
* type: 'SHIPPING',
* label: 'Fast Shipping',
* selected: true,
* amount: {
* value: '5.00',
* currency: 'USD'
* }
* },
* {
* id: 'shipping-speed-slow',
* type: 'SHIPPING',
* label: 'Slow Shipping',
* selected: false,
* amount: {
* value: '1.00',
* currency: 'USD'
* }
* }
* ]
* });
* }
* // Add other options, e.g. onApproved, onCancel, onError
* }).render('#paypal-button');
*/
updatePayment(options: PayPalCheckoutUpdatePaymentOptions): Promise;
updatePayment(options: PayPalCheckoutUpdatePaymentOptions, callback?: callback): void;
}
/**
* @description There are two ways to integrate the PayPal Checkout component.
* See the [PayPal Checkout constructor documentation](PayPalCheckout.html#PayPalCheckout) for more information and examples.
* @example
* braintree.client.create({
* authorization: 'authorization'
* }).then(function (clientInstance) {
* return braintree.paypalCheckout.create({
* client: clientInstance
* });
* }).then(function (paypalCheckoutInstance) {
* // set up checkout.js
* }).catch(function (err) {
* console.error('Error!', err);
* });
*/
export function create(options: {
client?: Client | undefined;
authorization?: string | undefined;
merchantAccountId?: string | undefined;
}): Promise;
export function create(
options: {
client?: Client | undefined;
authorization?: string | undefined;
merchantAccountId?: string | undefined;
},
callback?: callback,
): void;