Flutter QuickBooks集成插件another_quickbooks的使用

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

Flutter QuickBooks集成插件another_quickbooks的使用

Flutter包用于QuickBooks。支持Payments和Accounting API以及授权流程。

QuickBooks Payments

功能 支持 URL
银行账户 Y https://developer.intuit.com/app/developer/qbpayments/docs/api/resources/all-entities/bankaccounts
卡片 Y https://developer.intuit.com/app/developer/qbpayments/docs/api/resources/all-entities/cards
收费 Y https://developer.intuit.com/app/developer/qbpayments/docs/api/resources/all-entities/charges
EChecks Y https://developer.intuit.com/app/developer/qbpayments/docs/api/resources/all-entities/echecks
Token Y https://developer.intuit.com/app/developer/qbpayments/docs/api/resources/all-entities/tokens

QuickBooks Accounting

功能 支持 URL
账户 Y https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/account
账单 Y https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/bill
公司信息 Y https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/companyinfo
客户 Y https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/customer
员工 Y https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/employee
报价单 Y https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/estimate
发票 Y https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/invoice
项目 Y https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/item
支付 Y https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/payment
设置 Y https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/preferences
损益表 Y https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/profitandloss
税务机构 Y https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/taxagency
供应商 Y https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/vendor

使用步骤

1. 注册开发者账号并获取clientId和clientSecret

访问QuickBooks开发者控制台注册开发者账号,并创建应用程序以获取clientIdclientSecret

2. 初始化Quickbooks客户端

import 'package:another_quickbooks/another_quickbooks.dart';

final quickClient = QuickbooksClient(
  applicationId: 'your_application_id', // 应用程序ID
  clientId: 'your_client_id',           // clientId
  clientSecret: 'your_client_secret',   // clientSecret
);

// 初始化客户端
await quickClient.initialize();

3. 获取授权页面URL

// 获取授权页面URL
var authUrl = quickClient.getAuthorizationPageUrl(
  scopes: [Scope.Accounting, Scope.Payments], // 授权范围
  redirectUrl: '<your_redirect_url>',         // 回调URL
  state: "state123",                          // 状态参数
);

print('请访问此URL以授权您的应用: $authUrl');

4. 获取授权后的AccessToken

在用户授权后,从回调URL中获取coderealmId,然后通过以下代码获取AccessToken:

// 获取AccessToken
var autoToken = await quickClient.getAuthToken(
  code: '<code_from_redirect_url>',          // 授权码
  realmId: '<realm_id_from_redirect_url>',   // QuickBooks公司ID
  redirectUrl: '<redirect_url>',             // 回调URL
);

print('Access Token: ${autoToken.accessToken}');
print('Refresh Token: ${autoToken.refreshToken}');

5. 刷新AccessToken

当AccessToken过期时,可以使用RefreshToken刷新新的AccessToken:

// 刷新AccessToken
String newToken = (await quickClient.refreshToken(
  refreshToken: autoToken.refreshToken,      // 刷新令牌
)).accessToken;

print('New Access Token: $newToken');

示例代码完整Demo

import 'package:flutter/material.dart';
import 'package:another_quickbooks/another_quickbooks.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: QuickBooksIntegrationPage(),
    );
  }
}

class QuickBooksIntegrationPage extends StatefulWidget {
  [@override](/user/override)
  _QuickBooksIntegrationPageState createState() =>
      _QuickBooksIntegrationPageState();
}

class _QuickBooksIntegrationPageState extends State<QuickBooksIntegrationPage> {
  String _authUrl = '';
  String _accessToken = '';
  String _refreshToken = '';

  Future<void> initializeQuickBooks() async {
    final quickClient = QuickbooksClient(
      applicationId: 'your_application_id',
      clientId: 'your_client_id',
      clientSecret: 'your_client_secret',
    );

    // 初始化客户端
    await quickClient.initialize();

    // 获取授权页面URL
    setState(() {
      _authUrl = quickClient.getAuthorizationPageUrl(
        scopes: [Scope.Accounting, Scope.Payments],
        redirectUrl: '<your_redirect_url>',
        state: "state123",
      );
    });
  }

  Future<void> fetchAccessToken() async {
    final quickClient = QuickbooksClient(
      applicationId: 'your_application_id',
      clientId: 'your_client_id',
      clientSecret: 'your_client_secret',
    );

    // 获取AccessToken
    var autoToken = await quickClient.getAuthToken(
      code: '<code_from_redirect_url>',
      realmId: '<realm_id_from_redirect_url>',
      redirectUrl: '<redirect_url>',
    );

    setState(() {
      _accessToken = autoToken.accessToken;
      _refreshToken = autoToken.refreshToken;
    });
  }

