Flutter功能集成插件tamara_flutter_sdk的使用
Flutter功能集成插件tamara_flutter_sdk的使用
需求
- Dart SDK: “^3.5.0”
- Flutter: “>=3.24.0”
- Android:
minSdkVersion >= 21
compileSdk >= 34
- AGP(使用 Android Studio - Android Gradle 插件升级助手进行帮助)
- 支持 androidx(查看 AndroidX 迁移进行现有应用迁移)
- iOS 12.0+:
--ios-language swift
- Xcode 版本
>= 15.0
- MacOS 12+:
- Xcode 版本
>= 15.0
- Xcode 版本
- Windows:
- NuGet CLI 可用在您的 PATH 环境变量中
设置SDK
将 Tamara SDK 添加到你的项目中:
dependencies:
tamara_flutter_sdk: version
安装
运行以下命令安装 Tamara SDK:
-
清理并获取新库:
flutter clean flutter pub get
-
进入 iOS 文件夹并安装依赖库:
cd ios pod install
如何使用它
初始化
在使用之前初始化 Tamara SDK:
TamaraPayment.initialize(
AUTH_TOKEN,
API_URL,
NOTIFICATION_WEB_HOOK_URL,
PUBLISH_KEY,
NOTIFICATION_TOKEN,
isSandbox
);
创建并支付订单
在添加订单信息之前,通过调用此方法创建订单。referenceOrderId
是你的订单唯一标识。
TamaraPayment.createOrder(referenceOrderId, description);
必须的信息
设置客户信息:
TamaraPayment.setCustomerInfo(
firstName,
lastName,
phoneNumber,
email,
isFirstOrder
);
设置支付类型(可选,默认为 PAY_BY_INSTALMENTS):
TamaraPayment.setPaymentType(paymentType);
添加商品信息及其价格、税额和折扣:
TamaraPayment.addItem(
name,
referenceId,
sku,
type,
unitPrice,
taxAmount,
discountAmount,
quantity
);
设置配送地址和账单地址:
TamaraPayment.setShippingAddress(
firstName,
lastName,
phone,
addressLine1,
addressLine2,
country,
region,
city
);
TamaraPayment.setBillingAddress(
firstName,
lastName,
phone,
addressLine1,
addressLine2,
country,
region,
city
);
设置配送费用:
TamaraPayment.setShippingAmount(shippingFee);
设置折扣(可选):
TamaraPayment.setDiscount(discount, name);
设置分期付款:
TamaraPayment.setInstalments(instalments);
设置语言环境:
TamaraPayment.setLocale(locale);
设置订单号:
TamaraPayment.setOrderNumber(orderNumber);
设置订单过期时间(分钟):
TamaraPayment.setExpiresInMinutes(expiresInMinutes);
设置风险评估:
bool result = await TamaraPayment.setRiskAssessment(jsonData);
if (result) {
// json ok
}
设置额外数据:
TamaraPayment.setAdditionalData(jsonData);
添加自定义字段额外数据:
TamaraPayment.addCustomFieldsAdditionalData(jsonData);
跳转到 Tamara 支付页面:
TamaraPayment.paymentOrder();
获取订单详情
获取订单详情:
String result = await TamaraPayment.getOrderDetail(orderId);
final orderDetail = OrderDetail.fromJson(jsonDecode(result));
class OrderDetail {
BillingAddress? billingAddress;
CanceledAmount? canceledAmount;
CanceledAmount? capturedAmount;
Consumer? consumer;
String? countryCode;
String? createdAt;
String? description;
CanceledAmount? discountAmount;
List<Items>? items;
String? orderId;
String? orderNumber;
String? orderReferenceId;
CanceledAmount? paidAmount;
String? paymentType;
String? platform;
CanceledAmount? refundedAmount;
String? settlementStatus;
BillingAddress? shippingAddress;
CanceledAmount? shippingAmount;
String? status;
CanceledAmount? taxAmount;
CanceledAmount? totalAmount;
CanceledAmount? walletPrepaidAmount;
OrderDetail({
this.billingAddress,
this.canceledAmount,
this.capturedAmount,
this.consumer,
this.countryCode,
this.createdAt,
this.description,
this.discountAmount,
this.items,
this.orderId,
this.orderNumber,
this.orderReferenceId,
this.paidAmount,
this.paymentType,
this.platform,
this.refundedAmount,
this.settlementStatus,
this.shippingAddress,
this.shippingAmount,
this.status,
this.taxAmount,
this.totalAmount,
this.walletPrepaidAmount,
});
factory OrderDetail.fromJson(Map<String, dynamic> json) {
return OrderDetail(
billingAddress: json['billing_address'] != null
? BillingAddress.fromJson(json['billing_address'])
: null,
canceledAmount: json['canceled_amount'] != null
? CanceledAmount.fromJson(json['canceled_amount'])
: null,
capturedAmount: json['captured_amount'] != null
? CanceledAmount.fromJson(json['captured_amount'])
: null,
consumer: json['consumer'] != null
? Consumer.fromJson(json['consumer'])
: null,
countryCode: json['country_code'],
createdAt: json['created_at'],
description: json['description'],
discountAmount: json['discount_amount'] != null
? CanceledAmount.fromJson(json['discount_amount'])
: null,
items: json['items'] != null
? (json['items'] as List)
.map((i) => Items.fromJson(i))
.toList()
: null,
orderId: json['order_id'],
orderNumber: json['order_number'],
orderReferenceId: json['order_reference_id'],
paidAmount: json['paid_amount'] != null
? CanceledAmount.fromJson(json['paid_amount'])
: null,
paymentType: json['payment_type'],
platform: json['platform'],
refundedAmount: json['refunded_amount'] != null
? CanceledAmount.fromJson(json['refunded_amount'])
: null,
settlementStatus: json['settlement_status'],
shippingAddress: json['shipping_address'] != null
? BillingAddress.fromJson(json['shipping_address'])
: null,
shippingAmount: json['shipping_amount'] != null
? CanceledAmount.fromJson(json['shipping_amount'])
: null,
status: json['status'],
taxAmount: json['tax_amount'] != null
? CanceledAmount.fromJson(json['tax_amount'])
: null,
totalAmount: json['total_amount'] != null
? CanceledAmount.fromJson(json['total_amount'])
: null,
walletPrepaidAmount: json['wallet_prepaid_amount'] != null
? CanceledAmount.fromJson(json['wallet_prepaid_amount'])
: null,
);
}
}
授权订单
通过调用此方法授权订单。orderId
是必需参数。
String result = await TamaraPayment.authoriseOrder(orderId);
final authoriseOrder = AuthoriseOrder.fromJson(jsonDecode(result));
class AuthoriseOrder {
bool? autoCaptured;
String? orderExpiryTime;
String? orderId;
String? paymentType;
String? status;
AuthoriseOrder({
this.autoCaptured,
this.orderExpiryTime,
this.orderId,
this.paymentType,
this.status,
});
factory AuthoriseOrder.fromJson(Map<String, dynamic> json) {
return AuthoriseOrder(
autoCaptured: json['auto_captured'],
orderExpiryTime: json['order_expiry_time'],
orderId: json['order_id'],
paymentType: json['payment_type'],
status: json['status'],
);
}
}
取消订单
注意:需要先调用授权订单方法再取消订单。通过调用此方法取消订单。orderId
和 jsonData
是必需参数。
final cancelOrder = CancelOrder.fromJson(jsonDecode(result));
class CancelOrder {
// 请根据实际需求定义取消订单的类
}
更新订单参考
通过调用此方法更新订单参考。orderId
和 orderReference
是必需参数。
final orderReference = OrderReference.fromJson(jsonDecode(result));
class OrderReference {
String? message;
OrderReference({
this.message,
});
factory OrderReference.fromJson(Map<String, dynamic> json) {
return OrderReference(
message: json['message'],
);
}
}
捕获支付
注意:需要先调用授权订单方法再捕获支付。通过调用此方法捕获支付。orderId
和 jsonData
是必需参数。
TamaraSdk.getCapturePayment(jsonEncode(capture.toJson()));
class Capture {
String? orderId;
EAmount? totalAmount;
EAmount? taxAmount;
EAmount? shippingAmount;
EAmount? discountAmount;
List<Items>? items;
Capture({
this.orderId,
this.totalAmount,
this.taxAmount,
this.shippingAmount,
this.discountAmount,
this.items,
});
factory Capture.fromJson(Map<String, dynamic> json) {
return Capture(
orderId: json['order_id'],
totalAmount: EAmount.fromJson(json['total_amount']),
taxAmount: EAmount.fromJson(json['tax_amount']),
shippingAmount: EAmount.fromJson(json['shipping_amount']),
discountAmount: EAmount.fromJson(json['discount_amount']),
items: json['items'] != null
? (json['items'] as List)
.map((i) => Items.fromJson(i))
.toList()
: null,
);
}
}
退款
取消订单参考。注意:需要先调用授权订单方法再退款。orderId
和 jsonData
是必需参数。
Refund refund = Refund(totalAmount: totalAmount, comment: comment);
final result = await TamaraSdk.refunds(orderId, jsonEncode(refund));
class Refund {
EAmount? totalAmount;
String? comment;
Refund({
this.totalAmount,
this.comment,
});
factory Refund.fromJson(Map<String, dynamic> json) {
return Refund(
totalAmount: EAmount.fromJson(json['total_amount']),
comment: json['comment'],
);
}
}
渲染购物车页面
通过调用此方法渲染购物车页面。language
, country
, publicKey
, amount
是必需参数。
String result = await TamaraSdk.renderCartPage(language, country, publicKey, amount);
final cartPage = CartPage.fromJson(jsonDecode(result));
class CartPage {
String? script;
String? url;
CartPage({
this.script,
this.url,
});
factory CartPage.fromJson(Map<String, dynamic> json) {
return CartPage(
script: json['script'],
url: json['url'],
);
}
}
渲染产品页面
通过调用此方法渲染产品页面。language
, country
, publicKey
, amount
是必需参数。
String result = await TamaraSdk.renderProduct(language, country, publicKey, amount);
Product product = Product.fromJson(jsonDecode(result));
class Product {
String? script;
String? url;
Product({
this.script,
this.url,
});
factory Product.fromJson(Map<String, dynamic> json) {
return Product(
script: json['script'],
url: json['url'],
);
}
}
更多关于Flutter功能集成插件tamara_flutter_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter功能集成插件tamara_flutter_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中集成和使用tamara_flutter_sdk
插件的示例代码。请注意,具体的API调用和功能可能会根据tamara_flutter_sdk
的版本有所不同,因此请参考最新的官方文档以获取最新和最准确的信息。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加tamara_flutter_sdk
的依赖:
dependencies:
flutter:
sdk: flutter
tamara_flutter_sdk: ^最新版本号 # 替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
2. 初始化SDK
在你的Flutter应用的入口文件(通常是main.dart
)中初始化tamara_flutter_sdk
:
import 'package:flutter/material.dart';
import 'package:tamara_flutter_sdk/tamara_flutter_sdk.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
// 初始化Tamara SDK,这里需要替换为你的实际API密钥或配置
TamaraFlutterSdk.instance.init(
apiKey: 'YOUR_API_KEY',
// 其他初始化参数(如果有)
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
3. 使用SDK功能
假设tamara_flutter_sdk
提供了一个用户登录的功能,你可以在你的页面或组件中调用这个功能:
import 'package:flutter/material.dart';
import 'package:tamara_flutter_sdk/tamara_flutter_sdk.dart';
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String loginStatus = '';
Future<void> loginUser(String email, String password) async {
try {
// 调用SDK的登录方法
var result = await TamaraFlutterSdk.instance.login(email: email, password: password);
// 根据返回值更新登录状态
setState(() {
loginStatus = '登录成功: ${result.user?.email}';
});
} catch (e) {
// 处理登录错误
setState(() {
loginStatus = '登录失败: ${e.message}';
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Tamara Flutter SDK Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextField(
decoration: InputDecoration(labelText: 'Email'),
keyboardType: TextInputType.emailAddress,
onChanged: (value) { /* 处理输入 */ },
),
SizedBox(height: 16),
TextField(
decoration: InputDecoration(labelText: 'Password'),
obscureText: true,
onChanged: (value) { /* 处理输入 */ },
),
SizedBox(height: 16),
ElevatedButton(
onPressed: () {
// 这里假设你已经从TextField中获取了email和password的值
String email = 'example@example.com'; // 替换为实际输入
String password = 'password123'; // 替换为实际输入
loginUser(email, password);
},
child: Text('登录'),
),
SizedBox(height: 16),
Text(loginStatus),
],
),
),
);
}
}
注意事项
- API密钥:确保在初始化SDK时使用了正确的API密钥。
- 错误处理:在实际应用中,应添加更完善的错误处理逻辑。
- UI/UX:上述示例代码中的UI部分较为简单,实际开发中应根据需求进行优化。
- 文档:始终参考
tamara_flutter_sdk
的官方文档,以获取最新的API信息和最佳实践。
希望这个示例能帮助你在Flutter项目中集成和使用tamara_flutter_sdk
插件。