Example #1
0
        public async Task DoDirectPaymentAsync_throws_ValidationException(
            decimal amount,
            string transactionId,
            string cardNumber,
            string expiry,
            string authentication,
            string partialPassword)
        {
            // arrange
            var aRequest = new DirectPaymentRequest
            {
                Amount               = amount,
                TransactionId        = transactionId,
                AuthenticationNumber = authentication,
                CardNumber           = cardNumber,
                Expiry               = expiry,
                PartialPassword      = partialPassword,
            };
            var client = Mock.Of <IIamportClient>();
            var sut    = new SubscribeApi(client);

            // act/assert
            await Assert.ThrowsAsync <ValidationException>(
                () => sut.DoDirectPaymentAsync(aRequest));
        }
Example #2
0
        /// <summary>
        /// [POST] /subscribe/payments/onetime
        /// iamport: 구매자로부터 별도의 인증과정을 거치지 않고, 카드정보만으로 결제를 진행하는 API입니다(아임포트 javascript가 필요없습니다).
        /// customer_uid를 전달해주시면 결제 후 다음 번 결제를 위해 성공된 결제에 사용된 빌링키를 저장해두게되고, customer_uid가 없는 경우 저장되지 않습니다.
        /// 동일한 merchant_uid는 재사용이 불가능하며 고유한 값을 전달해주셔야 합니다.
        /// </summary>
        /// <param name="request">간편 결제 정보</param>
        /// <returns>결제 결과</returns>
        public async Task <Payment> DoDirectPaymentAsync(DirectPaymentRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            ValidateObject(request);
            var iamportRequest = new IamportRequest <DirectPaymentRequest>
            {
                ApiPathAndQueryString = GetPaymentsPathAndQuerystring("onetime"),
                Content = request,
                Method  = HttpMethod.Post
            };

            return(await SendRequestAsync <DirectPaymentRequest, Payment>(iamportRequest));
        }
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public MessageList paymentRequest(DirectPaymentRequest directPaymentRequest, EasypayConfig config) throws java.net.MalformedURLException
		public virtual MessageList paymentRequest(DirectPaymentRequest directPaymentRequest, EasypayConfig config)
		{

			URL url = new URL("https://" + config.Host);
			string httpRequestMethod = "POST";
			string contentHash = "xxx";
			string contentType = "??";
			string date = "";
			string path = "";

			HttpURLConnection urlConnection = null;
			try
			{
				urlConnection = (HttpURLConnection) url.openConnection();

				urlConnection.RequestMethod = httpRequestMethod;
				urlConnection.setRequestProperty("Content-Type", contentType);
				// urlConnection.setRequestProperty("Content-Length", "" + Integer.toString(postData.getBytes().length));

				urlConnection.UseCaches = false;
				urlConnection.DoInput = true;
				urlConnection.DoOutput = true;

				System.IO.Stream @out = new BufferedOutputStream(urlConnection.OutputStream);
				// writeStream(out);

				System.IO.Stream @in = new BufferedInputStream(urlConnection.InputStream);
				// readStream(in);


			}
			catch (IOException e)
			{
				Console.WriteLine(e.ToString());
				Console.Write(e.StackTrace);
			}
			finally
			{
				if (urlConnection != null)
				{
					urlConnection.disconnect();
				}
			}
			return new MessageList();
		}
