package service import ( "bytes" "crypto/hmac" "crypto/sha1" "encoding/base64" "encoding/json" "fmt" "gdyb/utils/csbhttp" "io/ioutil" "net/http" "strconv" "time" ) // 人员基本信息 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) { //生成签名 nonce := GetRandomString(32) timestamp := time.Now().Unix() //signature := setSignature(timestamp, nonce, secret_key) //生成输入报文 inputMessage := SetInputMessage(nonce, timestamp, org_name, doctor, fixmedins_code, insuplc_admdvs, mdtrtarea_admvs) input := make(map[string]interface{}) inputData := make(map[string]interface{}) inputMessage["infno"] = "1101" // 交易编码 if certificates == "3" { inputData["mdtrt_cert_type"] = "99" // 就诊凭证类型 inputData["certno"] = certNo // 证件号码 inputData["psn_cert_type"] = "99" // 人员证件类型 } else { if id_card_type == 1 { inputData["mdtrt_cert_type"] = "03" // 就诊凭证类型 inputData["card_sn"] = card_sn // 卡识别码 inputData["certno"] = certNo // 证件号码 inputData["psn_cert_type"] = "01" // 人员证件类型 } else { inputData["mdtrt_cert_type"] = "02" // 就诊凭证类型 inputData["card_sn"] = "" // 卡识别码 inputData["certno"] = certNo // 证件号码 inputData["psn_cert_type"] = "01" // 人员证件类型 } } inputData["mdtrt_cert_no"] = certNo // 就诊凭证编号 inputData["begntime"] = "" // 开始时间 inputData["psn_name"] = "" // 人员姓名 input["data"] = inputData inputMessage["input"] = input //交易输入 //var inputLog string bytesData, err := json.Marshal(inputMessage) //inputLog = string(bytesData) fmt.Println(string(bytesData)) if err != nil { fmt.Println(err.Error()) return err.Error(), "" } reader := bytes.NewReader(bytesData) request, err := http.NewRequest("POST", "http://10.72.3.83:8086/CSB", reader) if err != nil { fmt.Println(err.Error()) return err.Error(), "" } key := "_api_access_key=" + access_key + "&_api_name=" + "hssServives" + "&_api_timestamp=" + strconv.FormatInt(timestamp, 10) + "&_api_version=" + "1.0.0" request.Header.Set("Content-Type", "application/json;charset=UTF-8") request.Header.Set("_api_timestamp", strconv.FormatInt(timestamp, 10)) request.Header.Set("_api_name", "hssServives") request.Header.Set("_api_version", "1.0.0") request.Header.Set("_api_access_key", access_key) request.Header.Set("_api_signature", hmacsha1(key, secret_key)) client := http.Client{} resp, err := client.Do(request) if err != nil { fmt.Println(err.Error()) return err.Error(), "" } respBytes, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(err.Error()) return err.Error(), "" } fmt.Println(string(respBytes)) str := string(respBytes) return str, "" //return HttpRequest(request_url, access_key, secret_key, timestamp, bytesData, string(bytesData)), inputLog } func HttpRequest(url string, ak string, sk string, timestamp int64, requestByte []byte, json string) string { fmt.Println(url) //step 1. 设置请求参数 csbHP := csbhttp.NewHttpParams("http://10.72.3.83:8086/CSB/1101") //设置请求地址及url参数 //设置调用方式 get 或者 post csbHP.SetMethod("post") //csbHP.AddParam("input", "") //设置 调用的服务名和版本 csbHP.SetApi("hssServives") csbHP.SetVersion("1.0.0") //添加附加的http请求头 (可以定义多条) //key := "_api_access_key=" + ak + "&_api_name=" + "hssServives" + "&_api_timestamp=" + strconv.FormatInt(timestamp, 10) + "&_api_version=" + "1.0.0" csbHP.AddHeader("_api_timestamp", strconv.FormatInt(timestamp, 10)) csbHP.AddHeader("_api_name", "hssServives") csbHP.AddHeader("_api_version", "1.0.0") csbHP.AddHeader("_api_access_key", ak) csbHP.AddHeader("Content-Type", "application/json;charset=UTF-8") //request.Header.Set("Content-Type", "application/json;charset=UTF-8") //还可以,设置附加的byte[]或者json请求体 csbHP.SetContentBody(json, nil) //设置请求的ak和sk csbHP.SetAK(ak) csbHP.SetSK(sk) //打印请求参数信息 csbHP.Print() //进行调用, 返回的第二项为resonse http headers (map[string][]string类型) res, _, err := csbhttp.Invoke(*csbHP, requestByte) //是否发成错误 if err != nil { fmt.Println(err) return "" } return res } func hmacsha1(keyStr, value string) string { key := []byte(keyStr) mac := hmac.New(sha1.New, key) mac.Write([]byte(value)) //进行base64编码 res := base64.StdEncoding.EncodeToString(mac.Sum(nil)) return res }