Flutter LNURL处理插件dart_lnurl的使用

Flutter LNURL处理插件dart_lnurl的使用

dart_lnurl

pub package

dart_lnurl 是一个用于解码 bech32 编码的 LNURL 字符串的 Dart 实现。目前支持以下标签:

  • withdrawRequest
  • payRequest
  • channelRequest
  • login

特性

  • ✅ 解码一个 bech32 编码的 LNURL 字符串。
  • ✅ 处理 LUD-17 非 bech32 LNURL 字符串(lnurlw, lnurlp, lnurlc, keyauth)。
  • ✅ 向解码后的 LN 服务发起 GET 请求并返回响应。

了解更多关于 LNURL 规范的信息,请访问 LNURL RFC

API 参考

Future<LNURLParseResult> getParams(String encodedUrl)

使用此方法解析编码的 bech32 LNURL 字符串,调用解码后的 URI,并从 LNURL 服务返回解析后的响应。encodedUrl 可以包含 lightning: 或不包含。

String decryptSuccessActionAesPayload({LNURLPaySuccessAction successAction, String preimage})

在进行 LNURL 支付时,成功操作可能包含使用支付预图像加密的有效载荷。使用此函数解密该有效载荷。

完整示例 Demo

步骤 1: 添加依赖

pubspec.yaml 文件中添加 dart_lnurl 依赖项:

dependencies:
  flutter:
    sdk: flutter
  dart_lnurl: ^0.0.1

步骤 2: 导入包

在 Dart 文件中导入 dart_lnurl 包:

import 'package:dart_lnurl/dart_lnurl.dart';

步骤 3: 使用 getParams 方法

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('LNURL Demo')),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              try {
                final encodedUrl = "lightning:lnurl1dp68gum...";
                final result = await getParams(encodedUrl);
                print("Decoded Result: $result");
              } catch (e) {
                print("Error: $e");
              }
            },
            child: Text('Decode LNURL'),
          ),
        ),
      ),
    );
  }
}

步骤 4: 解析 LNURL 并处理结果

在上面的示例中,我们使用 getParams 方法解析 LNURL 字符串。当按钮被点击时,将调用 getParams 方法并打印解码结果。如果发生错误,则会捕获异常并打印错误信息。

步骤 5: 解密成功动作的有效载荷(可选)

如果成功动作包含加密的有效载荷,可以使用 decryptSuccessActionAesPayload 方法来解密它:

import 'package:dart_lnurl/dart_lnurl.dart';

void decryptPayload() {
  final successAction = LNURLPaySuccessAction(
    tag: "tag",
    description: "description",
    aes: "aes_payload",
    // 其他参数
  );
  final preimage = "your_preimage_here";

  final decryptedPayload = decryptSuccessActionAesPayload(
    successAction: successAction,
    preimage: preimage,
  );

  print("Decrypted Payload: $decryptedPayload");
}

更多关于Flutter LNURL处理插件dart_lnurl的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


dart_lnurl 是一个用于处理 LNURL (Lightning Network URLs) 的 Dart 包,它可以帮助你在 Flutter 应用中轻松处理 LNURL 相关的操作。LNURL 是一种基于 Lightning Network 的协议,允许用户通过简单的 URL 进行支付、认证等操作。

以下是如何在 Flutter 项目中使用 dart_lnurl 插件的步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 dart_lnurl 依赖:

dependencies:
  flutter:
    sdk: flutter
  dart_lnurl: ^1.0.0  # 请检查最新版本

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

2. 导入包

在你的 Dart 文件中导入 dart_lnurl 包:

import 'package:dart_lnurl/dart_lnurl.dart';

3. 使用 dart_lnurl 处理 LNURL

dart_lnurl 提供了多种功能来处理 LNURL,包括解析 LNURL、生成 LNURL、处理 LNURL 请求等。

解析 LNURL

你可以使用 LNURL.parse 方法来解析一个 LNURL:

void parseLnurl(String lnurl) async {
  try {
    final parsedLnurl = await LNURL.parse(lnurl);
    print('Parsed LNURL: $parsedLnurl');
  } catch (e) {
    print('Error parsing LNURL: $e');
  }
}

处理 LNURL 支付请求

如果你有一个 LNURL 支付请求,你可以使用 LNURLPay 来处理它:

void handleLnurlPay(String lnurlPay) async {
  try {
    final lnurlPayRequest = await LNURLPay.parse(lnurlPay);
    print('LNURL Pay Request: $lnurlPayRequest');

    // 创建支付请求
    final invoice = await lnurlPayRequest.createInvoice(amount: 1000); // 1000 sats
    print('Invoice: $invoice');

    // 发送支付请求
    final paymentResult = await lnurlPayRequest.sendPayment(invoice);
    print('Payment Result: $paymentResult');
  } catch (e) {
    print('Error handling LNURL Pay: $e');
  }
}

处理 LNURL 认证请求

如果你有一个 LNURL 认证请求,你可以使用 LNURLAuth 来处理它:

void handleLnurlAuth(String lnurlAuth) async {
  try {
    final lnurlAuthRequest = await LNURLAuth.parse(lnurlAuth);
    print('LNURL Auth Request: $lnurlAuthRequest');

    // 进行认证
    final authResult = await lnurlAuthRequest.authenticate();
    print('Auth Result: $authResult');
  } catch (e) {
    print('Error handling LNURL Auth: $e');
  }
}

4. 示例代码

以下是一个完整的示例,展示了如何解析和处理 LNURL:

import 'package:dart_lnurl/dart_lnurl.dart';

void main() async {
  const lnurlPay = 'lnurl1dp68gurn8ghj7um9wfmxjcm99e3k7mf0v9cxj0m385ekvcenxc6r2c35xvukxefcv5mkvv34x5ekzd3ev56nyd3hxqurzepexejxxepnxscrvwfnv9nxzcn9xq6xyefhvgcxxcmyxymnserxfq5fns';
  const lnurlAuth = 'lnurl1dp68gurn8ghj7um9wfmxjcm99e3k7mf0v9cxj0m385ekvcenxc6r2c35xvukxefcv5mkvv34x5ekzd3ev56nyd3hxqurzepexejxxepnxscrvwfnv9nxzcn9xq6xyefhvgcxxcmyxymnserxfq5fns';

  await parseLnurl(lnurlPay);
  await handleLnurlPay(lnurlPay);
  await handleLnurlAuth(lnurlAuth);
}

void parseLnurl(String lnurl) async {
  try {
    final parsedLnurl = await LNURL.parse(lnurl);
    print('Parsed LNURL: $parsedLnurl');
  } catch (e) {
    print('Error parsing LNURL: $e');
  }
}

void handleLnurlPay(String lnurlPay) async {
  try {
    final lnurlPayRequest = await LNURLPay.parse(lnurlPay);
    print('LNURL Pay Request: $lnurlPayRequest');

    final invoice = await lnurlPayRequest.createInvoice(amount: 1000);
    print('Invoice: $invoice');

    final paymentResult = await lnurlPayRequest.sendPayment(invoice);
    print('Payment Result: $paymentResult');
  } catch (e) {
    print('Error handling LNURL Pay: $e');
  }
}

void handleLnurlAuth(String lnurlAuth) async {
  try {
    final lnurlAuthRequest = await LNURLAuth.parse(lnurlAuth);
    print('LNURL Auth Request: $lnurlAuthRequest');

    final authResult = await lnurlAuthRequest.authenticate();
    print('Auth Result: $authResult');
  } catch (e) {
    print('Error handling LNURL Auth: $e');
  }
}
回到顶部