易码通 对外 openapi sdk
Go to file
ziming a545f27d28 reademe 2025-10-13 18:00:00 +08:00
api reademe 2025-10-13 18:00:00 +08:00
cmd header 信息处理 2 2025-10-11 10:35:49 +08:00
core header 信息处理 2 2025-10-11 10:35:49 +08:00
utils first commit 2025-10-10 18:52:33 +08:00
.gitignore first commit 2025-10-10 18:52:33 +08:00
README.md reademe 2025-10-13 17:56:20 +08:00
go.mod header 信息处理 2 2025-10-11 10:35:49 +08:00
go.sum first commit 2025-10-10 18:52:33 +08:00

README.md

功能介绍

  1. 接口 SDK。详见 接口介绍
  2. 支持请求签名和应答验签。如果 SDK 未支持你需要的接口,请联系平台。
  3. 密钥生成下载、敏感信息加解密 等辅助能力。

名词解释

  • 商户 API 公钥:是用来证实商户身份的
  • 商户 API 私钥:是用来证实商户身份的
  • 商户 API 密钥:是商户用来加密请求参数的密钥,为加强数据安全,使用的对称加密密钥。
  • 平台 API 公钥:是商户用来验证平台身份的
  • 应用 appId商户应用ID

⚠️ 不要把密钥暴露在公共场合,如上传到 Github写在客户端代码等。

快速开始

安装

在项目目录中执行:

go get -u gitee.com/lansexiongdi/ymt

示例

package main

import (
	"context"
	"gitee.com/lansexiongdi/ymt/api/v1/key"
	"gitee.com/lansexiongdi/ymtk/core"
	"log"
)

func main() {
	c, err := core.NewCore(&core.Config{
		AppID:      "123",
		PrivateKey: "私钥",
		PublicKey:  "验签公钥",
		Key:        "业务参数密钥key",
		SignType:   "签名类型",
		BaseURL:    "请求地址:https://api.lansexiongdi.com",
	})
	if err != nil {
		log.Fatalf("new core err:%v", err)
	}
	a := &key.Key{c}
	_,_,r, err := a.Order(context.Background(), &key.OrderRequest{
		OutBizNo:   "123456",
		ActivityNo: "123456",
		Number:     1,
	})
	if err != nil {
		log.Fatalf("key get err:%v", err)
	}
	log.Printf(r)
}
package main

import (
	"context"
	"gitee.com/lansexiongdi/ymt/api/v1/key"
	"gitee.com/lansexiongdi/ymt/core"
	"log"
)

func main() {
	c, err := core.NewCore(&core.Config{
		AppID:      "123",
		PrivateKey: "私钥",
		PublicKey:  "验签公钥",
		Key:        "业务参数密钥key",
		SignType:   "签名类型",
		BaseURL:    "请求地址",
	})
	if err != nil {
		log.Fatalf("new core err:%v", err)
	}
	a := &key.Key{c}
	_,_,r, err := a.Query(context.Background(), &key.QueryRequest{
		OutBizNo:   "123456",
		trade_no:   "123456",
	})
	if err != nil {
		log.Fatalf("key query err:%v", err)
	}
	log.Printf(r)
}
package main

import (
	"context"
	"gitee.com/lansexiongdi/ymt/api/v1/key"
	"gitee.com/lansexiongdi/ymt/core"
	"log"
)

func main() {
	c, err := core.NewCore(&core.Config{
		AppID:      "123",
		PrivateKey: "私钥",
		PublicKey:  "验签公钥",
		Key:        "业务参数密钥key",
		SignType:   "签名类型",
		BaseURL:    "请求地址",
	})
	if err != nil {
		log.Fatalf("new core err:%v", err)
	}
	a := &key.Key{c}
	_,_,r, err := a.Discard(context.Background(), &key.DiscardRequest{
		OutBizNo:   "123456",
		trade_no:   "123456",
	})
	if err != nil {
		log.Fatalf("key query err:%v", err)
	}
	log.Printf(r)
}

回调通知

package main

import (
	"context"
	"net/http"
	"gitee.com/lansexiongdi/ymt/api/v1/key"
	"gitee.com/lansexiongdi/ymt/core"
	"log"
)

func main() {
	c, err := core.NewCore(&core.Config{
		AppID:      "123",
		PrivateKey: "私钥",
		PublicKey:  "验签公钥",
		Key:        "业务参数密钥key",
		SignType:   "签名类型",
		BaseURL:    "请求地址",
	})
	if err != nil {
		log.Fatalf("new core err:%v", err)
	}
	a := &key.Key{c}
	
	req := &http.Request{
		Header: nil, // 请求头
		Body:   nil, // 请求体
	}
	r, err := a.CallBack(context.Background(), req)
	if err != nil {
		log.Fatalf("key callBack err:%v", err)
	}
	if err != nil {
		log.Fatalf("key notify err:%v", err)
	}
	log.Printf(r)
}

其它调用

package main

import (
	"context"
	"encoding/json"
	"gitee.com/lansexiongdi/ymt/api/v1/anyapi"
	"gitee.com/lansexiongdi/ymt/core"
	"log"
)

func main() {
	c, err := core.NewCore(&core.Config{
		AppID:      "appid",
		PrivateKey: "私钥",
		PublicKey:  "验签公钥",
		Key:        "业务参数密钥key",
		SignType:   "签名类型",
		BaseURL:    "请求地址",
	})
	if err != nil {
		log.Fatalf("new core err:%v", err)
	}

	bizContent := struct {
		Source       string `json:"source"`         // 来源
		AppId        string `json:"app_id"`         // 应用Id
		MchPublicKey string `json:"mch_public_key"` // 客户公钥
		NotifyUrl    string `json:"notify_url"`     // 事件通知地址,可为空
	}{
		Source:       "来源",
		AppId:        "123",
		MchPublicKey: "123",
		NotifyUrl:    "https://xx.com/xx",
	}

	a := &anyapi.AnyApi{c}

	method := "/openapi/v1/xxx"

	_,_, r, err := a.AnyApi(context.Background(), method, bizContent)
	if err != nil {
		log.Fatalf("call err:%v", err)
	}

	if !r.IsSuccess() {
		log.Fatalf("err:%s", r.Message)
	}

	var bizDataContent = struct {
		Ciphertext string `json:"ciphertext,omitempty"`
	}{}

	_ = json.Unmarshal(r.Data, &bizDataContent)

	bizJsonContent, _ := c.CryptographySuite.Cipher.Decode(bizDataContent.Ciphertext)

	log.Printf("bizJsonContent=%s", bizJsonContent)
}