示例#1
0
        public async Task <ResultCode> SaveStatementCreditAsync()
        {
            var result                    = ResultCode.None;
            var cardId                    = (string)Context[Key.CardToken];
            var creditAmount              = (float)((int)Context[Key.DealDiscountAmount] / 100.0);
            var transactionId             = (string)Context[Key.Transaction];
            var transactionSettlementDate = (DateTime)Context[Key.TransactionSettlementDate];
            var partnerUserId             = (string)Context[Key.PartnerUserId];

            var request = VisaRtmDataManager.GetSaveStatementCreditAsync(cardId, creditAmount, transactionId, transactionSettlementDate, partnerUserId, VisaConstants.CommunityCodeClLevel);

            LogRequest("SaveStatementCreditAsync", request);

            result = await PartnerUtilities.InvokePartner(Context, async() =>
            {
                var response = await VisaInvoker.SaveStatementCreditAsync(request).ConfigureAwait(false);
                LogRequestResponse("SaveStatementCreditAsync", request, response, response.StatementCreditSubmitStatus);

                result = ResultCode.UnknownError;
                if (response.StatementCreditSubmitStatus)
                {
                    result = ResultCode.Created;
                }
                else if (response.HasError())
                {
                    //TODO: once we are ready to log these error messages in Db - map the error returned by Visa
                    //into our error codes and log in Db
                    result = visaErrorUtility.GetResultCode(response, null);
                }

                return(result);
            }, null, Partner.None, true).ConfigureAwait(false);

            return(result);
        }
示例#2
0
        /// <summary>
        ///  Enroll new user to Visa
        /// </summary>
        /// <returns></returns>
        private async Task <ResultCode> CreateEnrollment(string userKey)
        {
            ResultCode result = ResultCode.None;

            var newCardNumber     = ((NewCardInfo)Context[Key.NewCardInfo]).Number;
            var lastFourOfNewCard = newCardNumber.Substring(12);

            // Build a card register request object.
            var request = VisaRtmDataManager.GetCreateEnrollmentRequest(
                community: VisaConstants.CommunityName,
                userkey: userKey,
                cardnumbers: new List <string> {
                newCardNumber
            }
                );

            LogRequest("CreateEnrollment", request, newCardNumber, lastFourOfNewCard);
            // Invoke the partner to add the card.
            result = await PartnerUtilities.InvokePartner(Context, async() =>
            {
                var response = await VisaInvoker.CreateEnrollment(request).ConfigureAwait(false);
                LogRequestResponse("CreateEnrollment", request, response, response.Success, newCardNumber, lastFourOfNewCard);

                result = ResultCode.UnknownError;
                if (response.Success)
                {
                    result = ResultCode.Created;
                }
                else if (response.HasError())
                {
                    result = visaErrorUtility.GetResultCode(response, null);
                }

                if (result == ResultCode.Created)
                {
                    PartnerCardInfo partnerCardInfo   = GetVisaCardInfo((Card)Context[Key.Card]);
                    partnerCardInfo.PartnerCardId     = response.EnrollmentRecord.CardDetails[0].CardId.ToString();
                    partnerCardInfo.PartnerCardSuffix = "00";

                    var partnerUserId = response.EnrollmentRecord.UserProfileId;
                    User user         = (User)Context[Key.User];
                    user.AddOrUpdatePartnerUserId(Partner.Visa, partnerUserId.ToString(), true);

                    //add partner user information to the database
                    var userOperations = CommerceOperationsFactory.UserOperations(Context);
                    userOperations.AddOrUpdateUser();
                }

                return(result);
            }, null, Partner.None, true).ConfigureAwait(false);

            return(result);
        }
示例#3
0
        /// <summary>
        /// Add a card to Visa
        /// </summary>
        /// <param name="userkey"></param>
        /// <returns></returns>
        private async Task <ResultCode> SaveCardAsync(string userkey)
        {
            ResultCode result = ResultCode.None;

            var newCardNumber     = ((NewCardInfo)Context[Key.NewCardInfo]).Number;
            var lastFourOfNewCard = newCardNumber.Substring(12);

            // Build a card register request object.
            var request = VisaRtmDataManager.GetSaveCardRequest(userkey, VisaConstants.CommunityName, newCardNumber);

            LogRequest("AddCard", request, newCardNumber, lastFourOfNewCard);

            // Invoke the partner to add the card.
            result = await PartnerUtilities.InvokePartner(Context, async() =>
            {
                var response = await VisaInvoker.AddCard(request).ConfigureAwait(false);
                LogRequestResponse("AddCard", request, response, response.Success, newCardNumber, lastFourOfNewCard);

                result = ResultCode.UnknownError;
                if (response.Success)
                {
                    result = ResultCode.Created;
                }
                else if (response.HasError())
                {
                    result = visaErrorUtility.GetResultCode(response, null);
                }

                if (result == ResultCode.Created)
                {
                    PartnerCardInfo partnerCardInfo   = GetVisaCardInfo((Card)Context[Key.Card]);
                    partnerCardInfo.PartnerCardId     = response.CardInfoResponse.CardId.ToString();
                    partnerCardInfo.PartnerCardSuffix = "00";
                }

                return(result);
            }, null, Partner.None, true).ConfigureAwait(false);

            return(result);
        }
示例#4
0
        /// <summary>
        /// Remove a card from Visa
        /// </summary>
        /// <returns></returns>
        public async Task <ResultCode> RemoveCardAsync()
        {
            ResultCode result        = ResultCode.None;
            var        card          = (Card)Context[Key.Card];
            var        partnerCardId = card.PartnerCardInfoList.Where(p => p.PartnerId == Partner.Visa).Select(p => p.PartnerCardId).First();
            // Build a card register request object.
            var request = VisaRtmDataManager.GetDeleteCardRequest(GetVisaExternalUserId(), VisaConstants.CommunityName, partnerCardId);

            LogRequest("RemoveCard", request);

            // Invoke the partner to add the card.
            result = await PartnerUtilities.InvokePartner(Context, async() =>
            {
                var response = await VisaInvoker.RemoveCard(request);
                LogRequestResponse("RemoveCard", request, response, response.Success);

                // Determine the ResultCode from the response code.
                result = response.Success ? ResultCode.Success : ResultCode.UnknownError;

                return(result);
            }, null, Partner.None, true).ConfigureAwait(false);

            return(result);
        }
示例#5
0
 /// <summary>
 /// Retrieves the Visa External User Id. This is userId in Commerce system which Visa treats as External User Id
 /// </summary>
 /// <returns>
 /// The Visa Partner User Id.
 /// </returns>
 private string GetVisaExternalUserId()
 {
     return(VisaInvoker.GenerateExternalUserId((User)Context[Key.User]));
 }