jsyb_service.go 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package service
  2. import (
  3. "crypto/hmac"
  4. "crypto/sha1"
  5. "encoding/base64"
  6. "encoding/json"
  7. "fmt"
  8. "gdyb/utils/csbhttp"
  9. "time"
  10. )
  11. // 人员基本信息
  12. func Jsyb1101(certNo string, org_name string, doctor string, fixmedins_code string, insuplc_admdvs string, mdtrtarea_admvs string, secret_key string, id_card_type int64, card_sn string, certificates string, request_url string, access_key string, skey string, timestamp_str string) (string, string) {
  13. //生成签名
  14. nonce := GetRandomString(32)
  15. timestamp := time.Now().Unix()
  16. //signature := setSignature(timestamp, nonce, secret_key)
  17. //生成输入报文
  18. inputMessage := SetInputMessage(nonce, timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs)
  19. input := make(map[string]interface{})
  20. inputData := make(map[string]interface{})
  21. inputMessage["infno"] = "1101" // 交易编码
  22. if certificates == "3" {
  23. inputData["mdtrt_cert_type"] = "99" // 就诊凭证类型
  24. inputData["certno"] = certNo // 证件号码
  25. inputData["psn_cert_type"] = "99" // 人员证件类型
  26. } else {
  27. if id_card_type == 1 {
  28. inputData["mdtrt_cert_type"] = "03" // 就诊凭证类型
  29. inputData["card_sn"] = card_sn // 卡识别码
  30. inputData["certno"] = certNo // 证件号码
  31. inputData["psn_cert_type"] = "01" // 人员证件类型
  32. } else {
  33. inputData["mdtrt_cert_type"] = "02" // 就诊凭证类型
  34. inputData["card_sn"] = "" // 卡识别码
  35. inputData["certno"] = certNo // 证件号码
  36. inputData["psn_cert_type"] = "01" // 人员证件类型
  37. }
  38. }
  39. inputData["mdtrt_cert_no"] = certNo // 就诊凭证编号
  40. inputData["begntime"] = "" // 开始时间
  41. inputData["psn_name"] = "" // 人员姓名
  42. input["data"] = inputData
  43. inputMessage["input"] = input //交易输入
  44. //var inputLog string
  45. bytesData, _ := json.Marshal(inputMessage)
  46. //inputLog = string(bytesData)
  47. fmt.Println(string(bytesData))
  48. if err != nil {
  49. fmt.Println(err.Error())
  50. return err.Error(), ""
  51. }
  52. //reader := bytes.NewReader(bytesData)
  53. //request, err := http.NewRequest("POST", "http://10.72.3.87:8086/CSB/1101", reader)
  54. //if err != nil {
  55. // fmt.Println(err.Error())
  56. // return err.Error(), ""
  57. //}
  58. //key := "_api_access_key=" + access_key + "&_api_name=" + "hssServives" + "&_api_timestamp=" + strconv.FormatInt(timestamp, 10) + "&_api_version=" + "1.0.0"
  59. //fmt.Println(skey)
  60. //fmt.Println(timestamp_str)
  61. //fmt.Println(access_key)
  62. //
  63. //request.Header.Set("Content-Type", "application/json")
  64. //request.Header.Set("_api_timestamp", timestamp_str)
  65. //request.Header.Set("_api_name", "hssServives")
  66. //request.Header.Set("_api_version", "1.0.0")
  67. //request.Header.Set("_api_access_key", access_key)
  68. //request.Header.Set("_api_signature", skey)
  69. //
  70. //client := http.Client{}
  71. //resp, err := client.Do(request)
  72. //if err != nil {
  73. // fmt.Println(err.Error())
  74. // return err.Error(), ""
  75. //}
  76. //respBytes, err := ioutil.ReadAll(resp.Body)
  77. //if err != nil {
  78. // fmt.Println(err.Error())
  79. // return err.Error(), ""
  80. //}
  81. //fmt.Println(string(respBytes))
  82. //str := string(respBytes)
  83. //return str, inputLog
  84. //request_url = "http://10.72.3.87:8086/CSB/1101"
  85. return HttpRequest(request_url, access_key, secret_key, timestamp, bytesData, string(bytesData)), ""
  86. }
  87. func HttpRequest(url string, ak string, sk string, timestamp int64, requestByte []byte, json string) string {
  88. fmt.Println(url)
  89. //step 1. 设置请求参数
  90. csbHP := csbhttp.NewHttpParams("http://10.72.3.87:8086/CSB/1101") //设置请求地址及url参数
  91. //设置调用方式 get 或者 post
  92. csbHP.SetMethod("post")
  93. //csbHP.AddParam("input", "")
  94. //设置 调用的服务名和版本
  95. csbHP.SetApi("hssServives")
  96. csbHP.SetVersion("1.0.0")
  97. //添加附加的http请求头 (可以定义多条)
  98. //key := "_api_access_key=" + ak + "&_api_name=" + "hssServives" + "&_api_timestamp=" + strconv.FormatInt(timestamp, 10) + "&_api_version=" + "1.0.0"
  99. csbHP.AddHeader("_api_timestamp", "1627006379509")
  100. csbHP.AddHeader("_api_name", "hssServives")
  101. csbHP.AddHeader("_api_version", "1.0.0")
  102. csbHP.AddHeader("_api_access_key", ak)
  103. csbHP.AddHeader("Content-Type", "application/json;charset=UTF-8")
  104. //request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  105. //还可以,设置附加的byte[]或者json请求体
  106. csbHP.SetContentBody(json, nil)
  107. //设置请求的ak和sk
  108. csbHP.SetAK(ak)
  109. csbHP.SetSK(sk)
  110. //打印请求参数信息
  111. csbHP.Print()
  112. //进行调用, 返回的第二项为resonse http headers (map[string][]string类型)
  113. //res, _, err := csbhttp.Invoke(*csbHP, requestByte)
  114. res, _, err := csbhttp.Invoke(*csbHP, "1627006379509")
  115. //是否发成错误
  116. if err != nil {
  117. fmt.Println(err)
  118. return ""
  119. }
  120. return res
  121. }
  122. func hmacsha1(keyStr, value string) string {
  123. key := []byte(keyStr)
  124. mac := hmac.New(sha1.New, key)
  125. mac.Write([]byte(value))
  126. //进行base64编码
  127. res := base64.StdEncoding.EncodeToString(mac.Sum(nil))
  128. return res
  129. }