  Future<void> refreshTokenExample() async {
    final quickClient = QuickbooksClient(
      applicationId: 'your_application_id',
      clientId: 'your_client_id',
      clientSecret: 'your_client_secret',
    );

    // 刷新AccessToken
    String newToken = (await quickClient.refreshToken(
      refreshToken: _refreshToken,
    )).accessToken;

    setState(() {
      _accessToken = newToken;
    });
  }

  [@override](/user/override)
  void initState() {
    super.initState();
    initializeQuickBooks();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('QuickBooks Integration'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: fetchAccessToken,
              child: Text('Fetch Access Token'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: refreshTokenExample,
              child: Text('Refresh Access Token'),
            ),
            SizedBox(height: 20),
            Text('Authorization URL: $_authUrl'),
            Text('Access Token: $_accessToken'),
            Text('Refresh Token: $_refreshToken'),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


another_quickbooks 是一个用于在 Flutter 应用中集成 QuickBooks 的插件。它允许开发者与 QuickBooks Online API 进行交互,执行诸如创建、读取、更新和删除(CRUD)操作等任务。以下是如何在 Flutter 项目中使用 another_quickbooks 插件的简要指南。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 another_quickbooks 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  another_quickbooks: ^0.0.1  # 请检查最新版本

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

2. 配置 QuickBooks API

在使用 another_quickbooks 之前,你需要在 QuickBooks Developer 平台上创建一个应用,并获取 Client IDClient Secret

  1. 登录到 QuickBooks Developer
  2. 创建一个新的应用。
  3. 获取 Client IDClient Secret

3. 初始化 QuickBooks 客户端

在你的 Flutter 应用中,初始化 QuickBooks 客户端。

import 'package:another_quickbooks/another_quickbooks.dart';

final quickBooks = QuickBooks(
  clientId: 'YOUR_CLIENT_ID',
  clientSecret: 'YOUR_CLIENT_SECRET',
  redirectUri: 'YOUR_REDIRECT_URI',  // 例如:'https://your-app.com/callback'
  environment: QuickBooksEnvironment.sandbox,  // 或 QuickBooksEnvironment.production
);

4. 认证与授权

用户需要通过 OAuth 2.0 进行认证和授权。你可以使用 quickBooks.authorize() 方法来启动认证流程。

void authenticate() async {
  try {
    final authUrl = await quickBooks.authorize();
    // 打开浏览器或 WebView 进行认证
    // 例如:使用 url_launcher 插件打开浏览器
    if (await canLaunch(authUrl)) {
      await launch(authUrl);
    } else {
      throw 'Could not launch $authUrl';
    }
  } catch (e) {
    print('Error: $e');
  }
}

在用户完成认证后,QuickBooks 会重定向到你的 redirectUri,并附带一个授权码。你需要捕获这个授权码并使用它来获取访问令牌。

void handleRedirect(String url) async {
  try {
    await quickBooks.handleRedirect(url);
    // 现在你可以使用 quickBooks 客户端进行 API 调用
  } catch (e) {
    print('Error: $e');
  }
}

5. 使用 API

一旦你获得了访问令牌,你就可以使用 quickBooks 客户端与 QuickBooks API 进行交互。

例如,获取公司信息:

void getCompanyInfo() async {
  try {
    final companyInfo = await quickBooks.getCompanyInfo();
    print('Company Info: $companyInfo');
  } catch (e) {
    print('Error: $e');
  }
}

创建客户:

void createCustomer() async {
  try {
    final customer = Customer(
      displayName: 'John Doe',
      givenName: 'John',
      familyName: 'Doe',
      email: 'john.doe@example.com',
    );
    final createdCustomer = await quickBooks.createCustomer(customer);
    print('Created Customer: $createdCustomer');
  } catch (e) {
    print('Error: $e');
  }
}

6. 处理错误

在使用 API 时,可能会遇到各种错误。确保你正确处理这些错误,并给用户提供适当的反馈。

try {
  // API 调用
} on QuickBooksException catch (e) {
  print('QuickBooks Error: ${e.message}');
} catch (e) {
  print('Unexpected Error: $e');
}

7. 刷新令牌

访问令牌通常会在一段时间后过期。你可以使用 quickBooks.refreshToken() 方法来刷新令牌。

void refreshToken() async {
  try {
    await quickBooks.refreshToken();
    // 现在你可以继续使用 quickBooks 客户端
  } catch (e) {
    print('Error: $e');
  }
}

8. 注销

当用户注销时,你可以使用 quickBooks.logout() 方法来清除认证信息。

void logout() async {
  try {
    await quickBooks.logout();
    // 清除用户会话或其他相关数据
  } catch (e) {
    print('Error: $e');
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!