Beispiel #1
0
        /// <summary>
        /// Logs the add card response parameters received from MasterCard.
        /// </summary>
        /// <param name="response">
        /// The response whose parameters to log.
        /// </param>
        private void LogAddCardResponseParameters(DoEnrollmentResp response)
        {
            StringBuilder parameters = new StringBuilder("accountStatusId: ");

            parameters.Append(response.accountStatusId);
            parameters.Append("\r\n");
            parameters.Append("bankCustomerNumber: ");
            parameters.Append(response.bankCustomerNumber);
            parameters.Append("\r\n");
            parameters.Append("virtualId: ");
            parameters.Append(response.virtualId);
            parameters.Append("\r\n");
            parameters.Append("returnCode: ");
            parameters.Append(response.returnCode);
            parameters.Append("\r\n");
            parameters.Append("returnMsg: ");
            parameters.Append(response.returnMsg);
            Context.Log.Verbose("MasterCard Add Card response parameters:\r\n{0}", parameters.ToString());
        }
        /// <summary>
        /// Adds the described card to MasterCard.
        /// </summary>
        /// <param name="doEnrollmentRequest">
        /// Description of the card to add.
        /// </param>
        /// <returns>
        /// The response from MasterCard for the add card attempt.
        /// </returns>
        public async Task <DoEnrollmentResp> AddCard(doEnrollment doEnrollmentRequest)
        {
            DoEnrollmentResp result = null;

            using (masterCardMRSServiceClient registrationClient = new masterCardMRSServiceClient("mastercardregistrationserviceSoap11"))
            {
                Stopwatch sprocTimer = Stopwatch.StartNew();
                try
                {
                    doEnrollmentResponse1 response1 = await registrationClient.doEnrollmentAsync(doEnrollmentRequest).ConfigureAwait(false);

                    result = response1.doEnrollmentResponse.doEnrollmentResult;
                }
                finally
                {
                    sprocTimer.Stop();
                    PerformanceInformation.Add("MasterCard DoEnrollment (add card)",
                                               String.Format("{0} ms", sprocTimer.ElapsedMilliseconds));
                }
            }

            return(result);
        }
Beispiel #3
0
        /// <summary>
        /// Adds the card in the context for the user in the context to this partner.
        /// </summary>
        /// <returns>
        /// A task that will yield the result code for the operation.
        /// </returns>
        public async Task <ResultCode> AddCardAsync()
        {
            ResultCode result = ResultCode.None;

            // Build customer fields.
            string partnerCardId = General.GenerateShortGuid();

            HashStringElement[] customerFieldsElements = new HashStringElement[2]
            {
                new HashStringElement
                {
                    fieldName = MasterCardConstants.BankCustomerNumberFieldName,
                    data      = partnerCardId
                },
                new HashStringElement
                {
                    fieldName = MasterCardConstants.MemberIcaFieldName,
                    data      = MasterCardConstants.MemberIca
                }
            };

            // Build the customer account fields.
            HashStringElement[] customerAccountFieldsElements = new HashStringElement[4]
            {
                new HashStringElement
                {
                    fieldName = MasterCardConstants.BankAccountNumberFieldName,
                    data      = ((NewCardInfo)Context[Key.NewCardInfo]).Number
                },
                new HashStringElement
                {
                    fieldName = MasterCardConstants.BankProductCodeFieldName,
                    data      = MasterCardConstants.BankProductCode
                },
                new HashStringElement
                {
                    fieldName = MasterCardConstants.AccountStatusCodeFieldName,
                    data      = MasterCardConstants.AccountStatusActive
                },
                new HashStringElement
                {
                    fieldName = MasterCardConstants.ProgramIdentifierFieldName,
                    data      = MasterCardConstants.ProgramIdentifier
                }
            };

            // Build a card register request object.
            doEnrollment cardEnrollment = new doEnrollment
            {
                sourceId              = MasterCardConstants.SourceId,
                enrollmentTypeCode    = MasterCardConstants.EnrollmentTypeCode,
                customerFields        = customerFieldsElements,
                customerAccountFields = customerAccountFieldsElements
            };
            doEnrollmentRequest cardEnrollmentRequest = new doEnrollmentRequest
            {
                doEnrollment = cardEnrollment
            };

            LogAddCardRequestParameters(cardEnrollmentRequest);

            // Invoke the partner to add the card.
            result = await PartnerUtilities.InvokePartner(Context, async() =>
            {
                Context.Log.Verbose("Invoking partner AddCard API.");
                DoEnrollmentResp response = await MasterCardInvoker.AddCard(cardEnrollment).ConfigureAwait(false);
                Context.Log.Verbose("Partner AddCard API returned: {0}: {1}.", response.returnCode, response.returnMsg);
                LogAddCardResponseParameters(response);

                // Determine the ResultCode from the response code.
                PartnerCardInfo partnerCardInfo = GetMasterCardCardInfo((Card)Context[Key.Card]);
//TODO: Move PartnerCardSuffix into First Data-specific construct.
                partnerCardInfo.PartnerCardSuffix = "00";
                switch (response.returnCode)
                {
                case MasterCardResponseCode.Success:
                    result = ResultCode.Created;
                    partnerCardInfo.PartnerCardId = partnerCardId;
                    break;

                case MasterCardResponseCode.BankAccountNumberExists:
                    result = ResultCode.Created;
                    partnerCardInfo.PartnerCardId = response.bankCustomerNumber;
                    break;

                case MasterCardResponseCode.UnsupportedBin:
                case MasterCardResponseCode.MessageNotFound:
                    result = ResultCode.UnsupportedBin;
                    break;

                case MasterCardResponseCode.InvalidCard:
                    result = ResultCode.InvalidCard;
                    break;

                case MasterCardResponseCode.InvalidParameters:
                case MasterCardResponseCode.UnknownError:
                    result = ResultCode.UnknownError;
                    break;
                }

                // Log a warning if result was not a success.
                if (result != ResultCode.Created)
                {
                    Context.Log.Warning("MasterCard call failed. returnCode: {0}. returnMsg: {1}.",
                                        (int)DefaultLogEntryEventId.PartnerErrorWarning, response.returnCode, response.returnMsg);
                }

                return(result);
            }).ConfigureAwait(false);

            return(result);
        }