Guide for Mobile SDK
Sadad SDK for facilitating integration with Sadad REST APIs into your mobile app.
Flutter SDK
Flutter SDK: https://pub.dev/packages/sadadpay_flutter
SDK Overview: https://github.com/Sadadkw/sadad-flutter-sdk
Download SDK: https://github.com/Sadadkw/sadad-flutter-sdk.git
Features
- Generate Refresh Token
- Generate Access Token
- Create an Invoice
- Get an Invoice by id
- Provide a Web View for Payment Process
Installation
Use this package as a library
Run this command:
With Flutter:
$flutter pub add sadadpay_flutter
This will add a line like this to your package's pubspec.yaml (and run an implicit flutter pub get):
dependencies:
sadadpay_flutter: ^0.0.3
Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.
Import it, Now in your Dart code, you can use:
import 'package:sadadpay_flutter/config/env.dart';
import 'package:sadadpay_flutter/interceptors/authorization_interceptor.dart';
import 'package:sadadpay_flutter/sadadpay.dart';
import 'package:sadadpay_flutter/service/payment_status.dart';
import 'package:sadadpay_flutter/service/sadad_service.dart';
import 'package:sadadpay_flutter/widgets/web_view.dart';
Code Snapshot Details #
To generate refresh token using clientkey and clientsecret, you can use generateRefreshToken method which is return json object.
sadadPay.generateRefreshToken(clientKey: \_clientKey, clientSecret: \_clientSecret).then(
(value) => \_refreshToken = value['response']['refreshToken']);
To generate access token, you can use generateAccessToken method which is return json object.
sadadPay.generateAccessToken(refreshToken: \_refreshToken).then(
(value) => \_accessToken = value['response']['accessToken']);
To create invoice, you can use createInvoice method which is return json object.
final invoices = {
"Invoices": \[
{
"amount": "10",
"customer_Name": "customer",
"customer_Email": "[[email protected]](mailto:[email protected])",
"lang": "en",
"currency_Code": "KWD",
"items": [
{"name": "x", "quantity": 2, "amount": 2},
{"name": "y", "quantity": 6, "amount": 1}
]
}
]
};
sadadPay.createInvoice(invoices: invoices, token: \_accessToken).then(
(value) => setState(() => \_invoiceId = value['response']['invoiceId']));
To get invoice by id, you can use getInvoice method which is return json object.
sadadPay.getInvoice(invoiceId: \_invoiceId, token: \_accessToken).then(
(value) => setState(() => \_invoiceKey = value['response']['key']));
To use sadad web view, use can use SadadWebView which is return widget.
@override
Widget build(BuildContext context) {
if (\_invoiceKey != '') {
return SadadWebView(
invoiceKey: \_invoiceKey,
onSuccess: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const SuccessPage()),
);
},
onFail: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const FailPage()),
);
},
appBar: AppBar(
title: const Text('App Bar'),
),
);
} else {
return const CircularProgressIndicator();
}
}
}
Full Example
import 'package:flutter/material.dart';
import 'package:sadadpay_flutter/config/env.dart';
import 'package:sadadpay_flutter/sadadpay.dart';
import 'package:sadadpay_flutter/widgets/web_view.dart';
void main() {
runApp(const SadadDemo());
}
class SadadDemo extends StatelessWidget {
const SadadDemo({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Sadad Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Sadad Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => \_MyHomePageState();
}
class \_MyHomePageState extends State<MyHomePage> {
// set your clientKey and clientSecret, They must be stored in a safe place such as database.
final String \_clientKey = "xxxxxxxxxxxx";
final String \_clientSecret = "xxxxxxxxxxxx";
late String \_refreshToken;
late String \_accessToken;
late String \_invoiceId;
late String \_invoiceKey = "";
final invoices = {
"Invoices": \[
{
"amount": "10",
"customer_Name": "customer",
"customer_Email": "[[email protected]](mailto:[email protected])",
"lang": "en",
"currency_Code": "KWD",
"items": [
{"name": "x", "quantity": 2, "amount": 2},
{"name": "y", "quantity": 6, "amount": 1}
]
}
]
};
SadadPay sadadPay = SadadPay(env: Environment.dev);
Future<void> initPaymentProcess() async {
await sadadPay.generateRefreshToken(clientKey: \_clientKey, clientSecret: \_clientSecret).then(
(value) => \_refreshToken = value['response']['refreshToken']);
await sadadPay.generateAccessToken(refreshToken: \_refreshToken).then(
(value) => \_accessToken = value['response']['accessToken']);
await sadadPay.createInvoice(invoices: invoices, token: \_accessToken).then(
(value) => setState(() => \_invoiceId = value['response']['invoiceId']));
await sadadPay.getInvoice(invoiceId: \_invoiceId, token: \_accessToken).then(
(value) => setState(() => \_invoiceKey = value['response']['key']));
}
@override
initState() {
super.initState();
initPaymentProcess();
}
@override
Widget build(BuildContext context) {
if (\_invoiceKey != '') {
return SadadWebView(
invoiceKey: \_invoiceKey,
onSuccess: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const SuccessPage()),
);
},
onFail: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const FailPage()),
);
},
appBar: AppBar(
title: const Text('App Bar'),
),
);
} else {
return const CircularProgressIndicator();
}
}
}
class SuccessPage extends StatelessWidget {
const SuccessPage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('App Bar'),
),
body: const Center(
child: Text('On Success page'),
),
);
}
}
class FailPage extends StatelessWidget {
const FailPage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('App Bar'),
),
body: const Center(
child: Text('On Fail page'),
),
);
}
}