gdyb_service.go 29KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718
  1. package service
  2. import (
  3. "time"
  4. "net/http"
  5. "encoding/json"
  6. "fmt"
  7. "bytes"
  8. "io/ioutil"
  9. _"unsafe"
  10. "math/rand"
  11. "crypto/sha256"
  12. "encoding/hex"
  13. "strconv"
  14. )
  15. const (
  16. SceretKey = "RhaDw4H0RUbWYyTxmRKM1eSeN0qyGLds" // secretKey 私钥
  17. FixmedinsCOde = "H44022900214" // 定点医药机构编号
  18. )
  19. // 人员基本信息
  20. func Gdyb1101(certNo string) (string) {
  21. // 生成签名
  22. nonce := GetRandomString(32)
  23. timestamp := time.Now().Unix()
  24. signature := setSignature(timestamp,nonce)
  25. // 生成输入报文
  26. inputMessage := SetInputMessage(nonce,timestamp)
  27. input := make(map[string]interface{})
  28. inputData := make(map[string]interface{})
  29. inputMessage["infno"] = "1101" // 交易编码
  30. inputData["mdtrt_cert_type"] = "02" // 就诊凭证类型
  31. inputData["mdtrt_cert_no"] = certNo // 就诊凭证编号
  32. inputData["card_sn"] = "" // 卡识别码
  33. inputData["begntime"] = "" // 开始时间
  34. inputData["psn_cert_type"] = "" // 人员证件类型
  35. inputData["certno"] = "" // 证件号码
  36. inputData["psn_name"] = "" // 人员姓名
  37. input["data"] = inputData
  38. inputMessage["input"] = input //交易输入
  39. bytesData, err := json.Marshal(inputMessage)
  40. fmt.Println(string(bytesData))
  41. if err != nil {
  42. fmt.Println(err.Error() )
  43. return err.Error()
  44. }
  45. reader := bytes.NewReader(bytesData)
  46. url := "http://igb.hsa.gdgov.cn/ebus/gdyb_inf/poc/hsa/hgs/1101"
  47. request, err := http.NewRequest("POST", url, reader)
  48. if err != nil {
  49. fmt.Println(err.Error())
  50. return err.Error()
  51. }
  52. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  53. request.Header.Set("x-tif-paasid", "test_hosp")
  54. request.Header.Set("x-tif-signature", signature)
  55. request.Header.Set("x-tif-timestamp", strconv.FormatInt(timestamp,10))
  56. request.Header.Set("x-tif-nonce", nonce)
  57. client := http.Client{}
  58. resp, err := client.Do(request)
  59. if err != nil {
  60. fmt.Println(err.Error())
  61. return err.Error()
  62. }
  63. respBytes, err := ioutil.ReadAll(resp.Body)
  64. if err != nil {
  65. fmt.Println(err.Error())
  66. return err.Error()
  67. }
  68. str := string(respBytes)
  69. fmt.Println(str)
  70. return str
  71. }
  72. // 门诊挂号
  73. func Gdyb2201(psnNo string,insutype string,certNo string) (string) {
  74. // 生成签名
  75. nonce := GetRandomString(32)
  76. timestamp := time.Now().Unix()
  77. signature := setSignature(timestamp,nonce)
  78. tempTime := time.Unix(timestamp, 0)
  79. timeFormatOne := tempTime.Format("2006-01-02 15:04:05")
  80. // 生成输入报文
  81. inputMessage := SetInputMessage(nonce,timestamp)
  82. input := make(map[string]interface{})
  83. inputData := make(map[string]interface{})
  84. inputMessage["infno"] = "2201" // 交易编码
  85. inputData["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  86. inputData["insutype"] = insutype // 险种类型(来自1101接口返回)
  87. inputData["begntime"] = timeFormatOne // 开始时间
  88. inputData["mdtrt_cert_type"] = "02" // 就诊凭证类型
  89. inputData["mdtrt_cert_no"] = certNo // 就诊凭证编号
  90. inputData["ipt_otp_no"] = "10000110" // 住院/门诊号
  91. inputData["atddr_no"] = "1002" // 医师编码
  92. inputData["dr_name"] = "刘志刚" // 医师姓名
  93. inputData["dept_code"] = "3002" // 科室编码
  94. inputData["dept_name"] = "血透中心" // 科室名称
  95. inputData["caty"] = "A03.06" // 科别
  96. input["data"] = inputData
  97. inputMessage["input"] = input //交易输入
  98. bytesData, err := json.Marshal(inputMessage)
  99. fmt.Println(string(bytesData))
  100. if err != nil {
  101. fmt.Println(err.Error() )
  102. return err.Error()
  103. }
  104. reader := bytes.NewReader(bytesData)
  105. url := "http://igb.hsa.gdgov.cn/ebus/gdyb_inf/poc/hsa/hgs/2201"
  106. request, err := http.NewRequest("POST", url, reader)
  107. if err != nil {
  108. fmt.Println(err.Error())
  109. return err.Error()
  110. }
  111. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  112. request.Header.Set("x-tif-paasid", "test_hosp")
  113. request.Header.Set("x-tif-signature", signature)
  114. request.Header.Set("x-tif-timestamp", strconv.FormatInt(timestamp,10))
  115. request.Header.Set("x-tif-nonce", nonce)
  116. client := http.Client{}
  117. resp, err := client.Do(request)
  118. if err != nil {
  119. fmt.Println(err.Error())
  120. return err.Error()
  121. }
  122. respBytes, err := ioutil.ReadAll(resp.Body)
  123. if err != nil {
  124. fmt.Println(err.Error())
  125. return err.Error()
  126. }
  127. str := string(respBytes)
  128. fmt.Println(str)
  129. return str
  130. }
  131. // 门诊挂号撤销
  132. func Gdyb2202(psnNo string,mdtrtId string) (string) {
  133. // 生成签名
  134. nonce := GetRandomString(32)
  135. timestamp := time.Now().Unix()
  136. signature := setSignature(timestamp,nonce)
  137. // 生成输入报文
  138. inputMessage := SetInputMessage(nonce,timestamp)
  139. input := make(map[string]interface{})
  140. inputData := make(map[string]interface{})
  141. inputMessage["infno"] = "2202" // 交易编码
  142. inputData["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  143. inputData["mdtrt_id"] = mdtrtId // 就诊 ID(来自2201接口返回)
  144. inputData["ipt_otp_no"] = "10000110" // 住院/门诊号
  145. input["data"] = inputData
  146. inputMessage["input"] = input //交易输入
  147. bytesData, err := json.Marshal(inputMessage)
  148. fmt.Println(string(bytesData))
  149. if err != nil {
  150. fmt.Println(err.Error() )
  151. return err.Error()
  152. }
  153. reader := bytes.NewReader(bytesData)
  154. url := "http://igb.hsa.gdgov.cn/ebus/gdyb_inf/poc/hsa/hgs/2202"
  155. request, err := http.NewRequest("POST", url, reader)
  156. if err != nil {
  157. fmt.Println(err.Error())
  158. return err.Error()
  159. }
  160. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  161. request.Header.Set("x-tif-paasid", "test_hosp")
  162. request.Header.Set("x-tif-signature", signature)
  163. request.Header.Set("x-tif-timestamp", strconv.FormatInt(timestamp,10))
  164. request.Header.Set("x-tif-nonce", nonce)
  165. client := http.Client{}
  166. resp, err := client.Do(request)
  167. if err != nil {
  168. fmt.Println(err.Error())
  169. return err.Error()
  170. }
  171. respBytes, err := ioutil.ReadAll(resp.Body)
  172. if err != nil {
  173. fmt.Println(err.Error())
  174. return err.Error()
  175. }
  176. str := string(respBytes)
  177. fmt.Println(str)
  178. return str
  179. }
  180. // 门诊就诊信息上传
  181. func Gdyb2203(psnNo string,mdtrtId string) (string) {
  182. // 生成签名
  183. nonce := GetRandomString(32)
  184. timestamp := time.Now().Unix()
  185. signature := setSignature(timestamp,nonce)
  186. tempTime := time.Unix(timestamp, 0)
  187. timeFormatOne := tempTime.Format("2006-01-02 15:04:05")
  188. // 生成输入报文
  189. inputMessage := SetInputMessage(nonce,timestamp)
  190. input := make(map[string]interface{})
  191. inputData := make(map[string]interface{})
  192. diseinfo := make([]map[string]interface{},0)
  193. inputMessage["infno"] = "2203" // 交易编码
  194. inputData["mdtrt_id"] = mdtrtId // 就诊 ID(来自2201接口返回)
  195. inputData["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  196. inputData["med_type"] = "11" // 医疗类别
  197. inputData["begntime"] = timeFormatOne // 开始时间
  198. inputData["main_cond_dscr"] = "" // 主要病情描述
  199. inputData["dise_codg"] = "" // 病种编码
  200. inputData["dise_name"] = "" // 病种名称
  201. inputData["birctrl_type"] = "" // 计划生育手术类别
  202. inputData["birctrl_matn_date"] = "" // 计划生育手术或生育日期
  203. diseinfo_sun := make(map[string]interface{})
  204. diseinfo_sun["diag_type"] = "1" // 诊断类别
  205. diseinfo_sun["diag_srt_no"] = "1" // 诊断排序号
  206. diseinfo_sun["diag_code"] = "A04.902" // 诊断代码
  207. diseinfo_sun["diag_name"] = "细菌性腹泻" // 诊断名称
  208. diseinfo_sun["diag_dept"] = "肾内科" // 诊断科室
  209. diseinfo_sun["dise_dor_no"] = "1002" // 诊断医生编码
  210. diseinfo_sun["dise_dor_name"] = "马桂平" // 诊断医生姓名
  211. diseinfo_sun["diag_time"] = timeFormatOne // 诊断时间
  212. diseinfo_sun["vali_flag"] = "1" // 有效标志
  213. diseinfo = append(diseinfo,diseinfo_sun)
  214. input["diseinfo"] = diseinfo
  215. input["mdtrtinfo"] = inputData
  216. inputMessage["input"] = input //交易输入
  217. bytesData, err := json.Marshal(inputMessage)
  218. fmt.Println(string(bytesData))
  219. if err != nil {
  220. fmt.Println(err.Error() )
  221. return err.Error()
  222. }
  223. reader := bytes.NewReader(bytesData)
  224. url := "http://igb.hsa.gdgov.cn/ebus/gdyb_inf/poc/hsa/hgs/2203"
  225. request, err := http.NewRequest("POST", url, reader)
  226. if err != nil {
  227. fmt.Println(err.Error())
  228. return err.Error()
  229. }
  230. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  231. request.Header.Set("x-tif-paasid", "test_hosp")
  232. request.Header.Set("x-tif-signature", signature)
  233. request.Header.Set("x-tif-timestamp", strconv.FormatInt(timestamp,10))
  234. request.Header.Set("x-tif-nonce", nonce)
  235. client := http.Client{}
  236. resp, err := client.Do(request)
  237. if err != nil {
  238. fmt.Println(err.Error())
  239. return err.Error()
  240. }
  241. respBytes, err := ioutil.ReadAll(resp.Body)
  242. if err != nil {
  243. fmt.Println(err.Error())
  244. return err.Error()
  245. }
  246. str := string(respBytes)
  247. fmt.Println(str)
  248. return str
  249. }
  250. // 门诊费用明细信息上传
  251. func Gdyb2204(psnNo string,mdtrtId string) (string) {
  252. // 生成签名
  253. nonce := GetRandomString(32)
  254. timestamp := time.Now().Unix()
  255. signature := setSignature(timestamp,nonce)
  256. tempTime := time.Unix(timestamp, 0)
  257. timeFormat := tempTime.Format("20060102150405")
  258. timeFormatOne := tempTime.Format("2006-01-02 15:04:05")
  259. chrgBchno := rand.Intn(100000)+10000
  260. // 生成输入报文
  261. inputMessage := SetInputMessage(nonce,timestamp)
  262. input := make(map[string]interface{})
  263. feedetail := make([]map[string]interface{},0)
  264. feedetailInfo := make(map[string]interface{})
  265. inputMessage["infno"] = "2204" // 交易编码
  266. var randNum int
  267. randNum = rand.Intn(10000)+1000
  268. feedetailInfo["feedetl_sn"] = timeFormat + strconv.FormatInt(int64(randNum),10) // 费用明细流水号
  269. feedetailInfo["mdtrt_id"] = mdtrtId // 就诊 ID(来自2201接口返回)
  270. feedetailInfo["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  271. feedetailInfo["chrg_bchno"] = timeFormat + strconv.FormatInt(int64(chrgBchno),10) // 收费批次号
  272. feedetailInfo["dise_codg"] = "" // 病种编码
  273. feedetailInfo["rxno"] = "" // 处方号
  274. feedetailInfo["rx_circ_flag"] = "0" // 外购处方标志
  275. feedetailInfo["fee_ocur_time"] = timeFormatOne // 费用发生时间
  276. feedetailInfo["med_list_codg"] = "XN05AEQ010B001010101435" // 医疗目录编码
  277. feedetailInfo["medins_list_codg"] = FixmedinsCOde // 医药机构目录编码
  278. feedetailInfo["det_item_fee_sumamt"] = "10.00" // 明细项目费用总额
  279. feedetailInfo["cnt"] = "1" // 数量
  280. feedetailInfo["pric"] = "10.00" // 单价
  281. feedetailInfo["sin_dos_dscr"] = "" // 单次剂量描述
  282. feedetailInfo["used_frqu_dscr"] = "" // 使用频次描述
  283. feedetailInfo["prd_days"] = "0" // 周期天数
  284. feedetailInfo["medc_way_dscr"] = "" // 用药途径描述
  285. feedetailInfo["bilg_dept_codg"] = "3002" // 开单科室编码
  286. feedetailInfo["bilg_dept_name"] = "血透中心" // 开单科室名称
  287. feedetailInfo["bilg_dr_codg"] = "1002" // 开单医生编码
  288. feedetailInfo["bilg_dr_name"] = "刘志刚" // 开单医师姓名
  289. feedetailInfo["acord_dept_codg"] = "" // 受单科室编码
  290. feedetailInfo["acord_dept_name"] = "" // 受单科室名称
  291. feedetailInfo["orders_dr_code"] = "" // 受单医生编码
  292. feedetailInfo["orders_dr_name"] = "" // 受单医生姓名
  293. feedetailInfo["hosp_appr_flag"] = "1" // 医院审批标志
  294. feedetailInfo["tcmdrug_used_way"] = "" // 中药使用方式
  295. feedetailInfo["etip_flag"] = "" // 外检标志
  296. feedetailInfo["etip_hosp_code"] = "" // 外检医院编码
  297. feedetailInfo["dscg_tkdrug_flag"] = "" // 出院带药标志
  298. feedetailInfo["matn_fee_flag"] = "" // 生育费用标志
  299. feedetail = append(feedetail,feedetailInfo)
  300. feedetailInfo1 := make(map[string]interface{})
  301. randNum = rand.Intn(10000)+1000
  302. feedetailInfo1["feedetl_sn"] = timeFormat + strconv.FormatInt(int64(randNum),10) // 费用明细流水号
  303. feedetailInfo1["mdtrt_id"] = mdtrtId // 就诊 ID(来自2201接口返回)
  304. feedetailInfo1["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  305. feedetailInfo1["chrg_bchno"] = timeFormat + strconv.FormatInt(int64(chrgBchno),10) // 收费批次号
  306. feedetailInfo1["dise_codg"] = "" // 病种编码
  307. feedetailInfo1["rxno"] = "" // 处方号
  308. feedetailInfo1["rx_circ_flag"] = "0" // 外购处方标志
  309. feedetailInfo1["fee_ocur_time"] = timeFormatOne // 费用发生时间
  310. feedetailInfo1["med_list_codg"] = "ZA01AAJ0628010100974" // 医疗目录编码
  311. feedetailInfo1["medins_list_codg"] = FixmedinsCOde // 医药机构目录编码
  312. feedetailInfo1["det_item_fee_sumamt"] = "10.00" // 明细项目费用总额
  313. feedetailInfo1["cnt"] = "1" // 数量
  314. feedetailInfo1["pric"] = "10.00" // 单价
  315. feedetailInfo1["sin_dos_dscr"] = "" // 单次剂量描述
  316. feedetailInfo1["used_frqu_dscr"] = "" // 使用频次描述
  317. feedetailInfo1["prd_days"] = "0" // 周期天数
  318. feedetailInfo1["medc_way_dscr"] = "" // 用药途径描述
  319. feedetailInfo1["bilg_dept_codg"] = "3002" // 开单科室编码
  320. feedetailInfo1["bilg_dept_name"] = "血透中心" // 开单科室名称
  321. feedetailInfo1["bilg_dr_codg"] = "1002" // 开单医生编码
  322. feedetailInfo1["bilg_dr_name"] = "刘志刚" // 开单医师姓名
  323. feedetailInfo1["acord_dept_codg"] = "" // 受单科室编码
  324. feedetailInfo1["acord_dept_name"] = "" // 受单科室名称
  325. feedetailInfo1["orders_dr_code"] = "" // 受单医生编码
  326. feedetailInfo1["orders_dr_name"] = "" // 受单医生姓名
  327. feedetailInfo1["hosp_appr_flag"] = "1" // 医院审批标志
  328. feedetailInfo1["tcmdrug_used_way"] = "" // 中药使用方式
  329. feedetailInfo1["etip_flag"] = "" // 外检标志
  330. feedetailInfo1["etip_hosp_code"] = "" // 外检医院编码
  331. feedetailInfo1["dscg_tkdrug_flag"] = "" // 出院带药标志
  332. feedetailInfo1["matn_fee_flag"] = "" // 生育费用标志
  333. feedetail = append(feedetail,feedetailInfo1)
  334. input["feedetail"] = feedetail
  335. inputMessage["input"] = input //交易输入
  336. bytesData, err := json.Marshal(inputMessage)
  337. fmt.Println(string(bytesData))
  338. if err != nil {
  339. fmt.Println(err.Error() )
  340. return err.Error()
  341. }
  342. reader := bytes.NewReader(bytesData)
  343. url := "http://igb.hsa.gdgov.cn/ebus/gdyb_inf/poc/hsa/hgs/2204"
  344. request, err := http.NewRequest("POST", url, reader)
  345. if err != nil {
  346. fmt.Println(err.Error())
  347. return err.Error()
  348. }
  349. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  350. request.Header.Set("x-tif-paasid", "test_hosp")
  351. request.Header.Set("x-tif-signature", signature)
  352. request.Header.Set("x-tif-timestamp", strconv.FormatInt(timestamp,10))
  353. request.Header.Set("x-tif-nonce", nonce)
  354. client := http.Client{}
  355. resp, err := client.Do(request)
  356. if err != nil {
  357. fmt.Println(err.Error())
  358. return err.Error()
  359. }
  360. respBytes, err := ioutil.ReadAll(resp.Body)
  361. if err != nil {
  362. fmt.Println(err.Error())
  363. return err.Error()
  364. }
  365. str := string(respBytes)
  366. fmt.Println(str)
  367. return str
  368. }
  369. // 门诊费用明细信息撤销
  370. func Gdyb2205(psnNo string,mdtrtId string,chrgBchno string) (string) {
  371. // 生成签名
  372. nonce := GetRandomString(32)
  373. timestamp := time.Now().Unix()
  374. signature := setSignature(timestamp,nonce)
  375. // 生成输入报文
  376. inputMessage := SetInputMessage(nonce,timestamp)
  377. input := make(map[string]interface{})
  378. inputData := make(map[string]interface{})
  379. inputMessage["infno"] = "2205" // 交易编码
  380. inputData["mdtrt_id"] = mdtrtId // 就诊 ID(来自2201接口返回)
  381. inputData["chrg_bchno"] = chrgBchno // 收费批次号(来自2204生成的)
  382. inputData["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  383. input["data"] = inputData
  384. inputMessage["input"] = input //交易输入
  385. bytesData, err := json.Marshal(inputMessage)
  386. fmt.Println(string(bytesData))
  387. if err != nil {
  388. fmt.Println(err.Error() )
  389. return err.Error()
  390. }
  391. reader := bytes.NewReader(bytesData)
  392. url := "http://igb.hsa.gdgov.cn/ebus/gdyb_inf/poc/hsa/hgs/2205"
  393. request, err := http.NewRequest("POST", url, reader)
  394. if err != nil {
  395. fmt.Println(err.Error())
  396. return err.Error()
  397. }
  398. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  399. request.Header.Set("x-tif-paasid", "test_hosp")
  400. request.Header.Set("x-tif-signature", signature)
  401. request.Header.Set("x-tif-timestamp", strconv.FormatInt(timestamp,10))
  402. request.Header.Set("x-tif-nonce", nonce)
  403. client := http.Client{}
  404. resp, err := client.Do(request)
  405. if err != nil {
  406. fmt.Println(err.Error())
  407. return err.Error()
  408. }
  409. respBytes, err := ioutil.ReadAll(resp.Body)
  410. if err != nil {
  411. fmt.Println(err.Error())
  412. return err.Error()
  413. }
  414. str := string(respBytes)
  415. fmt.Println(str)
  416. return str
  417. }
  418. // 门诊预结算
  419. func Gdyb2206(psnNo string,mdtrtId string,chrgBchno string,certNo string,insutype string) (string) {
  420. // 生成签名
  421. nonce := GetRandomString(32)
  422. timestamp := time.Now().Unix()
  423. signature := setSignature(timestamp,nonce)
  424. // 生成输入报文
  425. inputMessage := SetInputMessage(nonce,timestamp)
  426. input := make(map[string]interface{})
  427. inputData := make(map[string]interface{})
  428. inputMessage["infno"] = "2206" // 交易编码
  429. inputData["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  430. inputData["mdtrt_cert_type"] = "02" // 就诊凭证类型
  431. inputData["mdtrt_cert_no"] = certNo // 就诊凭证编号
  432. inputData["med_type"] = "11" // 医疗类别 11 普通门诊 12 门诊挂号
  433. inputData["medfee_sumamt"] = "99.00" // 医疗费总额
  434. inputData["psn_setlway"] = "01" // 个人结算方式 01 按项目结 02 按定额结算
  435. inputData["mdtrt_id"] = mdtrtId // 就诊 ID(来自2201接口返回)
  436. inputData["chrg_bchno"] = chrgBchno // 收费批次号(来自2204生成的)
  437. inputData["acct_used_flag"] = "1" // 个人账户使用标志 0否 1是
  438. inputData["insutype"] = insutype // 险种类型
  439. input["data"] = inputData
  440. inputMessage["input"] = input //交易输入
  441. bytesData, err := json.Marshal(inputMessage)
  442. fmt.Println(string(bytesData))
  443. if err != nil {
  444. fmt.Println(err.Error() )
  445. return err.Error()
  446. }
  447. reader := bytes.NewReader(bytesData)
  448. url := "http://igb.hsa.gdgov.cn/ebus/gdyb_inf/poc/hsa/hgs/2206"
  449. request, err := http.NewRequest("POST", url, reader)
  450. if err != nil {
  451. fmt.Println(err.Error())
  452. return err.Error()
  453. }
  454. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  455. request.Header.Set("x-tif-paasid", "test_hosp")
  456. request.Header.Set("x-tif-signature", signature)
  457. request.Header.Set("x-tif-timestamp", strconv.FormatInt(timestamp,10))
  458. request.Header.Set("x-tif-nonce", nonce)
  459. client := http.Client{}
  460. resp, err := client.Do(request)
  461. if err != nil {
  462. fmt.Println(err.Error())
  463. return err.Error()
  464. }
  465. respBytes, err := ioutil.ReadAll(resp.Body)
  466. if err != nil {
  467. fmt.Println(err.Error())
  468. return err.Error()
  469. }
  470. str := string(respBytes)
  471. fmt.Println(str)
  472. return str
  473. }
  474. // 门诊结算
  475. func Gdyb2207(psnNo string,mdtrtId string,chrgBchno string,certNo string,insutype string) (string) {
  476. // 生成签名
  477. nonce := GetRandomString(32)
  478. timestamp := time.Now().Unix()
  479. signature := setSignature(timestamp,nonce)
  480. // 生成输入报文
  481. inputMessage := SetInputMessage(nonce,timestamp)
  482. input := make(map[string]interface{})
  483. inputData := make(map[string]interface{})
  484. inputMessage["infno"] = "2207" // 交易编码
  485. inputData["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  486. inputData["mdtrt_cert_type"] = "02" // 就诊凭证类型
  487. inputData["mdtrt_cert_no"] = certNo // 就诊凭证编号
  488. inputData["med_type"] = "11" // 医疗类别 11 普通门诊 12 门诊挂号
  489. inputData["medfee_sumamt"] = "99.00" // 医疗费总额
  490. inputData["psn_setlway"] = "01" // 个人结算方式 01 按项目结 02 按定额结算
  491. inputData["mdtrt_id"] = mdtrtId // 就诊 ID(来自2201接口返回)
  492. inputData["chrg_bchno"] = chrgBchno // 收费批次号(来自2204生成的)
  493. inputData["acct_used_flag"] = "1" // 个人账户使用标志 0否 1是
  494. inputData["insutype"] = insutype // 险种类型
  495. inputData["invono"] = "" // 发票号
  496. input["data"] = inputData
  497. inputMessage["input"] = input //交易输入
  498. bytesData, err := json.Marshal(inputMessage)
  499. fmt.Println(string(bytesData))
  500. if err != nil {
  501. fmt.Println(err.Error() )
  502. return err.Error()
  503. }
  504. reader := bytes.NewReader(bytesData)
  505. url := "http://igb.hsa.gdgov.cn/ebus/gdyb_inf/poc/hsa/hgs/2207"
  506. request, err := http.NewRequest("POST", url, reader)
  507. if err != nil {
  508. fmt.Println(err.Error())
  509. return err.Error()
  510. }
  511. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  512. request.Header.Set("x-tif-paasid", "test_hosp")
  513. request.Header.Set("x-tif-signature", signature)
  514. request.Header.Set("x-tif-timestamp", strconv.FormatInt(timestamp,10))
  515. request.Header.Set("x-tif-nonce", nonce)
  516. client := http.Client{}
  517. resp, err := client.Do(request)
  518. if err != nil {
  519. fmt.Println(err.Error())
  520. return err.Error()
  521. }
  522. respBytes, err := ioutil.ReadAll(resp.Body)
  523. if err != nil {
  524. fmt.Println(err.Error())
  525. return err.Error()
  526. }
  527. str := string(respBytes)
  528. fmt.Println(str)
  529. return str
  530. }
  531. // 门诊结算撤销
  532. func Gdyb2208(psnNo string,mdtrtId string,setlId string) (string) {
  533. // 生成签名
  534. nonce := GetRandomString(32)
  535. timestamp := time.Now().Unix()
  536. signature := setSignature(timestamp,nonce)
  537. // 生成输入报文
  538. inputMessage := SetInputMessage(nonce,timestamp)
  539. input := make(map[string]interface{})
  540. inputData := make(map[string]interface{})
  541. inputMessage["infno"] = "2208" // 交易编码
  542. inputData["psn_no"] = psnNo // 人员编号 (来自1101接口返回)
  543. inputData["mdtrt_id"] = mdtrtId // 就诊 ID(来自2201接口返回)
  544. inputData["setl_id"] = setlId // 结算 ID
  545. input["data"] = inputData
  546. inputMessage["input"] = input //交易输入
  547. bytesData, err := json.Marshal(inputMessage)
  548. fmt.Println(string(bytesData))
  549. if err != nil {
  550. fmt.Println(err.Error() )
  551. return err.Error()
  552. }
  553. reader := bytes.NewReader(bytesData)
  554. url := "http://igb.hsa.gdgov.cn/ebus/gdyb_inf/poc/hsa/hgs/2208"
  555. request, err := http.NewRequest("POST", url, reader)
  556. if err != nil {
  557. fmt.Println(err.Error())
  558. return err.Error()
  559. }
  560. request.Header.Set("Content-Type", "application/json;charset=UTF-8")
  561. request.Header.Set("x-tif-paasid", "test_hosp")
  562. request.Header.Set("x-tif-signature", signature)
  563. request.Header.Set("x-tif-timestamp", strconv.FormatInt(timestamp,10))
  564. request.Header.Set("x-tif-nonce", nonce)
  565. client := http.Client{}
  566. resp, err := client.Do(request)
  567. if err != nil {
  568. fmt.Println(err.Error())
  569. return err.Error()
  570. }
  571. respBytes, err := ioutil.ReadAll(resp.Body)
  572. if err != nil {
  573. fmt.Println(err.Error())
  574. return err.Error()
  575. }
  576. str := string(respBytes)
  577. fmt.Println(str)
  578. return str
  579. }
  580. // 生成签名
  581. func setSignature(timestamp int64, nonce string) string {
  582. str := strconv.FormatInt(timestamp,10) + SceretKey + nonce + strconv.FormatInt(timestamp,10)
  583. hash := sha256.New()
  584. //输入数据
  585. hash.Write([]byte(str))
  586. //计算哈希值
  587. bytes := hash.Sum(nil)
  588. //将字符串编码为16进制格式,返回字符串
  589. hashCode := hex.EncodeToString(bytes)
  590. //返回哈希值
  591. return hashCode
  592. }
  593. // 生成随机字符串
  594. func GetRandomString(l int) string {
  595. str := "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  596. bytes := []byte(str)
  597. result := []byte{}
  598. r := rand.New(rand.NewSource(time.Now().UnixNano()))
  599. for i := 0; i < l; i++ {
  600. result = append(result, bytes[r.Intn(len(bytes))])
  601. }
  602. return string(result)
  603. }
  604. // 生成基础报文
  605. func SetInputMessage(nonce string,timestamp int64) (map[string]interface{}) {
  606. // 生成签名
  607. tempTime := time.Unix(timestamp, 0)
  608. timeFormat := tempTime.Format("20060102150405")
  609. timeFormatOne := tempTime.Format("2006-01-02 15:04:05")
  610. randNum := rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000)
  611. // 生成输入报文
  612. inputMessage := make(map[string]interface{})
  613. inputMessage["infno"] = "1101" // 交易编码
  614. inputMessage["msgid"] = FixmedinsCOde + timeFormat + strconv.FormatInt(int64(randNum),10) // 发送方报文 ID
  615. inputMessage["mdtrtarea_admvs"] = "440200" // 就医地医保区划
  616. inputMessage["insuplc_admdvs"] = "440200" // 参保地医保区划
  617. inputMessage["recer_sys_code"] = "01" // 接收方系统代码
  618. inputMessage["dev_no"] = "" // 设备编号
  619. inputMessage["dev_safe_info"] = "" // 设备安全信息
  620. inputMessage["cainfo"] = "" // 数字签名信息
  621. inputMessage["signtype"] = "" // 签名类型
  622. inputMessage["infver"] = "V1.1" // 接收方系统代码
  623. inputMessage["opter_type"] = "1" // 经办人类别
  624. inputMessage["opter"] = "mockuser" // 经办人
  625. inputMessage["opter_name"] = "测试用户" // 经办人姓名
  626. inputMessage["inf_time"] = timeFormatOne // 交易时间
  627. inputMessage["fixmedins_code"] = FixmedinsCOde // 定点医药机构编号
  628. inputMessage["fixmedins_name"] = "翁源百伦血液透析有限公司透析中心" //定点医药机构名称
  629. inputMessage["sign_no"] = "" //交易签到流水号
  630. return inputMessage
  631. }