jsyb_service.go 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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, err := 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. return HttpRequest(request_url, access_key, secret_key, timestamp, bytesData, string(bytesData)), inputLog
  54. }
  55. func HttpRequest(url string, ak string, sk string, timestamp int64, requestByte []byte, json string) string {
  56. fmt.Println(url)
  57. //step 1. 设置请求参数
  58. csbHP := csbhttp.NewHttpParams("http://10.72.3.83:8086/CSB") //设置请求地址及url参数
  59. //设置调用方式 get 或者 post
  60. csbHP.SetMethod("post")
  61. csbHP.AddParam("input", "")
  62. //设置 调用的服务名和版本
  63. csbHP.SetApi("hssServives")
  64. csbHP.SetVersion("1.0.0")
  65. //添加附加的http请求头 (可以定义多条)
  66. key := "_api_access_key=" + ak + "&_api_name=" + "hssServives" + "&_api_timestamp=" + strconv.FormatInt(timestamp, 10) + "&_api_version=" + "1.0.0"
  67. csbHP.AddHeader("_api_timestamp", strconv.FormatInt(timestamp, 10))
  68. csbHP.AddHeader("_api_name", "hssServives")
  69. csbHP.AddHeader("_api_version", "1.0.0")
  70. csbHP.AddHeader("_api_access_key", ak)
  71. csbHP.AddHeader("_api_signature", hmacsha1(key, sk))
  72. //还可以,设置附加的byte[]或者json请求体
  73. csbHP.SetContentBody(json, requestByte)
  74. //设置请求的ak和sk
  75. csbHP.SetAK(ak)
  76. csbHP.SetSK(sk)
  77. //打印请求参数信息
  78. csbHP.Print()
  79. //进行调用, 返回的第二项为resonse http headers (map[string][]string类型)
  80. res, _, err := csbhttp.Invoke(*csbHP)
  81. //是否发成错误
  82. if err != nil {
  83. fmt.Println(err)
  84. return ""
  85. }
  86. return res
  87. }
  88. func hmacsha1(keyStr, value string) string {
  89. key := []byte(keyStr)
  90. mac := hmac.New(sha1.New, key)
  91. mac.Write([]byte(value))
  92. //进行base64编码
  93. res := base64.StdEncoding.EncodeToString(mac.Sum(nil))
  94. return res
  95. }