|
- package blockchain
-
- import (
- "fmt"
- "gitlink.org.cn/cloudream/common/utils/http2"
- "gitlink.org.cn/cloudream/common/utils/serder"
- "net/url"
- "strings"
- )
-
- type InvokeReq struct {
- ContractAddress string `json:"contractAddress"`
- FunctionName string `json:"functionName"`
- MemberName string `json:"memberName"`
- Type string `json:"type"`
- Args []string `json:"args"`
- }
-
- func (c *Client) BlockChainInvoke(req InvokeReq, token string) error {
- targetUrl, err := url.JoinPath(c.baseURL, "/jcc-bcos/contract/invoke")
- if err != nil {
- return err
- }
-
- //token, err := c.getToken()
- //if err != nil {
- // return err
- //}
-
- header := make(map[string]string)
- header["Content-Type"] = http2.ContentTypeJSON
- header["Authorization"] = token
- println("token: " + 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 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)
- }
|