package icare import ( "bridging-rssa/docs" ic "bridging-rssa/models/bpjs/i_care" "bridging-rssa/models/config" "bytes" "encoding/json" "errors" "fmt" "io" "log" "net/http" "strings" "time" ) func ResponseGetFKRTL(url string, header *config.Header, headers map[string]string, request *ic.RequestICare) (*ic.ResponseGet, error) { log.Println("URL", url) reqMarshall, err := json.Marshal(request) if err != nil { log.Printf("Error json marshal: %v", err) } log.Println("REQUEST: ", string(reqMarshall)) req, err := http.NewRequest("POST", url, bytes.NewReader(reqMarshall)) if err != nil { log.Printf("Error creating request: %v", err) return nil, err } for key, value := range headers { req.Header.Set(key, value) } log.Println("REQ", req.Header) client := http.Client{ Timeout: 10 * time.Second, } responses := &ic.ResponseGet{} response, err := client.Do(req) if err != nil { if strings.Contains(strings.ToLower(err.Error()), "deadline exceeded") { errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi") log.Printf("error : %v", errMsg) responses.MetaData.Message = errMsg.Error() log.Println("responses: ", responses) return responses, err } log.Printf("Error making external API request: %v", err) return responses, err } log.Println("RESPONSE: ", response) if response.StatusCode == http.StatusGatewayTimeout { // 504 errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi") log.Printf("error : %v", errMsg) responses.MetaData.Code = 504 responses.MetaData.Message = errMsg.Error() log.Println("responses: ", responses) return responses, err } key := header.ConsID + header.SecretKey + header.TimeStamp res, err := io.ReadAll(response.Body) if err != nil { fmt.Println(err) return nil, err } log.Println("Res:", string(res)) var resFkrtlRaw ic.ResponseGetRaw err = json.Unmarshal([]byte(string(res)), &resFkrtlRaw) if err != nil { log.Printf("Error Unmarshaling: %v", err) return nil, err } log.Println("ResponseRaw : ", resFkrtlRaw) if resFkrtlRaw.MetaData.Code != 200 { errMsg := errors.New(resFkrtlRaw.MetaData.Message) if strings.Contains(strings.ToLower(resFkrtlRaw.MetaData.Message), "Gagal simpan!") { message := "Surat kontrol gagal diterbitkan, pastikan klinik tujuan sama dengan klinik asal pada rujukan awal" resFkrtlRaw.MetaData.Message = message } log.Printf("error : %v", errMsg) responses.MetaData.Code = resFkrtlRaw.MetaData.Code responses.MetaData.Message = resFkrtlRaw.MetaData.Message log.Println("responses: ", responses) return responses, errMsg } dataResp, err := docs.StringDecrypt(key, resFkrtlRaw.Response) if err != nil { log.Printf("Error Decrypt: %v", err) log.Println("res: ", dataResp) return nil, err } var resFkrtl ic.Response log.Println("dataresp: ", dataResp) err = json.Unmarshal([]byte(dataResp), &resFkrtl) if err != nil { log.Printf("Error Decode: %v", err) return nil, err } responses = &ic.ResponseGet{ Response: resFkrtl, MetaData: resFkrtlRaw.MetaData, } return responses, nil } func ResponseGetFKTP(url string, header *config.Header, headers map[string]string, request *ic.ReqFKTP) (*ic.ResponseGet, error) { log.Println("URL", url) reqMarshall, err := json.Marshal(request) if err != nil { log.Printf("Error json marshal: %v", err) } log.Println("REQUEST: ", string(reqMarshall)) req, err := http.NewRequest("POST", url, bytes.NewReader(reqMarshall)) if err != nil { log.Printf("Error creating request: %v", err) return nil, err } for key, value := range headers { req.Header.Set(key, value) } log.Println("REQ", req.Header) client := http.Client{ Timeout: 10 * time.Second, } responses := &ic.ResponseGet{} response, err := client.Do(req) if err != nil { if strings.Contains(strings.ToLower(err.Error()), "deadline exceeded") { errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi") log.Printf("error : %v", errMsg) responses.MetaData.Message = errMsg.Error() log.Println("responses: ", responses) return responses, err } log.Printf("Error making external API request: %v", err) return responses, err } log.Println("RESPONSE: ", response) if response.StatusCode == http.StatusGatewayTimeout { // 504 errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi") log.Printf("error : %v", errMsg) responses.MetaData.Code = 504 responses.MetaData.Message = errMsg.Error() log.Println("responses: ", responses) return responses, err } key := header.ConsID + header.SecretKey + header.TimeStamp res, err := io.ReadAll(response.Body) if err != nil { fmt.Println(err) return nil, err } log.Println("Res:", string(res)) var resFkrtlRaw ic.ResponseGetRaw err = json.Unmarshal([]byte(string(res)), &resFkrtlRaw) if err != nil { log.Printf("Error Unmarshaling: %v", err) return nil, err } log.Println("ResponseRaw : ", resFkrtlRaw) if resFkrtlRaw.MetaData.Code != 200 { errMsg := errors.New(resFkrtlRaw.MetaData.Message) if strings.Contains(strings.ToLower(resFkrtlRaw.MetaData.Message), "Gagal simpan!") { message := "Surat kontrol gagal diterbitkan, pastikan klinik tujuan sama dengan klinik asal pada rujukan awal" resFkrtlRaw.MetaData.Message = message } log.Printf("error : %v", errMsg) responses.MetaData.Code = resFkrtlRaw.MetaData.Code responses.MetaData.Message = resFkrtlRaw.MetaData.Message log.Println("responses: ", responses) return responses, errMsg } dataResp, err := docs.StringDecrypt(key, resFkrtlRaw.Response) if err != nil { log.Printf("Error Decrypt: %v", err) log.Println("res: ", dataResp) return nil, err } var resFkrtl ic.Response log.Println("dataresp: ", dataResp) err = json.Unmarshal([]byte(dataResp), &resFkrtl) if err != nil { log.Printf("Error Decode: %v", err) return nil, err } responses = &ic.ResponseGet{ Response: resFkrtl, MetaData: resFkrtlRaw.MetaData, } return responses, nil }