go_sell_sdk_flutter
Android 및 iOS용 goSellSDK 라이브러리의 Flutter 플러그인 호환 버전입니다.
goSellSDK용 Flutter 플러그인
아래는 영문 원문 스냅샷입니다. 최신 내용은 GitHub에서 확인하세요.
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)
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
dependencies:
go_sell_sdk_flutter: ^2.4.11
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.
/**
* Configure App. (You must get those keys from tap)
*/
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: "", // customer id is important to retrieve cards saved for this customer
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,
),
],
// List of taxes
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",
),
],
// List of shipping
shippings: [
Shipping(
name: "shipping 1",
amount: 100,
description: "shipping description 1",
),
Shipping(
name: "shipping 2",
amount: 100,
description: "shipping description 2",
),
],
// Post URL
postURL: "https://tap.company",
// Payment description
paymentDescription: "paymentDescription",
// Payment Metadata
paymentMetaData: {
"a": "a meta",
"b": "b meta",
},
// Payment Reference
paymentReference: Reference(
acquirer: "acquirer",
gateway: "gateway",
payment: "payment",
track: "track",
transaction: "trans_910101",
order: "order_262625"),
// payment Descriptor
paymentStatementDescriptor: "paymentStatementDescriptor",
// Save Card Switch
isUserAllowedToSaveCard: true,
// Enable/Disable 3DSecure
isRequires3DSecure: false,
// Receipt SMS/Email
receipt: Receipt(true, false),
// Authorize Action [Capture - Void]
authorizeAction: AuthorizeAction(
type: AuthorizeActionType.CAPTURE, timeInHours: 10),
// Destinations
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")
],
),
// merchant id
merchantID: "",
// Allowed cards
allowedCadTypes: CardType.ALL,
applePayMerchantID: "merchant.applePayMerchantID",
allowsToSaveSameCardMoreThanOnce: false,
// pass the card holder name to the SDK
cardHolderName: "Card Holder NAME",
// disable changing the card holder name by the user
allowsToEditCardHolderName: false,
// Supported payment methods List supportedPaymentMethods: ["knet", "visa"],
/// SDK Appearance Mode appearanceMode: SDKAppearanceMode.fullscreen,
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:
Purchase
dart TransactionMode.PURCHASE
Normal customer charge.
Authorize
dart TransactionMode.AUTHORIZE_CAPTURE
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.
Save Card
dart TransactionMode.SAVE_CARD
Use this mode to save the card of the customer with Tap and use it later.
Tokenize Card
dart TransactionMode.TOKENIZE_CARD
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(
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.
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(
name: "shipping",
amount: 150,
description: "shipping description",
)
Tax(
amount: Amount(
type: "F",
value: 10,
minimumFee: 1,
maximumFee: 10,
),
name: "tax1",
description: "tax description",
),
Reference(
acquirer: "acquirer",
gateway: "gateway",
payment: "payment",
track: "track",
transaction: "trans_910101",
order: "order_262625",
),
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
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, // Show setup button if wallet not configured
sdkMode: SDKMode.SANDBOX,
paymentType: PaymentType.ALL,
);
Behavior:
enableApplePaySetup: true → The Apple Pay setup button will be displayed if the wallet is not configured on the deviceenableApplePaySetup: false (default) → The Apple Pay setup button will be hiddenThis 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
의존성 목록 4 개
{"sdk":"flutter"}^2.0.2{"sdk":"flutter"}^2.0.0사용 목적에 따라 검색하고 개발 활동을 비교한 뒤 원본 저장소에서 요구 사항을 확인하세요.
“A repository is the most basic element of GitHub.”
GitHub Docs — About repositories ↗