fonchain-fiee/pkg/service/artwork_third_party.go
2025-02-19 14:24:15 +08:00

165 lines
4.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package service
import (
"context"
"crypto/hmac"
"crypto/sha256"
"dubbo.apache.org/dubbo-go/v3/common/logger"
"encoding/base64"
"encoding/hex"
"fmt"
"github.com/fonchain_enterprise/fonchain-main/api/artwork"
"github.com/fonchain_enterprise/fonchain-main/api/artwork_third_party"
"github.com/fonchain_enterprise/fonchain-main/pkg/common"
"github.com/fonchain_enterprise/fonchain-main/pkg/config"
"github.com/fonchain_enterprise/fonchain-main/pkg/e"
"github.com/fonchain_enterprise/fonchain-main/pkg/serializer"
"github.com/fonchain_enterprise/fonchain-main/pkg/utils"
"github.com/gin-gonic/gin"
"time"
)
func NfcList(c *gin.Context) {
var req artwork_third_party.NfcListReq
if err := c.ShouldBind(&req); err != nil {
logger.Errorf("NfcList ShouldBind err", err)
ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
if err := req.Validate(); err != nil {
err = common.SubstrError(err)
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
resp, err := GrpcArtworkThirdPartyImpl.NfcList(context.Background(), &req)
if err != nil {
ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: resp.Msg,
Status: e.Ok,
Data: resp,
})
}
func LoadData(c *gin.Context) {
var req artwork_third_party.LoadDataReq
/*if err := c.ShouldBind(&req); err != nil {
logger.Errorf("LoadSetting ShouldBind err", err)
ResponseQuickMsg(c, e.Failed, e.GetMsg(e.InvalidParams), nil)
return
}
if err := req.Validate(); err != nil {
err = common.SubstrError(err)
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}*/
resp, err := GrpcArtworkThirdPartyImpl.LoadData(context.Background(), &req)
if err != nil {
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
ResponseQuickMsg(c, e.Ok, resp.Msg, nil)
}
// https://www.oceanbase.com/docs/common-ocp-1000000000348383
func AddCollector(c *gin.Context) {
var req artwork.CollectorReq
if err := c.ShouldBind(&req); err != nil {
logger.Errorf("AddCollector err ShouldBind", err)
ResponseQuickMsg(c, e.Failed, e.GetMsg(e.InvalidParams), nil)
return
}
var host string = "erptest.fontree.cn:9020"
// 我自己的签名
xSdkDate := c.Request.Header.Get("x-sdk-date")
authorization := c.Request.Header.Get("Authorization")
//host := strings.Replace(config.ApiHost, "https://", "", 1)
if config.Env == "prod" {
host = "erpapi.fontree.cn"
}
//fmt.Println(host)
newAuth := akSkSign(&req, xSdkDate, host)
if err := req.Validate(); err != nil {
err = common.SubstrError(err)
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
if newAuth != authorization {
fmt.Println("newAuth--", newAuth)
ResponseQuickMsg(c, e.Failed, "签名不一致", nil)
return
}
//contentType := c.Request.Header.Get("Content-Type")
//host := c.Request.Header.Get("Host")
//ResponseQuickMsg(c, e.Ok, e.GetMsg(e.Success), dd)
_, err := GrpcArtworkImpl.Collector(context.Background(), &req)
if err != nil {
ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
ResponseQuickMsg(c, e.Ok, e.GetMsg(e.Success), nil)
}
// ak sk 签名规则
func akSkSign(req *artwork.CollectorReq, date, host string) string {
// 以下表示有三个消息头参与签名Content-Type、Host、X-Sdk-Date
//Host := "erptest.fontree.cn:9020"
//test
ak := config.ErpAk
sk := config.ErpSk
collector := req.Collector
tfnum := req.Tfnum
api := "/artwork/add-collector"
//date := time.Now().Format("2006-01-02 15:04:05")
//content := map[string]string{
// "Collector": "1234",
// "Tfnum": "T51523012",
//}
ContentMd5 := utils.Md5Str("Collector=" + collector + "&Tfnum=" + tfnum)
ContentType := "application/json"
//message = Http Method + "\n" + Content-md5 + "\n" + Content-Type + "\n" + Date+ "\n" + Host+ uri
signInfo := "POST" + "\n" + ContentMd5 + "\n" + ContentType + "\n" + date + "\n" + host + "\n" + api
fmt.Println("signInfo--", signInfo)
sha256Str := HmacSha256Hex(sk, signInfo)
fmt.Println("sha256Str--", sha256Str)
sign := base64.StdEncoding.EncodeToString([]byte(sha256Str))
authorization := "OCP-ACCESS-KEY-HMACSHA1 " + ak + ":" + sign
header := map[string]string{
"Content-Type": "application/json",
"Authorization": authorization,
"x-sdk-date": date,
"Host": host,
}
fmt.Printf("%+v", header)
fmt.Println("authorization", authorization)
fmt.Println("x-sdk-date", date)
fmt.Println("Host", host)
return authorization
}
func FormatISO8601Date(timestamp_second int64) string {
tm := time.Unix(timestamp_second, 0).UTC()
return tm.Format("2006-01-02T15:04:05Z")
}
func HmacSha256Hex(key, str_to_sign string) string {
hasher := hmac.New(sha256.New, []byte(key))
hasher.Write([]byte(str_to_sign))
return hex.EncodeToString(hasher.Sum(nil))
}