Example #4
0
        public void CreateCustomer_Direct_InvokeDirectPayment_MethodCreateTokenCustomer()
        {
            var mockRapidApiClient             = new Mock <IRapidService>();
            var rapidSdkClient                 = new RapidClient(mockRapidApiClient.Object);
            DirectPaymentRequest assertRequest = null;
            //Arrange
            var customer = TestUtil.CreateCustomer();

            mockRapidApiClient.Setup(x => x.IsValid()).Returns(true);
            mockRapidApiClient.Setup(x => x.DirectPayment(It.IsAny <DirectPaymentRequest>()))
            .Callback <DirectPaymentRequest>(i => assertRequest = i)
            .Returns(new DirectPaymentResponse()).Verifiable();
            //Act
            rapidSdkClient.Create(PaymentMethod.Direct, customer);
            //Assert
            mockRapidApiClient.Verify();
            Assert.IsNotNull(assertRequest);
            Assert.AreEqual(assertRequest.Method, Method.CreateTokenCustomer);
        }
        public void CreateTransaction_Direct_CaptureFalse_InvokeDirectPayment_MethodAuthorise()
        {
            var mockRapidApiClient             = new Mock <IRapidService>();
            var rapidSdkClient                 = new RapidClient(mockRapidApiClient.Object);
            DirectPaymentRequest assertRequest = null;
            //Arrange
            var transaction = TestUtil.CreateTransaction(false);

            mockRapidApiClient.Setup(x => x.IsValid()).Returns(true);
            mockRapidApiClient.Setup(x => x.DirectPayment(It.IsAny <DirectPaymentRequest>()))
            .Callback <DirectPaymentRequest>(i => assertRequest = i)
            .Returns(new DirectPaymentResponse()).Verifiable();
            //Act
            rapidSdkClient.Create(PaymentMethod.Direct, transaction);
            //Assert
            mockRapidApiClient.Verify();
            Assert.IsNotNull(assertRequest);
            Assert.AreEqual(assertRequest.Method, Method.Authorise);
        }
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public MessageList paymentRequest(DirectPaymentRequest directPaymentRequest, EasypayConfig config) throws java.net.MalformedURLException
        public virtual MessageList paymentRequest(DirectPaymentRequest directPaymentRequest, EasypayConfig config)
        {
            URL    url = new URL("https://" + config.Host);
            string httpRequestMethod = "POST";
            string contentHash       = "xxx";
            string contentType       = "??";
            string date = "";
            string path = "";

            HttpURLConnection urlConnection = null;

            try
            {
                urlConnection = (HttpURLConnection)url.openConnection();

                urlConnection.RequestMethod = httpRequestMethod;
                urlConnection.setRequestProperty("Content-Type", contentType);
                // urlConnection.setRequestProperty("Content-Length", "" + Integer.toString(postData.getBytes().length));

                urlConnection.UseCaches = false;
                urlConnection.DoInput   = true;
                urlConnection.DoOutput  = true;

                System.IO.Stream @out = new BufferedOutputStream(urlConnection.OutputStream);
                // writeStream(out);

                System.IO.Stream @in = new BufferedInputStream(urlConnection.InputStream);
                // readStream(in);
            }
            catch (IOException e)
            {
                Console.WriteLine(e.ToString());
                Console.Write(e.StackTrace);
            }
            finally
            {
                if (urlConnection != null)
                {
                    urlConnection.disconnect();
                }
            }
            return(new MessageList());
        }
Example #7
0
        public void CreateCustomer_Direct_InvokeSecureFields_MethodCreateTokenCustomer()
        {
            var mockRapidApiClient             = new Mock <IRapidService>();
            var rapidSdkClient                 = new RapidClient(mockRapidApiClient.Object);
            DirectPaymentRequest assertRequest = null;
            //Arrange
            var customer = TestUtil.CreateCustomer();

            customer.SecuredCardData = "44DD7jYYyRgaQnVibOAsYbbFIYmSXbS6hmTxosAhG6CK1biw=";
            mockRapidApiClient.Setup(x => x.IsValid()).Returns(true);
            mockRapidApiClient.Setup(x => x.DirectPayment(It.IsAny <DirectPaymentRequest>()))
            .Callback <DirectPaymentRequest>(i => assertRequest = i)
            .Returns(new DirectPaymentResponse()).Verifiable();
            //Act
            rapidSdkClient.Create(PaymentMethod.Direct, customer);
            //Assert
            mockRapidApiClient.Verify();
            Assert.IsNotNull(assertRequest);
            Assert.AreEqual(assertRequest.Method, Method.CreateTokenCustomer);
            Assert.AreEqual(assertRequest.SecuredCardData, customer.SecuredCardData);
        }
