154 lines
3.1 KiB
Markdown
154 lines
3.1 KiB
Markdown
# 007Pay Go Merchant SDK / CLI
|
|
|
|
这是 007Pay 商户应用端 Go SDK,包含:
|
|
|
|
- `pay007` SDK 包:创建订单、查询订单、退款、订单列表、手动入账、收益统计
|
|
- `007pay` CLI:可在其他项目或脚本中快速调试接入
|
|
- 与平台一致的 `pid + key + MD5` 签名工具
|
|
|
|
## 安装
|
|
|
|
作为独立子项目使用:
|
|
|
|
```bash
|
|
cd merchant-sdk-go
|
|
go test ./...
|
|
go build -o bin/007pay ./cmd/007pay
|
|
```
|
|
|
|
发布到自己的 Git 仓库后,其他项目可直接引入:
|
|
|
|
```bash
|
|
go get gitea.s1f.ren/shiran/007pay-sdk.git
|
|
```
|
|
|
|
## SDK 用法
|
|
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
|
|
pay007 "gitea.s1f.ren/shiran/007pay-sdk.git"
|
|
)
|
|
|
|
func main() {
|
|
client, err := pay007.NewClient(
|
|
"http://127.0.0.1:8081",
|
|
"your-pid",
|
|
"your-secret-key",
|
|
)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
order, err := client.Submit(context.Background(), pay007.SubmitRequest{
|
|
OutTradeNo: "M202607100001",
|
|
Name: "测试订单",
|
|
Money: "0.01",
|
|
Type: "alipay",
|
|
ClientType: "pc",
|
|
NotifyURL: "https://merchant.example.com/pay/notify",
|
|
ReturnURL: "https://merchant.example.com/pay/return",
|
|
ExpireTime: "15", // 可选,分钟数或绝对时间;默认 10 分钟
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
fmt.Println(order.CashierURL)
|
|
fmt.Println(order.ExpireTime, order.PageToken)
|
|
}
|
|
```
|
|
|
|
查询订单会调用平台商户查询接口;平台侧会在待支付时主动通过通道查询订单状态,例如支付宝会走 `alipay.trade.query`,并返回 `completed` 与 `channel_checked`。
|
|
|
|
```go
|
|
result, err := client.Query(context.Background(), pay007.QueryRequest{
|
|
OutTradeNo: "M202607100001",
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
if result.Completed {
|
|
fmt.Println("paid")
|
|
}
|
|
```
|
|
|
|
## CLI 用法
|
|
|
|
CLI 支持环境变量:
|
|
|
|
```bash
|
|
export PAY007_BASE_URL=http://127.0.0.1:8081
|
|
export PAY007_PID=your-pid
|
|
export PAY007_KEY=your-secret-key
|
|
```
|
|
|
|
创建订单:
|
|
|
|
```bash
|
|
007pay submit \
|
|
--out-trade-no M202607100001 \
|
|
--name "测试订单" \
|
|
--money 0.01 \
|
|
--type alipay \
|
|
--clienttype pc \
|
|
--notify-url https://merchant.example.com/pay/notify \
|
|
--return-url https://merchant.example.com/pay/return
|
|
```
|
|
|
|
查询订单:
|
|
|
|
```bash
|
|
007pay query --out-trade-no M202607100001
|
|
```
|
|
|
|
退款:
|
|
|
|
```bash
|
|
007pay refund --out-trade-no M202607100001 --money 0.01 --reason "用户退款"
|
|
```
|
|
|
|
订单列表:
|
|
|
|
```bash
|
|
007pay orders --status 1 --page 1 --page-size 20
|
|
```
|
|
|
|
收益统计:
|
|
|
|
```bash
|
|
007pay stats --begin "2026-07-01 00:00:00" --end "2026-07-31 23:59:59"
|
|
```
|
|
|
|
`StatsResponse` includes order counts by state, manual-order count, gross and
|
|
received amounts, successful refund count/amount, fee, and net amount. All
|
|
amount fields use cents.
|
|
|
|
签名调试:
|
|
|
|
```bash
|
|
007pay sign out_trade_no=M202607100001 name=测试订单 money=0.01 type=alipay
|
|
```
|
|
|
|
## 签名规则
|
|
|
|
与平台 `utils/sign` 保持一致:
|
|
|
|
1. 过滤空值、`sign`、`sign_type`
|
|
2. 参数按 key 升序排序
|
|
3. 拼接为 `a=1&b=2`
|
|
4. 末尾追加应用密钥
|
|
5. MD5 后转大写
|
|
|
|
SDK 中可直接使用:
|
|
|
|
```go
|
|
sign := pay007.BuildSign(params, secret)
|
|
ok := pay007.VerifySign(params, secret)
|
|
```
|