Esempio n. 1
0
        public async Task <ICrossCoreOutput> ServiceCall(ICrossCoreInput input)
        {
            var req = SetupRequest(input);
            var contractResolver = new DefaultContractResolver {
                NamingStrategy = new CamelCaseNamingStrategy {
                    OverrideSpecifiedNames = false
                }
            };
            var settings = new JsonSerializerSettings {
                ContractResolver = contractResolver, NullValueHandling = NullValueHandling.Ignore
            };

            var json = JsonConvert.SerializeObject(req, settings);

            var clientHandler = new HttpClientHandler();

            clientHandler.ClientCertificates.Add(GetCertificate());
            clientHandler.ClientCertificateOptions = ClientCertificateOption.Manual;

            string responseData;

            using (var client = new HttpClient(clientHandler))
                using (var request = new HttpRequestMessage(HttpMethod.Post, _config.Value.ApiEndpoint))
                {
                    var signature = GetSignature(json);
                    request.Headers.Add("hmac-signature", signature);

                    _logger.LogDebug($"Content: {json}");

                    request.Content = new StringContent(json, Encoding.Default, "application/json");


                    var headers = request.Headers.ToList();

                    var response = await client.SendAsync(request);

                    responseData = await response.Content.ReadAsStringAsync();

                    _logger.LogDebug($"Result: {responseData}");
                }

            var ccResponse = JsonConvert.DeserializeObject <CCResponse>(responseData);

            var output = new CrossCoreOutput()
            {
                Decision   = ccResponse.ResponseHeader.OverallResponse.Decision,
                FullOutput = responseData,
                Score      = ccResponse.ClientResponsePayload.DecisionElements.FirstOrDefault()?.Scores.FirstOrDefault()?.Score.ToString()
            };

            return(output);
        }
Esempio n. 2
0
        private CrossCoreRequest SetupRequest(ICrossCoreInput input)
        {
            var config            = _config.Value;
            var crossCoreDefaults = config.Defaults;

            var request = new CrossCoreRequest();

            request.Header.TenantId          = config.TenantId;
            request.Header.RequestType       = crossCoreDefaults.HdrRequestType;
            request.Header.ClientReferenceId = input.CorrelationId;
            //request.Header.ExpRequestId = string.Empty;
            request.Header.MessageTime = DateTime.UtcNow.ToString("s") + "Z";

            request.Header.Options.Workflow = crossCoreDefaults.HdrOptionsWorkFlow;

            request.Payload.Control.Add(new CCControl {
                Option = "ORG_CODE", Value = config.OrgCode
            });
            request.Payload.Control.Add(new CCControl {
                Option = "MODEL_CODE", Value = config.ModelCode
            });
            request.Payload.Control.Add(new CCControl {
                Option = "EVENT_ID", Value = input.CorrelationId
            });

            request.Payload.Application.Type                = crossCoreDefaults.PlApplicationType;
            request.Payload.Application.ApplicantionId      = crossCoreDefaults.PlApplicationId;
            request.Payload.Application.OriginalRequestTime = DateTime.UtcNow.ToString("s") + "Z";
            request.Payload.Application.Applicants.Add(new CCApplicant
            {
                Type          = crossCoreDefaults.PlApplicantsType,
                Id            = crossCoreDefaults.PlApplicantsApplicantId,
                ApplicantType = crossCoreDefaults.PlApplicantsApplicantType,
                ContactId     = crossCoreDefaults.PlApplicantsContactId
            });

            if (input.DeviceIpAddress != null)
            {
                request.Payload.Device.Id           = crossCoreDefaults.PlDeviceId;
                request.Payload.Device.IpAddress    = input.DeviceIpAddress;
                request.Payload.Device.Jsc          = "true";
                request.Payload.Device.hdim.Payload = "true";
            }
            else
            {
                request.Payload.Device = null;
            }

            var contact = new CCContact {
                Id = crossCoreDefaults.PlContactId
            };

            if (input.Email != null)
            {
                contact.Emails.Add(new CCContactEmail
                {
                    Id = crossCoreDefaults.PlContactEmailId, Type = crossCoreDefaults.PlContactEmailType, Email = input.Email
                });
            }
            else
            {
                contact.Emails = null;
            }

            contact.Person.Names.Add(new CCContactPersonName
            {
                Id          = crossCoreDefaults.PlContactPersonId,
                Type        = crossCoreDefaults.PlContactPersonType,
                FirstName   = input.GivenName,
                MiddleNames = input.MiddleName,
                SurName     = input.SurName
            });

            contact.Addresses.Add(new CCContactAddress
            {
                Id                = crossCoreDefaults.PlContactAddressId,
                AddressType       = crossCoreDefaults.PlContactAddressType,
                CountryCode       = input.CountryCode,
                Postal            = input.Postal,
                PostTown          = input.PostTown,
                StateProvinceCode = input.StateProvinceCode,
                Street            = input.Street
            });

            if (!string.IsNullOrEmpty(input.PhoneNumber))
            {
                contact.Telephones.Add(new CCContactTelephone
                {
                    Id = crossCoreDefaults.PlContactTelephoneId,
                    PhoneIdentifier = crossCoreDefaults.PlContactTelephoneIdentifier,
                    Number          = input.PhoneNumber
                });
            }
            else
            {
                contact.Telephones = null;
            }

            request.Payload.Contacts.Add(contact);

            return(request);
        }