feat(paytabs): add plugin (#3678)

* add paytabs plugin wrapper

* added comments and examples
This commit is contained in:
Mohamed Adly 2021-06-29 13:43:09 +02:00 committed by GitHub
parent 0dcbace822
commit 9dd719bb07
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -0,0 +1,482 @@
import { Injectable } from '@angular/core';
import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
/**
* PaymentSDKConfiguration: payment request configuration
*/
export interface PaymentSDKConfiguration {
/**
* merchant profile id
*/
profileID: string;
/**
* merchant server key
*/
serverKey: string;
/**
* merchant client key
*/
clientKey: string;
/**
* transaction type: refer to TransactionType enum
*/
transactionType?: string;
/**
* transaction class: refer to TransactionClass enum
*/
transactionClass?: string;
/**
* order or cart id
*/
cartID: string;
/**
* payment currency
*/
currency: string;
/**
* amount
*/
amount: number;
/**
* order or cart description
*/
cartDescription: string;
/**
* user interface language code(en, ar, ..)
*/
languageCode?: string;
/**
* validate shipping info
*/
forceShippingInfo?: boolean;
/**
* validate billing info
*/
showBillingInfo?: boolean;
/**
* handle missing shipping info by showing shipping info section
*/
showShippingInfo?: boolean;
/**
* configured billing details
*/
billingDetails?: PaymentSDKBillingDetails;
/**
* configured shipping details
*/
shippingDetails?: PaymentSDKShippingDetails;
/**
* merchant country code
*/
merchantCountryCode: string;
/**
* title of the screen
*/
screenTitle?: string;
/**
* merchant name
*/
merchantName?: string;
/**
* server ip
*/
serverIP?: string;
/**
* tokenise type: refer to TokeiseType enum
*/
tokeniseType?: string;
/**
* token format: refer to TokeiseFormat enum
*/
tokenFormat?: string;
/**
* option to hide or show card scanner button
*/
hideCardScanner?: string;
/**
* merchant apple pay bundle id
*/
merchantApplePayIdentifier?: string;
/**
* minize the vlaidation on apple pay billing and shipping info
*/
simplifyApplePayValidation?: string;
/**
* supported apple pay networks
*/
supportedApplePayNetworks?: [string];
/**
* returned token
*/
token?: string;
/**
* returned transaction reference
*/
transactionReference?: string;
/**
* samsung Token
*/
samsungToken?: string;
/**
* customized theme
*/
theme?: PaymentSDKTheme;
/**
* list of alternative payment methods
*/
alternativePaymentMethods?: [string];
}
/**
* PaymentSDKBillingDetails
*/
export interface PaymentSDKBillingDetails {
/**
* billing: customer name
*/
name?: string;
/**
* billing: customer email
*/
email?: string;
/**
* billing: customer phone
*/
phone?: string;
/**
* billing: customer address line
*/
addressLine?: string;
/**
* billing: customer city
*/
city?: string;
/**
* billing: customer state
*/
state?: string;
/**
* billing: customer country code
*/
countryCode?: string;
/**
* billing: customer zip code
*/
zip?: string;
}
/**
* PaymentSDKShippingDetails
*/
export interface PaymentSDKShippingDetails {
/**
* shipping: customer name
*/
name?: string;
/**
* shipping: customer email
*/
email?: string;
/**
* shipping: customer phone
*/
phone?: string;
/**
* shipping: customer address line
*/
addressLine?: string;
/**
* shipping: customer city
*/
city?: string;
/**
* shipping: customer state
*/
state?: string;
/**
* shipping: customer country code
*/
countryCode?: string;
/**
* shipping: customer zip code
*/
zip?: string;
}
/**
* PaymentSDKTheme
*/
export interface PaymentSDKTheme {
/**
* theme: primary color
*/
primaryColor?: string;
/**
* theme: primary font color
*/
primaryFontColor?: string;
/**
* theme: primary font
*/
primaryFont?: string;
/**
* theme: secondary color
*/
secondaryColor?: string;
/**
* theme: secondary font color
*/
secondaryFontColor?: string;
/**
* theme: secondary font
*/
secondaryFont?: string;
/**
* theme: stroke color
*/
strokeColor?: string;
/**
* theme: primary color
*/
strokeThinckness?: number;
/**
* theme: input corner radius
*/
inputsCornerRadius?: number;
/**
* theme: button color
*/
buttonColor?: string;
/**
* theme: button font color
*/
buttonFontColor?: string;
/**
* theme: button font
*/
buttonFont?: string;
/**
* theme: title font color
*/
titleFontColor?: string;
/**
* theme: title font
*/
titleFont?: string;
/**
* theme: background color
*/
backgroundColor?: string;
/**
* theme: placeholder color
*/
placeholderColor?: string;
}
/**
* TokeniseType: define the behaviour of of saving card option inside the SDKs.
*/
export enum TokeniseType {
/**
* none: tokenise is off
*/
none = "none",
/**
* merchantMandatory: tokenise is forced
*/
merchantMandatory = "merchantMandatory",
/**
* userMandatory: tokenise is forced as per user approval
*/
userMandatory = "userMandatory",
/**
* userOptinoal: tokenise if optional as per user approval
*/
userOptinoal = "userOptinoal",
}
/**
* TokeniseFromat: the returned token format
*/
export enum TokeniseFromat {
/**
* none: no format
*/
none = "1",
/**
* hex32: Hex with 32 length
*/
hex32 = "2",
/**
* alphaNum20: alpha numeric 20 length
*/
alphaNum20 = "3",
/**
* digit22: digits with 22 length
*/
digit22 = "3",
/**
* digit16: digits with 16 length
*/
digit16 = "5",
/**
* alphaNum32: alpha numeric 32 length
*/
alphaNum32 = "6"
}
/**
* TransactionType
*/
export enum TransactionType {
/**
* sale
*/
sale = "sale",
/**
* authorize / capture option
*/
authorize = "auth"
}
/**
* TransactionClass
*/
export enum TransactionClass {
/**
* ecom: default transaction
*/
ecom = "ecom",
/**
* recurring: recurring transaction
*/
recurring = "recur"
}
/**
* AlternativePaymentMethod
*/
export enum AlternativePaymentMethod {
/**
* unionpay: for supporting payment with unionpay
*/
unionPay = "unionpay",
/**
* stcpay: for supporting payment with stcpay
*/
stcPay = "stcpay",
/**
* valu: for supporting payment with valu
*/
valu = "valu",
/**
* meezaqr: for supporting payment with meezaqr
*/
meezaQR = "meezaqr",
/**
* omannet: for supporting payment with omannet
*/
omannet = "omannet",
/**
* knetcredit: for supporting payment with knetcredit
*/
knetCredit = "knetcredit",
/**
* knetdebit: for supporting payment with knetdebit
*/
knetDebit = "knetdebit",
/**
* fawry: for supporting payment with fawry
*/
fawry = "fawry"
}
/**
* @name PayTabs
* @description
* A plugin that allows you to use PayTabs's Native SDKs for Android and iOS.
*
* @usage
* ```typescript
* import { PayTabs } from '@ionic-native/paytabs/ngx';
*
* constructor(private paytabs: PayTabs) { }
*
* ...
* let billingDetails: PaymentSDKBillingDetails = {
* name: "John Smith",
* email: "email@domain.com",
* phone: "+201111111111",
* addressLine: "Address line",
* city: "Dubai",
* state: "Dubai",
* countryCode: "AE",
* zip: "1234"
* };
*
* var configuration: PaymentSDKConfiguration = {
* profileID: "*profile id*",
* serverKey: "*server key*",
* clientKey: "*cleint key*",
* cartID: "12345",
* currency: "USD",
* cartDescription: "Flowers",
* merchantCountryCode: "ae",
* merchantName: "Flowers Store",
* amount: 20,
* screenTitle:"Pay with Card",
* billingDetails: billingDetails
* }
*
* this.paytabs.startCardPayment(configuration)
* .then(result => console.log(result))
* .catch(error => console.error(error));
*
* this.paytabs.startApplePayPayment(configuration)
* .then(result => console.log(result))
* .catch(error => console.error(error));
*
* this.paytabs.startAlternativePaymentMethod(configuration)
* .then(result => console.log(result))
* .catch(error => console.error(error));
*
* ```
*/
@Plugin({
pluginName: 'PayTabs',
plugin: 'com.paytabs.cordova.plugin',
pluginRef: 'com.paytabs.cordova.plugin',
repo: 'https://github.com/paytabscom/paytabs-cordova',
platforms: ['Android', 'iOS'],
})
@Injectable()
export class PayTabs extends IonicNativePlugin {
/**
* Start Card Payment
* @param params {PaymentSDKConfiguration} payment request configuration
* @return {Promise<any>} returns a promise that resolves with transaction details, or rejects with an error
*/
@Cordova()
startCardPayment(configuration: PaymentSDKConfiguration): Promise<any> {
return;
}
/**
* Start ApplePay Payment
* @param params {PaymentSDKConfiguration} payment request configuration
* @return {Promise<any>} returns a promise that resolves with transaction details, or rejects with an error
*/
@Cordova()
startApplePayPayment(configuration: PaymentSDKConfiguration): Promise<any> {
return;
}
/**
* Start Alternative Payment Method
* @param params {PaymentSDKConfiguration} payment request configuration
* @return {Promise<any>} returns a promise that resolves with transaction details, or rejects with an error
*/
@Cordova()
startAlternativePaymentMethod(configuration: PaymentSDKConfiguration): Promise<any> {
return;
}
}