jsyb_service.go 4.7KB

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