package blockchain import ( "fmt" "gitlink.org.cn/cloudream/common/utils/http2" "gitlink.org.cn/cloudream/common/utils/serder" "net/url" "strings" "time" ) type InvokeReq struct { ContractAddress string `json:"contractAddress"` FunctionName string `json:"functionName"` MemberName string `json:"memberName"` Type string `json:"type"` Args []string `json:"args"` Amount int64 `json:"amount"` } func (c *Client) BlockChainInvoke(req InvokeReq, token string) error { targetUrl, err := url.JoinPath(c.baseURL, "/jcc-bcos/contract/invoke") if err != nil { return err } header := make(map[string]string) header["Content-Type"] = http2.ContentTypeJSON header["Authorization"] = token resp, err := http2.PostJSON(targetUrl, http2.RequestParam{ Body: req, Header: header, }) if err != nil { println(err) return err } var codeResp response[string] if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { println(err) return fmt.Errorf("parsing response: %w", err) } if codeResp.Code != ResponseCodeOK { println(codeResp.ToError().Message) return codeResp.ToError() } return nil } type UnPledgePointsReq struct { PrivateKey string `form:"privateKey"` BusinessCode string `form:"businessCode"` EndTime time.Time `form:"endTime"` } func (c *Client) UnPledgePoints(req UnPledgePointsReq, token string) error { targetUrl, err := url.JoinPath(c.baseURL, "/jcc-bcos/points/unPledgePoints") if err != nil { return err } header := make(map[string]string) header["Content-Type"] = http2.ContentTypeJSON header["Authorization"] = token resp, err := http2.PutJSON(targetUrl, http2.RequestParam{ Query: req, Header: header, }) if err != nil { println(err) return err } contType := resp.Header.Get("Content-Type") if strings.Contains(contType, http2.ContentTypeJSON) { var codeResp response[string] if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { return fmt.Errorf("parsing response: %w", err) } if codeResp.Code == 200 { return nil } return codeResp.ToError() } return nil } type TokenReq struct { Username string `json:"username"` Password string `json:"password"` } type TokenResp struct { RoleID string `json:"roleId"` Token string `json:"token"` } func (c *Client) getToken() (string, error) { targetUrl, err := url.JoinPath(c.loginUrl, "/jcc-admin/admin/login") if err != nil { return "", err } req := TokenReq{ Username: c.userName, Password: c.password, } header := make(map[string]string) header["User-Agent"] = "Apifox/1.0.0 (https://apifox.com)" header["Content-Type"] = "application/json" header["Accept"] = "*/*" header["Host"] = "dev.jointcloud.net" header["Connection"] = "keep-alive" resp, err := http2.PostJSON(targetUrl, http2.RequestParam{ Body: req, Header: header, }) if err != nil { return "", err } contType := resp.Header.Get("Content-Type") if strings.Contains(contType, http2.ContentTypeJSON) { var codeResp response[TokenResp] if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { return "", fmt.Errorf("parsing response: %w", err) } if codeResp.Code == ResponseCodeOK { return "Bearer " + codeResp.Data.Token, nil } return "", codeResp.ToError() } return "", fmt.Errorf("error: %w", err) }