Flutter支付集成插件square_connect的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter支付集成插件square_connect的使用

标题

Flutter支付集成插件square_connect的使用

内容

Dart Client for Square APIs

此包允许Dart开发者轻松地与Square API进行交互。

注意事项

由于Square API的认证方式,请勿在Flutter应用中使用此包,除非使用PKCE认证流程

支持的API

API 支持级别
Payments ⏳ 部分支持
Refunds ❌ 未支持
Disputes ❌ 未支持
Checkout ⏳ 部分支持
Apple Pay ❌ 未支持
Cards ⏳ 部分支持
Payouts ❌ 未支持
Terminal ❌ 未支持
Orders ✅ 完全支持
Order Custom Attributes ❌ 未支持
Subscriptions ✅ 完全支持
Catalog ⏳ 部分支持
Inventory ❌ 未支持
Customers ✅ 完全支持
Customer Custom Attributes ❌ 未支持
Customer Groups ❌ 未支持
Customer Segments ❌ 未支持
Loyalty ✅ 完全支持
Gift Cards ✅ 完全支持
Gift Card Activities ✅ 完全支持
Bookings ❌ 未支持
Booking Custom Attributes ❌ 未支持
Merchants ✅ 完全支持
Locations ✅ 完全支持
Location Custom Attributes ❌ 未支持
Devices ❌ 未支持
Cash Drawers ❌ 未支持
Vendors ❌ 未支持
Team ⏳ 部分支持
Labor ❌ 未支持
Bank Accounts ❌ 未支持
Sites ❌ 未支持
Snippets ❌ 未支持
OAuth ✅ 完全支持
Mobile Authorization ❌ 未支持
Webhook Subscriptions ❌ 未支持

使用方法

  1. 创建Square API客户端。
final client = SquareApiClient(
  accessToken: 'ACCESS_TOKEN', // 确保此值保密
  apiVersion: '2021-09-15', // 可选。 如果未指定,则使用最新版本的API。
);
  1. 调用Square API.
final locations = await client.listLocations();

错误处理

相反,Square API引发的错误不会导致方法抛出异常,而是返回由Square API返回的一系列错误。要检查是否发生了错误,请调用Response对象的.hasErrors方法,或者简单地检查errors属性是否为null。

示例代码

import 'package:square_connect/square_connect.dart';

async listCustomers() {
  String response = await CustomBackend.listCustomers();

  var responseObj = ListCustomersResponse.fromJson(json.decode(response));

  if (responseObj.hasErrors) {
    throw new Error(responseObj.errors);
  } else {
    return responseObj.customers;
  }
}

分页

如果需要分页,响应对象将包含由Square API返回的cursor字符串。要获取它,可以调用response.cursor。如果字段为null,则没有更多项目需要返回。如果它不为null,可以在调用特定方法时传递它。

贡献

如果您对如何改进此包以提高易用性或报告bug有任何反馈,请访问[https://github.com/morel-tech/square-connect-dart/issues]((https://github.com/morel-tech/square-connect-dart/issues)

使用Mason

此包使用mason_cli生成新文件。根据您想要生成的内容运行相应的命令,并确保在提示时将生成的文件添加到适当的barrel文件中。

共享模型
mason make shared_object
函数模型
mason make function_object
Webhook事件模型
mason make webhook_event

更多关于Flutter支付集成插件square_connect的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter支付集成插件square_connect的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter项目中集成Square Connect支付插件,你可以按照以下步骤进行操作。这里是一个简单的代码示例,展示了如何使用square_connect插件来集成Square支付功能。

首先,确保你已经在pubspec.yaml文件中添加了square_connect依赖:

dependencies:
  flutter:
    sdk: flutter
  square_connect: ^最新版本号  # 请替换为实际可用的最新版本号

然后,运行flutter pub get来安装依赖。

接下来,你需要在Flutter应用中配置Square Connect客户端。以下是一个基本的代码示例,展示了如何初始化Square Connect客户端并进行支付操作。

import 'package:flutter/material.dart';
import 'package:square_connect/square_connect.dart';
import 'dart:convert';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SquarePaymentScreen(),
    );
  }
}

class SquarePaymentScreen extends StatefulWidget {
  @override
  _SquarePaymentScreenState createState() => _SquarePaymentScreenState();
}

class _SquarePaymentScreenState extends State<SquarePaymentScreen> {
  late DefaultApiClient apiClient;
  late LocationsApi locationsApi;
  late TransactionsApi transactionsApi;

  @override
  void initState() {
    super.initState();
    // 初始化Square Connect客户端
    String accessToken = '你的Square访问令牌'; // 请替换为你的Square访问令牌
    apiClient = DefaultApiClient()
      ..basePath = 'https://connect.squareup.com/v2'
      ..authentications['oauth2'] = ApiKeyAuth(accessToken);

    locationsApi = LocationsApi(apiClient);
    transactionsApi = TransactionsApi(apiClient);
  }

  Future<void> createPayment() async {
    try {
      // 获取第一个位置ID(实际应用中可能需要选择特定位置)
      List<Location> locations = await locationsApi.listLocations();
      String locationId = locations.isNotEmpty ? locations.first.id! : '';

      if (locationId.isEmpty) {
        throw Exception('未找到任何位置');
      }

      // 创建支付请求
      CreateTransactionRequest body = CreateTransactionRequest()
        ..idempotencyKey = Uuid().v4() // 生成唯一的幂等性键
        ..amountMoney = Money()
          ..amount = 100 // 金额,单位为美分(这里为1美元)
          ..currencyCode = 'USD'
        ..locationId = locationId;

      Transaction result = await transactionsApi.createTransaction(body);
      print('支付结果: $result');
    } catch (e) {
      print('支付失败: ${e.message}');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Square支付集成'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: createPayment,
          child: Text('进行支付'),
        ),
      ),
    );
  }
}

注意事项:

  1. 访问令牌:你需要替换your_square_access_token为你的实际Square访问令牌。这个令牌通常是通过OAuth2流程获得的。
  2. 幂等性键:在创建支付请求时,每个请求都需要一个唯一的幂等性键,以避免重复支付。这里使用了Uuid库来生成唯一键,你需要在pubspec.yaml中添加uuid依赖。
  3. 错误处理:示例代码简单地打印了错误信息,实际应用中你可能需要更详细的错误处理逻辑。
  4. 金额单位:Square API中的金额单位是美分,因此100代表1美元

依赖添加(Uuid库):

pubspec.yaml文件中添加Uuid依赖:

dependencies:
  uuid: ^最新版本号  # 请替换为实际可用的最新版本号

然后运行flutter pub get来安装Uuid依赖。

这个示例提供了一个基本的框架,你可以在此基础上根据实际需求进行扩展和修改。

回到顶部