You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

blockchain.go 2.5 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package blockchain
  2. import (
  3. "fmt"
  4. "gitlink.org.cn/cloudream/common/utils/http2"
  5. "gitlink.org.cn/cloudream/common/utils/serder"
  6. "net/url"
  7. "strings"
  8. )
  9. type InvokeReq struct {
  10. ContractAddress string `json:"contractAddress"`
  11. FunctionName string `json:"functionName"`
  12. MemberName string `json:"memberName"`
  13. Type string `json:"type"`
  14. Args []string `json:"args"`
  15. }
  16. func (c *Client) BlockChainInvoke(req InvokeReq, token string) error {
  17. targetUrl, err := url.JoinPath(c.baseURL, "/jcc-bcos/contract/invoke")
  18. if err != nil {
  19. return err
  20. }
  21. //token, err := c.getToken()
  22. //if err != nil {
  23. // return err
  24. //}
  25. header := make(map[string]string)
  26. header["Content-Type"] = http2.ContentTypeJSON
  27. header["Authorization"] = token
  28. println("token: " + token)
  29. resp, err := http2.PostJSON(targetUrl, http2.RequestParam{
  30. Body: req,
  31. Header: header,
  32. })
  33. if err != nil {
  34. println(err)
  35. return err
  36. }
  37. var codeResp response[string]
  38. if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
  39. println(err)
  40. return fmt.Errorf("parsing response: %w", err)
  41. }
  42. if codeResp.Code != ResponseCodeOK {
  43. println(codeResp.ToError().Message)
  44. return codeResp.ToError()
  45. }
  46. return nil
  47. }
  48. type TokenReq struct {
  49. Username string `json:"username"`
  50. Password string `json:"password"`
  51. }
  52. type TokenResp struct {
  53. RoleID string `json:"roleId"`
  54. Token string `json:"token"`
  55. }
  56. func (c *Client) getToken() (string, error) {
  57. targetUrl, err := url.JoinPath(c.loginUrl, "/jcc-admin/admin/login")
  58. if err != nil {
  59. return "", err
  60. }
  61. req := TokenReq{
  62. Username: c.userName,
  63. Password: c.password,
  64. }
  65. header := make(map[string]string)
  66. header["User-Agent"] = "Apifox/1.0.0 (https://apifox.com)"
  67. header["Content-Type"] = "application/json"
  68. header["Accept"] = "*/*"
  69. header["Host"] = "dev.jointcloud.net"
  70. header["Connection"] = "keep-alive"
  71. resp, err := http2.PostJSON(targetUrl, http2.RequestParam{
  72. Body: req,
  73. Header: header,
  74. })
  75. if err != nil {
  76. return "", err
  77. }
  78. contType := resp.Header.Get("Content-Type")
  79. if strings.Contains(contType, http2.ContentTypeJSON) {
  80. var codeResp response[TokenResp]
  81. if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
  82. return "", fmt.Errorf("parsing response: %w", err)
  83. }
  84. if codeResp.Code == ResponseCodeOK {
  85. return "Bearer " + codeResp.Data.Token, nil
  86. }
  87. return "", codeResp.ToError()
  88. }
  89. return "", fmt.Errorf("error: %w", err)
  90. }