public static ThreedsInitialize Create(CreatePaymentRequest request, Options options)
        {
            ThreedsInitialize response = RestHttpClient.Create().Post<ThreedsInitialize>(options.BaseUrl + "/payment/3dsecure/initialize", GetHttpHeaders(request, options), request);

            if (response != null)
            {
                response.HtmlContent = DigestHelper.decodeString(response.HtmlContent);
            }
            return response;
        }
Example #2
0
 public static PaymentPreAuth Create(CreatePaymentRequest request, Options options)
 {
     return RestHttpClient.Create().Post<PaymentPreAuth>(options.BaseUrl + "/payment/preauth", GetHttpHeaders(request, options), request);
 }
Example #3
0
        public override void DoOperation()
        {
            try
            {
                //Validate Reques Header / Constants
                this.baseResponseMessage = ValidateInput();
                if (!this.baseResponseMessage.header.IsSuccess)
                {
                    throw new Exception(this.baseResponseMessage.header.ResponseMessage);
                }

                Options baseHeader = null;
                string  errMsg     = "";
                string  errCode    = "";
                bool    result     = true;

                //Operation
                switch (this.request.Header.OperationTypes)
                {
                case (int)OperationType.OperationTypes.ADD:
                    #region PAYMENT

                    //Create payments
                    Iyzipay.Request.CreatePaymentRequest paymentRequest = PrepareRequest(ref result, ref errMsg, ref baseHeader, ref errCode);
                    Payment payment = Payment.Create(paymentRequest, baseHeader);

                    RetrievePaymentRequest request = new RetrievePaymentRequest();
                    request.Locale                = Locale.TR.ToString();
                    request.ConversationId        = payment.ConversationId;
                    request.PaymentId             = payment.PaymentId;
                    request.PaymentConversationId = payment.ConversationId;

                    //check payments
                    Payment Checkpayments = Payment.Retrieve(request, baseHeader);
                    if (Checkpayments.Status == Status.FAILURE.ToString())
                    {
                        throw new Exception("Odeme basarısız");
                    }

                    bool checkvalue = false;
                    //add transaction
                    CommonServices.AddTransaction(this.request, ref checkvalue);
                    //response
                    this.response = new ResponsePayment
                    {
                        CALLBACK_URL     = paymentRequest.CallbackUrl,
                        CARD_HOLDER_NAME = paymentRequest.PaymentCard.CardHolderName,
                        CARD_REF_NUMBER  = paymentRequest.PaymentCard.CardNumber,
                        CONVERSATION_ID  = payment.ConversationId,
                        CURRENCY         = payment.Currency,
                        CUSTOMER_NUMBER  = Convert.ToInt64(paymentRequest.Buyer.Id),
                        IP              = paymentRequest.Buyer.Ip,
                        PAID_PRICE      = payment.PaidPrice,
                        PRICE           = payment.Price,
                        PAYMENT_CHANNEL = paymentRequest.PaymentChannel,
                        PAYMENT_ID      = Checkpayments.PaymentId,
                        header          = new ResponseHeader
                        {
                            IsSuccess       = checkvalue == false ? false : true,
                            ResponseCode    = checkvalue == false ? CommonDefinitions.INTERNAL_TRANSACTION_ERROR : CommonDefinitions.SUCCESS,
                            ResponseMessage = checkvalue == false ? CommonDefinitions.ERROR_MESSAGE : CommonDefinitions.SUCCESS_MESSAGE
                        }
                    };

                    #endregion
                    break;

                case (int)OperationType.OperationTypes.DELETE:
                    #region REFUND

                    //Create ReFund
                    FillOptionHeader(ref baseHeader);
                    CreateRefundRequest refundRequest = new CreateRefundRequest();
                    refundRequest.ConversationId       = this.request.CONVERSATION_ID;
                    refundRequest.Locale               = Locale.TR.ToString();
                    refundRequest.PaymentTransactionId = this.request.PAYMENT_ID;
                    refundRequest.Price    = this.request.PRICE;
                    refundRequest.Ip       = this.request.IP;
                    refundRequest.Currency = this.request.CURRENCY;

                    //check refund
                    Refund refund = Refund.Create(refundRequest, baseHeader);
                    if (refund.Status == Status.FAILURE.ToString())
                    {
                        throw new Exception(" Geri ödeme basarısız");
                    }

                    //Transaction
                    checkvalue = false;
                    //add transaction
                    CommonServices.AddTransaction(this.request, ref checkvalue);

                    //response
                    this.response = new ResponsePayment
                    {
                        CALLBACK_URL     = this.request.CALLBACK_URL,
                        CARD_HOLDER_NAME = this.request.CARD_HOLDER_NAME,
                        CARD_REF_NUMBER  = this.request.CARD_REF_NUMBER,
                        CONVERSATION_ID  = refundRequest.ConversationId,
                        CURRENCY         = refundRequest.Currency,
                        CUSTOMER_NUMBER  = this.request.CUSTOMER_NUMBER,
                        IP              = refundRequest.Ip,
                        PAID_PRICE      = refundRequest.Price,
                        PRICE           = refundRequest.Price,
                        PAYMENT_CHANNEL = this.request.PAYMENT_CHANNEL,
                        PAYMENT_ID      = refundRequest.PaymentTransactionId,
                        header          = new ResponseHeader
                        {
                            IsSuccess       = checkvalue == false ? false : true,
                            ResponseCode    = checkvalue == false ? CommonDefinitions.INTERNAL_TRANSACTION_ERROR : CommonDefinitions.SUCCESS,
                            ResponseMessage = checkvalue == false ? CommonDefinitions.ERROR_MESSAGE : CommonDefinitions.SUCCESS_MESSAGE
                        }
                    };

                    #endregion
                    break;

                case (int)OperationType.OperationTypes.UPDATE:
                    #region BKM PAYMENT

                    CreateBkmInitializeRequest requestBKM = PrepareBkmRequest(ref baseHeader);
                    BkmInitialize bkmInitialize           = BkmInitialize.Create(requestBKM, baseHeader);

                    RetrieveBkmRequest retrieveBKM = new RetrieveBkmRequest();
                    retrieveBKM.Locale         = Locale.TR.ToString();
                    retrieveBKM.ConversationId = "123456789";
                    retrieveBKM.Token          = "token";

                    Bkm bkm = Bkm.Retrieve(retrieveBKM, baseHeader);
                    if (bkm.Status == Status.FAILURE.ToString())
                    {
                        throw new Exception("Odeme basarısız");
                    }

                    //Transaction
                    checkvalue = false;
                    //add transaction
                    CommonServices.AddTransaction(this.request, ref checkvalue);
                    //response
                    this.response = new ResponsePayment
                    {
                        CALLBACK_URL     = requestBKM.CallbackUrl,
                        CARD_HOLDER_NAME = "",
                        CARD_REF_NUMBER  = "",
                        CONVERSATION_ID  = requestBKM.ConversationId,
                        CURRENCY         = "",
                        CUSTOMER_NUMBER  = Convert.ToInt64(requestBKM.Buyer.Id),
                        IP              = requestBKM.Buyer.Ip,
                        PAID_PRICE      = requestBKM.Price,
                        PRICE           = requestBKM.Price,
                        PAYMENT_CHANNEL = requestBKM.PaymentSource,
                        PAYMENT_ID      = requestBKM.BasketId,
                        header          = new ResponseHeader
                        {
                            IsSuccess       = checkvalue == false ? false : true,
                            ResponseCode    = checkvalue == false ? CommonDefinitions.INTERNAL_TRANSACTION_ERROR : CommonDefinitions.SUCCESS,
                            ResponseMessage = checkvalue == false ? CommonDefinitions.ERROR_MESSAGE : CommonDefinitions.SUCCESS_MESSAGE
                        }
                    };
                    #endregion
                    break;

                case (int)OperationType.OperationTypes.GET:
                    #region 3D PAYMENT
                    //Initialize 3D Payment
                    Iyzipay.Request.CreatePaymentRequest payment3DRequest = Prepare3DRequest(ref baseHeader);
                    ThreedsInitialize threedsInitialize = ThreedsInitialize.Create(payment3DRequest, baseHeader);
                    if (threedsInitialize.Status == Status.FAILURE.ToString())
                    {
                        throw new Exception("Odeme basarısız");
                    }
                    //Create 3D Payment
                    CreateThreedsPaymentRequest create3Drequestpayment = new CreateThreedsPaymentRequest();
                    create3Drequestpayment.Locale           = Locale.TR.ToString();
                    create3Drequestpayment.ConversationId   = payment3DRequest.ConversationId;
                    create3Drequestpayment.PaymentId        = this.request.PAYMENT_ID;
                    create3Drequestpayment.ConversationData = "conversation data";    // ?????

                    ThreedsPayment threedsPayment = ThreedsPayment.Create(create3Drequestpayment, baseHeader);
                    if (threedsPayment.Status == Status.FAILURE.ToString())
                    {
                        throw new Exception("Odeme basarısız");
                    }

                    //Transaction
                    checkvalue = false;
                    //add transaction
                    CommonServices.AddTransaction(this.request, ref checkvalue);
                    //response
                    this.response = new ResponsePayment
                    {
                        CALLBACK_URL     = payment3DRequest.CallbackUrl,
                        CARD_HOLDER_NAME = payment3DRequest.PaymentCard.CardHolderName,
                        CARD_REF_NUMBER  = payment3DRequest.PaymentCard.CardNumber,
                        CONVERSATION_ID  = payment3DRequest.ConversationId,
                        CURRENCY         = payment3DRequest.Currency,
                        CUSTOMER_NUMBER  = Convert.ToInt64(payment3DRequest.Buyer.Id),
                        IP              = payment3DRequest.Buyer.Ip,
                        PAID_PRICE      = payment3DRequest.PaidPrice,
                        PRICE           = payment3DRequest.Price,
                        PAYMENT_CHANNEL = payment3DRequest.PaymentChannel,
                        PAYMENT_ID      = create3Drequestpayment.PaymentId,
                        header          = new ResponseHeader
                        {
                            IsSuccess       = checkvalue == false ? false : true,
                            ResponseCode    = checkvalue == false ? CommonDefinitions.INTERNAL_TRANSACTION_ERROR : CommonDefinitions.SUCCESS,
                            ResponseMessage = checkvalue == false ? CommonDefinitions.ERROR_MESSAGE : CommonDefinitions.SUCCESS_MESSAGE
                        }
                    };

                    #endregion
                    break;

                default:
                    break;
                }
            }
            catch (Exception ex)
            {
                log.Error("Payment Operation has an ERROR: [ERROR : " + ex.Message + "]");
                throw new Exception("Ödeme sirasinda hata oluştu.");
            }
        }
