> For the complete documentation index, see [llms.txt](https://bitlong.gitbook.io/api-doc/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bitlong.gitbook.io/api-doc/lnurl-api-new.md).

# LNURL Api New

### 0.设置Token

每次 Token 更新应调用

```go
func SetToken(token string)
```

#### 参数

* `token`  <mark style="color:orange;">string</mark> Token

#### 响应

无

### 1.启动Web服务

```go
func LnurlRunRouter()
```

#### 参数

无

### 2.查询可用端口

向内网穿透服务器请求一个可用端口

```go
func LnurlGetAvailPort() string
```

#### 参数

无

#### 响应

* `errno`  <mark style="color:orange;">int</mark> 错误码
* `errmsg` <mark style="color:orange;">string</mark> 错误信息
* `data` <mark style="color:orange;">int</mark> 端口号

示例

```json
{"errno":0,"errmsg":"","data":45951}
```

### ~~3.生成新的UUID~~

UUID可以复用，但不同用户的UUID应不同

```go
func LnurlGetNewUUID() string
```

#### 参数

无

#### 响应

* `errno`  <mark style="color:orange;">int</mark> 错误码
* `errmsg` <mark style="color:orange;">string</mark> 错误信息
* `data` <mark style="color:orange;">string</mark> UUID

示例

```json
{"errno":0,"errmsg":"","data":"42f4f854-ae57-420f-bc62-46914284cc73"}
```

### 4.启动Frpc服务

执行两个操作

```go
func LnurlRunFrpcConf(id, remotePort string) string

func LnurlRunFrpc()
```

#### 参数

* `id`  <mark style="color:orange;">string</mark> 传pubKey
* `remotePort`  <mark style="color:orange;">string</mark> 查询到的可用端口

### 5.生成自己的LNURL

*使用相同的 id 会生成相同的 LNURL*

当UUID或remotePort变化时，应当重新生成LNURL

```go
func LnurlRequest(id string, name string, localPort string, remotePort string) string
```

#### 参数

* `id`  <mark style="color:orange;">string</mark> 生成的UUID
* `name` <mark style="color:orange;">string</mark> 用户名
* `localPort` <mark style="color:orange;">string</mark> 本地的Web服务端口，这里是"9090"
* `remotePort`  <mark style="color:orange;">string</mark> 查询到的可用端口

#### 响应

* `errno`  <mark style="color:orange;">int</mark> 错误码
* `errmsg` <mark style="color:orange;">string</mark> 错误信息
* `data` <mark style="color:orange;">string</mark> LNURL

示例

```json
{"errno":0,"errmsg":"","data":"LNURL1DP68GUP69UHNZVFC9CERGT3NXUHRYDFN8GUNQWPS9ASHQ6F0WCCJ7MRWW4EXCTMSV9UN76TY856RZWPHVEJNVWPDXUUNGCFDX3SNWE3D8QCRXDFDXDJKXEPCX4JRSDRXVS6QUDMC5G"}
```

### 6.向LNURL请求生成发票

```go
func LnurlRequestInvoice(lnu string, invoiceType int, assetID string, amount int, pubkey string, memo string) string
```

#### 参数

发票参数根据发票类型的需要字段进行填写，非必需字段填写无效，使用对应类型零值或空值即可

* `lnu`  <mark style="color:orange;">string</mark> 收款方的LNURL
* `invoiceType` <mark style="color:orange;">int</mark> 发票类型
  * `0` 链上资产比特币地址
  * `1` 链上资产地址
  * `2` 非托管通道比特币发票
  * `3` 非托管通道资产发票
  * `4` 托管比特币发票
  * `5` 托管链上资产发票
  * `6` 托管通道资产发票
  * `7` Nostr地址，即NpubKey用户名
* `assetID` <mark style="color:orange;">string</mark> 资产ID `1`  `3`  `5`  `6` &#x20;
* `amount` <mark style="color:orange;">int</mark> 数量 `1`  `2`  `3`  `4`  `5`  `6` &#x20;
* `pubkey`  <mark style="color:orange;">string</mark> 公钥 `3` &#x20;
* `memo`  <mark style="color:orange;">string</mark> 附言 `2`  `3`  `4` &#x20;

#### 响应

* `errno`  <mark style="color:orange;">int</mark> 错误码
* `errmsg` <mark style="color:orange;">string</mark> 错误信息
* `data` <mark style="color:orange;">string</mark> 发票

示例

```json
{"errno":0,"errmsg":"","data":"bcrt1p9wsxa7eufpwd2yrwyq8efmklxdfrjrjwkwcqs7z48ujxyut9thmq5rvmr2"}
```
