165 lines
4.8 KiB
Go
165 lines
4.8 KiB
Go
|
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))
|
|||
|
}
|