Example #4
0
        private CreatePaymentRequest PrepareRequest(ref bool result, ref string errMsg, ref Options baseHeader, ref string errCode)
        {
            try
            {
                Iyzipay.Request.CreatePaymentRequest paymentRequest   = new Iyzipay.Request.CreatePaymentRequest();
                ResponsePersonalInformation          responseCustomer = CommonServices.GetCustomer(this.request.CUSTOMER_NUMBER);
                ResponseCustomerAddress responseCustomerAddress       = CommonServices.GetCustomerAddress(this.request.CUSTOMER_NUMBER);
                ResponseBoats           responseBoat = CommonServices.GetBoatInfo(this.request.BOAT_ID);

                baseHeader           = new Options();
                baseHeader.ApiKey    = this.request.ApiKey;    // "sandbox-lJr5mWuuVSnwTa5Dt8bE6ohOi6chI463";
                baseHeader.SecretKey = this.request.SecretKey; // "sandbox-yLkfxt1paeOWTZjV7qzn3rwyFPRrC6Cj";
                baseHeader.BaseUrl   = this.request.BaseUrl;   // "https://sandbox-merchant.iyzipay.com";

                string cvc = "";
                if (String.IsNullOrEmpty(this.request.PaymentCard.CARD_CVV))
                {
                    cvc = "000";
                }
                else
                {
                    cvc = this.request.PaymentCard.CARD_CVV;
                }

                paymentRequest.PaymentCard = new Iyzipay.Model.PaymentCard()
                {
                    CardHolderName = this.request.PaymentCard.CARD_HOLDER_NAME,
                    CardNumber     = Common.CipherAlgorithm.Decrypt(this.request.PaymentCard.CARD_REF_NUMBER, CipherAlgorithm.password),
                    ExpireMonth    = this.request.PaymentCard.CARD_EXPIRE_MONTH,
                    ExpireYear     = this.request.PaymentCard.CARD_EXPIRE_YEAR,
                    Cvc            = cvc,
                    RegisterCard   = 0//default
                };


                paymentRequest.Buyer = new Iyzipay.Model.Buyer()
                {
                    Id                  = this.request.CUSTOMER_NUMBER.ToString(),
                    Name                = responseCustomer.CUSTOMER_NAME,
                    Surname             = responseCustomer.CUSTOMER_SURNAME,
                    GsmNumber           = responseCustomer.PHONE_NUMBER,
                    Email               = responseCustomer.EMAIL,
                    IdentityNumber      = responseCustomer.IDENTIFICATION_ID.ToString(),
                    LastLoginDate       = DateTime.Now.ToShortDateString(),
                    RegistrationDate    = DateTime.Now.ToShortDateString(),
                    RegistrationAddress = responseCustomerAddress.DESCRIPTION,
                    Ip                  = this.request.IP,
                    City                = responseCustomerAddress.CITY,
                    Country             = responseCustomerAddress.COUNTRY,
                    ZipCode             = responseCustomerAddress.ZIPCODE
                };

                paymentRequest.ShippingAddress = new Iyzipay.Model.Address()
                {
                    ContactName = responseCustomer.CUSTOMER_NAME + " " + responseCustomer.CUSTOMER_SURNAME,
                    City        = responseCustomerAddress.CITY,
                    Country     = responseCustomerAddress.COUNTRY,
                    ZipCode     = responseCustomerAddress.ZIPCODE,
                    Description = responseCustomerAddress.DESCRIPTION
                };

                paymentRequest.BillingAddress = new Iyzipay.Model.Address()
                {
                    ContactName = responseCustomer.CUSTOMER_NAME + " " + responseCustomer.CUSTOMER_SURNAME,
                    City        = responseCustomerAddress.CITY,
                    Country     = responseCustomerAddress.COUNTRY,
                    ZipCode     = responseCustomerAddress.ZIPCODE,
                    Description = responseCustomerAddress.DESCRIPTION
                };

                List <BasketItem> basketItems     = new List <BasketItem>();
                BasketItem        firstBasketItem = new BasketItem();
                firstBasketItem.Id        = GenerateNumberManager.GenerateBasketId();
                firstBasketItem.Name      = responseBoat.BOAT_NAME;
                firstBasketItem.Category1 = responseBoat.TOUR_TYPE;
                firstBasketItem.Category2 = Enum.GetName(typeof(Enums.TourType), responseBoat.TOUR_TYPE);
                firstBasketItem.ItemType  = BasketItemType.VIRTUAL.ToString();
                firstBasketItem.Price     = responseBoat.TOUR_TYPE == "1" ? responseBoat.PRICE : responseBoat.PRIVATE_PRICE;
                basketItems.Add(firstBasketItem);

                paymentRequest.BasketItems = basketItems;

                paymentRequest.Locale         = Locale.TR.ToString();
                paymentRequest.ConversationId = this.request.CONVERSATION_ID;
                paymentRequest.Price          = this.request.PRICE;
                paymentRequest.PaidPrice      = (Convert.ToDecimal(this.request.PAID_PRICE) / 100).ToString().Replace(',', '.');
                paymentRequest.Installment    = 0;
                paymentRequest.BasketId       = firstBasketItem.Id;//Sepet Id'si.
                paymentRequest.PaymentChannel = this.request.PAYMENT_CHANNEL.ToString();
                paymentRequest.PaymentGroup   = PaymentGroup.PRODUCT.ToString();

                switch (this.request.CURRENCY)
                {
                case "949":
                    paymentRequest.Currency = Iyzipay.Model.Currency.TRY.ToString();
                    break;

                case "840":
                    paymentRequest.Currency = Iyzipay.Model.Currency.USD.ToString();
                    break;

                case "978":
                    paymentRequest.Currency = Iyzipay.Model.Currency.EUR.ToString();
                    break;

                case "826":
                    paymentRequest.Currency = Iyzipay.Model.Currency.GBP.ToString();
                    break;

                case "364":
                    paymentRequest.Currency = Iyzipay.Model.Currency.IRR.ToString();
                    break;

                default:
                    paymentRequest.Currency = "";
                    break;
                }

                if (String.IsNullOrEmpty(paymentRequest.Currency))
                {
                    errCode = CommonDefinitions.INTERNAL_SYSTEM_ERROR;
                    errMsg  = CommonDefinitions.CURRENCY_CODE_IS_NOT_VALID;
                    result  = false;
                    log.Info("iyzico Sale Call.. Error on PrepareRequest. Detail : " + errMsg);
                }
                return(paymentRequest);
            }
            catch (Exception ex)
            {
                log.Error("Prepare payment data has occured an ERROR. [Error: " + ex.Message + "]");
                throw ex;
            }
        }
