Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.
go_sell_sdk_flutter
Flutter plugin compatible version of goSellSDK library for both Android and iOS that fully covers payment/authorization/card saving/card tokenization process inside your Android application.
Original SDKS
-
Android (https://github.com/Tap-Payments/goSellSDK-Android)
-
AndroidX (https://github.com/Tap-Payments/goSellSDK-AndroidX)
-
iOS (https://github.com/Tap-Payments/goSellSDK-ios)
Getting Started
Table of Contents
-
Requirements
-
Installation
-
Installation with pubspec.yaml
-
Usage
-
Configure Your App
-
Configure SDK Session
-
Transaction Modes
-
Customer
-
Shipping
-
Tax
-
Reference
-
Payment Item
-
Configure Payment Type
-
Use Tap Pay Button
-
Handle SDK Result
-
Apple Pay Setup
-
Google Pay Setup
Requirements
To use the SDK the following requirements must be met:
-
Visual Studio - InteliJ Idea
-
Dart 2.7.1 or newer
-
Flutter: >=3.0.0 or newer
-
iOS 11 or later
-
XCode 12 or later
Installation
Include goSellSDK plugin as a dependency in your pubspec.yaml
dependencies:
go_sell_sdk_flutter: ^2.4.11
Configure your app
goSellSDK should be set up. To set it up, add the following lines of code somewhere in your project and make sure they will be called before any usage of goSellSDK.
GoSellSdkFlutter.configureApp(
bundleId: Platform.isAndroid? "ANDROID-PACKAGE-NAME" : "IOS-APP-ID",
productionSecreteKey: Platform.isAndroid? "Android-Live-KEY" : "iOS-Live-KEY",
sandBoxsecretKey: Platform.isAndroid?"Android-SANDBOX-KEY" : "iOS-SANDBOX-KEY",
lang: "en",
);
Configure SDK Session Example
Future<void> setupSDKSession() async {
try {
GoSellSdkFlutter.sessionConfigurations(
trxMode: TransactionMode.PURCHASE,
transactionCurrency: "kwd",
amount: '100',
customer: Customer(
customerId: "",
email: "test@test.com",
isdNumber: "965",
number: "00000000",
firstName: "test",
middleName: "test",
lastName: "test",
metaData: null,
),
paymentItems: <PaymentItem>[
PaymentItem(
name: "item1",
amountPerUnit: 1,
quantity: Quantity(value: 1),
discount: {
"type": "F",
"value": 10,
"maximum_fee": 10,
"minimum_fee": 1
},
description: "Item 1 Apple",
taxes: [
Tax(
amount: Amount(
type: "F",
value: 10,
minimum_fee: 1,
maximum_fee: 10,
),
name: "tax1",
description: "tax description",
)
],
totalAmount: 100,
),
],
taxes: [
Tax(
amount: Amount(
type: "F",
value: 10,
minimum_fee: 1,
maximum_fee: 10,
),
name: "tax1",
description: "tax description",
),
Tax(
amount: Amount(
type: "F",
value: 10,
minimum_fee: 1,
maximum_fee: 10,
),
name: "tax1",
description: "tax description",
),
],
shippings: [
Shipping(
name: "shipping 1",
amount: 100,
description: "shipping description 1",
),
Shipping(
name: "shipping 2",
amount: 100,
description: "shipping description 2",
),
],
postURL: "https://tap.company",
paymentDescription: "paymentDescription",
paymentMetaData: {
"a": "a meta",
"b": "b meta",
},
paymentReference: Reference(
acquirer: "acquirer",
gateway: "gateway",
payment: "payment",
track: "track",
transaction: "trans_910101",
order: "order_262625"),
paymentStatementDescriptor: "paymentStatementDescriptor",
isUserAllowedToSaveCard: true,
isRequires3DSecure: false,
receipt: Receipt(true, false),
authorizeAction: AuthorizeAction(
type: AuthorizeActionType.CAPTURE, timeInHours: 10),
destinations:Destinations(
amount: 100,
currency: 'kwd',
count: 2,
destinationlist: [
Destination(
id: "",
amount: 100,
currency: "kwd",
description: "des",
reference: "ref_121299"),
Destination(
id: "",
amount: 100,
currency: "kwd",
description: "des",
reference: "ref_22444444")
],
),
merchantID: "",
allowedCadTypes: CardType.ALL,
applePayMerchantID: "merchant.applePayMerchantID",
allowsToSaveSameCardMoreThanOnce: false,
cardHolderName: "Card Holder NAME",
allowsToEditCardHolderName: false,
paymentType: PaymentType.ALL,
sdkMode: SDKMode.Sandbox,
);
} on PlatformException {
}
Transaction Modes
trxMode: TransactionMode.PURCHASE
You can set the transaction mode into one of the following modes:
Normal customer charge.
Only authorization is happening. You should specify an action after successful authorization: either capture the amount or void the charge after specific period of time.
Use this mode to save the card of the customer with Tap and use it later.
Use this mode if you are willing to perform the charging/authorization manually. The purpose of this mode is only to collect and tokenize card information details of your customer if you don't have PCI compliance certificate but willing to process the payment manually using our services.
Customer
- New Customer (First time to pay using goSell SDK)
Customer(
customerId: "",
email: "test@test.com",
isdNumber: "965",
number: "00000000",
firstName: "test",
middleName: "test",
lastName: "test",
metaData: null,
)
After the first transaction success, you receive the customerId in the response. Save it to be used in the next transaction.
- Existed Customer (paid before using goSell SDK)
You need to set the customerId only and you can see the customer saved cards if the user has.
Customer(
customerId: "cus_smdnd3346nd3dks3jd9drd7d",
email: "",
isdNumber: "965",
number: "00000000",
firstName: "",
middleName: "",
lastName: "",
metaData: null
)
Please note that goSell SDK using the customerId only if it's not Empty ('').
Shipping
Shipping(
name: "shipping",
amount: 150,
description: "shipping description",
)
Tax
Tax(
amount: Amount(
type: "F",
value: 10,
minimumFee: 1,
maximumFee: 10,
),
name: "tax1",
description: "tax description",
),
Reference
Reference(
acquirer: "acquirer",
gateway: "gateway",
payment: "payment",
track: "track",
transaction: "trans_910101",
order: "order_262625",
),
Payment Item
PaymentItem(
name: "item1",
amountPerUnit: 1,
quantity: Quantity(value: 1),
discount: {
"type": "F",
"value": 10,
"maximum_fee": 10,
"minimum_fee": 1
},
description: "Item 1 Apple",
taxes: [
Tax(
amount: Amount(
type: "F",
value: 10,
minimumFee: 1,
maximumFee: 10,
),
name: "tax1",
description: "tax description",
)
],
totalAmount: 100,
),
Configure Payment Type
paymentType: PaymentType.ALL
| Payment Type | Description |
| ------------- | ------------- |
| ALL | Shows all the available payment methods |
| CARD | Shows only cards payment methods |
| DEVICE | Shows payment methods depending on the device, for iOS it shows ApplePay only |
Use Tap Pay Button
Positioned(
bottom: Platform.isIOS ? 0 : 10,
left: 18,
right: 18,
child: SizedBox(
height: 45,
child: ElevatedButton(
clipBehavior: Clip.hardEdge,
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(_buttonColor),
shape: MaterialStateProperty.all(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30),
),
),
),
onPressed: startSDK,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
width: 25,
height: 25,
child: AwesomeLoader(
outerColor: Colors.white,
innerColor: Colors.white,
strokeWidth: 3.0,
controller: loaderController,
),
),
Spacer(),
Text(
'PAY',
style: TextStyle(
color: Colors.white,
fontSize: 16.0,
),
),
Spacer(),
Icon(
Icons.lock_outline,
color: Colors.white,
),
],
),
),
),
),
Handle SDK Result
tapSDKResult = await GoSellSdkFlutter.startPaymentSDK;
setState(() {
switch (tapSDKResult['sdk_result']) {
case "SUCCESS":
sdkStatus = "SUCCESS";
handleSDKResult();
break;
case "FAILED":
sdkStatus = "FAILED";
handleSDKResult();
break;
case "SDK_ERROR":
sdkErrorCode = tapSDKResult['sdk_error_code'].toString();
sdkErrorMessage = tapSDKResult['sdk_error_message'];
sdkErrorDescription = tapSDKResult['sdk_error_description'];
break;
case "NOT_IMPLEMENTED":
sdkStatus = "NOT_IMPLEMENTED";
break;
}
});
void handleSDKResult() {
switch (tapSDKResult['trx_mode']) {
case "CHARGE":
case "AUTHORIZE":
case "SAVE_CARD":
extractSDKResultKeysAndValues();
break;
case "TOKENIZE":
token : =tapSDKResult['token'];
token_currency =tapSDKResult['token_currency'];
card_first_six =tapSDKResult['card_first_six'];
card_last_four =tapSDKResult['card_last_four'];
card_object =tapSDKResult['card_object'];
card_exp_month =tapSDKResult['card_exp_month'];
card_exp_year =tapSDKResult['card_exp_year'];
break;
}
}
void extractSDKResultKeysAndValues() {
id = tapSDKResult['charge_id'];
description = tapSDKResult['description'];
message = tapSDKResult['message'];
card_first_six = tapSDKResult['card_first_six'];
card_last_four = tapSDKResult['card_last_four'];
card_object = tapSDKResult['card_object'];
card_brand = tapSDKResult['card_brand'];
card_exp_month = tapSDKResult['card_exp_month'];
card_exp_year = tapSDKResult['card_exp_year'];
acquirer_id = tapSDKResult['acquirer_id'];
acquirer_response_code = tapSDKResult['acquirer_response_code'];
acquirer_response_message = tapSDKResult['acquirer_response_message'];
source_id = tapSDKResult['source_id'];
source_channel = tapSDKResult['source_channel'];
source_object = tapSDKResult['source_object'];
source_payment_type = tapSDKResult['source_payment_type'];
responseID = tapSDKResult['charge_id'];
}
Apple pay setup
Follow the steps shared in the following link to setup apple pay:
https://github.com/Tap-Payments/goSellSDK-ios#apple-pay
Enable Apple Pay Setup Button
The SDK now supports the enableApplePaySetup parameter which allows you to show the Apple Pay setup button to users who haven't configured Apple Pay on their device.
GoSellSdkFlutter.startPaymentProcess(
merchantID: "YOUR_MERCHANT_ID",
allowedCadTypes: CardType.ALL,
applePayMerchantID: "merchant.com.tap.applepay",
enableApplePaySetup: true,
sdkMode: SDKMode.SANDBOX,
paymentType: PaymentType.ALL,
);
Behavior:
- When
enableApplePaySetup: true → The Apple Pay setup button will be displayed if the wallet is not configured on the device
- When
enableApplePaySetup: false (default) → The Apple Pay setup button will be hidden
This feature enables users to easily configure Apple Pay during the payment process if they haven't already done so.
Google pay setup
Follow the steps shared in the following link to setup google pay:
https://github.com/Tap-Payments/goSellSDK-AndroidX?tab=readme-ov-file#google-pay