# 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", }) if err != nil { log.Fatal(err) } fmt.Println(order.CashierURL) } ``` 查询订单会调用平台商户查询接口;平台侧会在待支付时主动通过通道查询订单状态,例如支付宝会走 `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) ```