jsyb_service.go 3.5KB

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