initial commit 2
This commit is contained in:
126
application/third/eligibility/bcbsi/bxe.go
Normal file
126
application/third/eligibility/bcbsi/bxe.go
Normal file
@@ -0,0 +1,126 @@
|
||||
package bcbsi
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/md5"
|
||||
"encoding/hex"
|
||||
"encoding/xml"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/pquerna/ffjson/ffjson"
|
||||
|
||||
"bitbucket.org/nemt/nemt-portal-api/application/third/eligibility/bcbsi/bcbsimodel"
|
||||
|
||||
"bitbucket.org/nemt/nemt-portal-api/application/viewmodel"
|
||||
"bitbucket.org/nemt/nemt-portal-api/infra/config"
|
||||
)
|
||||
|
||||
type bxeService struct {
|
||||
cfg *config.Config
|
||||
}
|
||||
|
||||
func newBXEService(cfg *config.Config) *bxeService {
|
||||
return &bxeService{
|
||||
cfg: cfg,
|
||||
}
|
||||
}
|
||||
|
||||
func (s bxeService) getSignature(APIKey string, secretKey string) string {
|
||||
rawKey := fmt.Sprintf("%s%s%v", APIKey, secretKey, time.Now().Unix())
|
||||
|
||||
hasher := md5.New()
|
||||
hasher.Write([]byte(rawKey))
|
||||
key := hex.EncodeToString(hasher.Sum(nil))
|
||||
|
||||
return strings.ToLower(key)
|
||||
}
|
||||
|
||||
func (s bxeService) GetPayerDetails(subscriberID string) ([]bcbsimodel.EntityResponse, error) {
|
||||
apiKey := s.cfg.Blue365.APIKey
|
||||
secretKey := s.cfg.Blue365.Secret
|
||||
URL := s.cfg.Blue365.URL
|
||||
prefix := subscriberID[:3]
|
||||
|
||||
client := &http.Client{}
|
||||
req, _ := http.NewRequest("GET", URL+"/"+prefix, bytes.NewBuffer([]byte{}))
|
||||
req.Header.Add("X-Api-Key", apiKey)
|
||||
req.Header.Add("X-Signature", s.getSignature(apiKey, secretKey))
|
||||
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
fmt.Println("Error Blue365: ", err)
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
bReturn, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
fmt.Println("Error Blue365: ", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var response []bcbsimodel.EntityResponse
|
||||
err = ffjson.Unmarshal(bReturn, &response)
|
||||
if err != nil {
|
||||
fmt.Println("Error Blue365: ", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (s bxeService) CheckEligibility(eligibility viewmodel.Eligibility) (bcbsimodel.MemberEligibilityResponse, error) {
|
||||
payer, err := s.GetPayerDetails(eligibility.Subscriber.SubscriberID)
|
||||
if err != nil {
|
||||
return bcbsimodel.MemberEligibilityResponse{}, err
|
||||
}
|
||||
|
||||
eligibility.Payer.PayerID = payer[0].ID
|
||||
eligibility.Payer.PayerName = payer[0].Name
|
||||
|
||||
envelope := bcbsimodel.GetEnvelope(eligibility)
|
||||
apiKey := s.cfg.BXE.APIKey
|
||||
secretKey := s.cfg.BXE.Secret
|
||||
|
||||
bObj, err := xml.Marshal(envelope)
|
||||
if err != nil {
|
||||
return bcbsimodel.MemberEligibilityResponse{}, err
|
||||
}
|
||||
|
||||
client := &http.Client{}
|
||||
req, _ := http.NewRequest("POST", s.cfg.BXE.URL, bytes.NewBuffer(bObj))
|
||||
req.Header.Add("Soapaction", "CheckEligibility")
|
||||
req.Header.Add("Content-Type", "text/xml")
|
||||
req.Header.Add("X-Api-Key", apiKey)
|
||||
req.Header.Add("X-Signature", s.getSignature(apiKey, secretKey))
|
||||
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
fmt.Println("Error WebService: ", err)
|
||||
return bcbsimodel.MemberEligibilityResponse{}, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
bReturn, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
fmt.Println("Error WebService: ", err)
|
||||
return bcbsimodel.MemberEligibilityResponse{}, err
|
||||
}
|
||||
|
||||
sResponse := string(bReturn)
|
||||
sResponse = strings.Replace(sResponse, "soapenv:Envelope", "Envelope", -1)
|
||||
sResponse = strings.Replace(sResponse, "soapenv:Body", "Body", -1)
|
||||
sResponse = strings.Replace(sResponse, "ns2:", "", -1)
|
||||
|
||||
var result bcbsimodel.EnvelopeResponse
|
||||
err = xml.Unmarshal([]byte(sResponse), &result)
|
||||
if err != nil {
|
||||
fmt.Println("Error WebService: ", err)
|
||||
return bcbsimodel.MemberEligibilityResponse{}, err
|
||||
}
|
||||
|
||||
return result.Body.MemberEligibilityResponse, nil
|
||||
}
|
||||
Reference in New Issue
Block a user