Example #5
0
        public void Should_Initialize_Threeds()
        {
            CreatePaymentRequest request = new CreatePaymentRequest();
            request.Locale = Locale.TR.ToString();
            request.ConversationId = "123456789";
            request.Price = "1";
            request.PaidPrice = "1.2";
            request.Currency = Currency.TRY.ToString();
            request.Installment = 1;
            request.BasketId = "B67832";
            request.PaymentChannel = PaymentChannel.WEB.ToString();
            request.PaymentGroup = PaymentGroup.PRODUCT.ToString();
            request.CallbackUrl = "https://www.merchant.com/callback";

            PaymentCard paymentCard = new PaymentCard();
            paymentCard.CardHolderName = "John Doe";
            paymentCard.CardNumber = "5528790000000008";
            paymentCard.ExpireMonth = "12";
            paymentCard.ExpireYear = "2030";
            paymentCard.Cvc = "123";
            paymentCard.RegisterCard = 0;
            request.PaymentCard = paymentCard;

            Buyer buyer = new Buyer();
            buyer.Id = "BY789";
            buyer.Name = "John";
            buyer.Surname = "Doe";
            buyer.GsmNumber = "+905350000000";
            buyer.Email = "*****@*****.**";
            buyer.IdentityNumber = "74300864791";
            buyer.LastLoginDate = "2015-10-05 12:43:35";
            buyer.RegistrationDate = "2013-04-21 15:12:09";
            buyer.RegistrationAddress = "Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1";
            buyer.Ip = "85.34.78.112";
            buyer.City = "Istanbul";
            buyer.Country = "Turkey";
            buyer.ZipCode = "34732";
            request.Buyer = buyer;

            Address shippingAddress = new Address();
            shippingAddress.ContactName = "Jane Doe";
            shippingAddress.City = "Istanbul";
            shippingAddress.Country = "Turkey";
            shippingAddress.Description = "Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1";
            shippingAddress.ZipCode = "34742";
            request.ShippingAddress = shippingAddress;

            Address billingAddress = new Address();
            billingAddress.ContactName = "Jane Doe";
            billingAddress.City = "Istanbul";
            billingAddress.Country = "Turkey";
            billingAddress.Description = "Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1";
            billingAddress.ZipCode = "34742";
            request.BillingAddress = billingAddress;

            List<BasketItem> basketItems = new List<BasketItem>();
            BasketItem firstBasketItem = new BasketItem();
            firstBasketItem.Id = "BI101";
            firstBasketItem.Name = "Binocular";
            firstBasketItem.Category1 = "Collectibles";
            firstBasketItem.Category2 = "Accessories";
            firstBasketItem.ItemType = BasketItemType.PHYSICAL.ToString();
            firstBasketItem.Price = "0.3";
            basketItems.Add(firstBasketItem);

            BasketItem secondBasketItem = new BasketItem();
            secondBasketItem.Id = "BI102";
            secondBasketItem.Name = "Game code";
            secondBasketItem.Category1 = "Game";
            secondBasketItem.Category2 = "Online Game Items";
            secondBasketItem.ItemType = BasketItemType.VIRTUAL.ToString();
            secondBasketItem.Price = "0.5";
            basketItems.Add(secondBasketItem);

            BasketItem thirdBasketItem = new BasketItem();
            thirdBasketItem.Id = "BI103";
            thirdBasketItem.Name = "Usb";
            thirdBasketItem.Category1 = "Electronics";
            thirdBasketItem.Category2 = "Usb / Cable";
            thirdBasketItem.ItemType = BasketItemType.PHYSICAL.ToString();
            thirdBasketItem.Price = "0.2";
            basketItems.Add(thirdBasketItem);
            request.BasketItems = basketItems;

            ThreedsInitialize threedsInitialize = ThreedsInitialize.Create(request, options);

            PrintResponse<ThreedsInitialize>(threedsInitialize);

            Assert.AreEqual(Status.SUCCESS.ToString(), threedsInitialize.Status);
            Assert.AreEqual(Locale.TR.ToString(), threedsInitialize.Locale);
            Assert.AreEqual("123456789", threedsInitialize.ConversationId);
            Assert.IsNotNull(threedsInitialize.SystemTime);
            Assert.IsNull(threedsInitialize.ErrorCode);
            Assert.IsNull(threedsInitialize.ErrorMessage);
            Assert.IsNull(threedsInitialize.ErrorGroup);
            Assert.IsNotNull(threedsInitialize.HtmlContent);
        }