Files
007pay-sdk/README.md
T

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)
```