Example #8
0
        public async Task DoDirectPaymentAsync_requests_proper_api()
        {
            // arrange
            var aRequest = new DirectPaymentRequest
            {
                Amount               = 1024,
                TransactionId        = Guid.NewGuid().ToString(),
                AuthenticationNumber = "123456",
                CardNumber           = "1234-1234-1234-1234",
                Expiry               = "2200-12",
                PartialPassword      = "******",
            };
            var expectedResult = new IamportResponse <Payment>
            {
                HttpStatusCode = HttpStatusCode.OK,
                Content        = new Payment
                {
                    TransactionId = aRequest.TransactionId,
                    Amount        = aRequest.Amount,
                }
            };
            var client = GetMockClient(aRequest, expectedResult);
            var sut    = new SubscribeApi(client);

            // act
            var result = await sut.DoDirectPaymentAsync(aRequest);

            // assert
            Mock.Get(client)
            .Verify(mocked =>
                    mocked.RequestAsync <DirectPaymentRequest, Payment>(
                        It.Is <IamportRequest <DirectPaymentRequest> >(req =>
                                                                       req.Method == HttpMethod.Post &&
                                                                       req.Content == aRequest &&
                                                                       req.ApiPathAndQueryString.EndsWith($"subscribe/payments/onetime"))));
        }
Example #9
0
        public async Task <IActionResult> Index(RequestDirectPaymentModel input)
        {
            if (ModelState.IsValid == false)
            {
                return(View(nameof(Index), input));
            }

            // 비인증 구매는 구매 요청을 즉시 처리 가능.
            var checkout = Models.Checkout.Create(
                name: input.Name,
                amount: input.Amount,
                paymentGateway: input.PaymentGateway,
                isDigital: false,
                useEscrow: false,
                paymentMethod: PaymentMethod.CreditCard,
                customerName: input.CustomerName,
                customerEmail: input.CustomerEmail,
                customerPhoneNumber: input.CustomerPhoneNumber,
                returnUrl: null,
                virtualBankExpirationTime: DateTimeOffset.UtcNow);

            checkoutRepository.Add(checkout);

            var payment = Models.Payment.Create(checkout.Id);

            var request = new DirectPaymentRequest
            {
                CustomerId           = null, // 등록된 사용자 빌링키 없이 한번 진행
                TransactionId        = payment.TransactionId,
                Vat                  = input.Vat,
                Amount               = input.Amount,
                Title                = input.Name,
                CardNumber           = input.CardNumber,
                AuthenticationNumber = input.AuthenticationNumber,
                Expiry               = input.Expiry,
                PartialPassword      = input.PartialPassword,
                InstallmentMonths    = 0,
                BuyerName            = input.CustomerName,
                Email                = input.CustomerEmail,
                PhoneNumber          = input.CustomerPhoneNumber,
                Address              = input.CustomerAddress,
                PostCode             = input.CustomerPostCode,
            };

            Payment iamportPayment = null;

            try
            {
                iamportPayment = await subscribeApi.DoDirectPaymentAsync(request);
            }
            catch (IamportResponseException ex)
            {
                ModelState.AddModelError("iamport", ex.Message);
                return(View(nameof(Index), input));
            }

            paymentRepository.Add(payment);
            RefreshPayment(iamportPayment, payment);

            return(RedirectToAction(nameof(Result), new { transactionId = payment.TransactionId }));
        }
Example #10
0
 public DirectPaymentResponse DirectPayment(DirectPaymentRequest request)
 {
     return JsonPost<DirectPaymentRequest, DirectPaymentResponse>(request, DIRECT_PAYMENT);
 }
Example #11
0
 public DirectPaymentResponse UpdateCustomerDirectPayment(DirectPaymentRequest request)
 {
     request.Method = Method.UpdateTokenCustomer;
     return JsonPut<DirectPaymentRequest, DirectPaymentResponse>(request, DIRECT_PAYMENT);
 }