Esempio n. 1
0
        public async Task DoDirectPaymentAsync_by_customerId_requests_proper_api()
        {
            // arrange
            var aRequest = new CustomerDirectPaymentRequest
            {
                Amount        = 1024,
                TransactionId = Guid.NewGuid().ToString(),
                CustomerId    = Guid.NewGuid().ToString(),
            };
            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 <CustomerDirectPaymentRequest, Payment>(
                        It.Is <IamportRequest <CustomerDirectPaymentRequest> >(req =>
                                                                               req.Method == HttpMethod.Post &&
                                                                               req.Content == aRequest &&
                                                                               req.ApiPathAndQueryString.EndsWith($"subscribe/payments/again"))));
        }
Esempio n. 2
0
        /// <summary>
        /// [POST] /subscribe/payments/again
        /// iamport: 저장된 빌링키로 재결제를 하는 경우 사용됩니다. /subscribe/payments/onetime 또는 /subscribe/customers/{customer_uid} 로 등록된 빌링키가 있을 때 매칭되는 customer_uid로 재결제를 진행할 수 있습니다.
        /// </summary>
        /// <param name="request">저장된 구매자 정보로 결제를 요청하는 정보</param>
        /// <returns>결제 결과</returns>
        public async Task <Payment> DoDirectPaymentAsync(CustomerDirectPaymentRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            ValidateObject(request);
            var iamportRequest = new IamportRequest <CustomerDirectPaymentRequest>
            {
                ApiPathAndQueryString = GetPaymentsPathAndQuerystring("again"),
                Content = request,
                Method  = HttpMethod.Post
            };

            return(await SendRequestAsync <CustomerDirectPaymentRequest, Payment>(iamportRequest));
        }
Esempio n. 3
0
        public async Task DoDirectPaymentAsync_by_customerId_throws_ValidationException(
            decimal amount,
            string transactionId,
            string customerId)
        {
            // arrange
            var aRequest = new CustomerDirectPaymentRequest
            {
                Amount        = amount,
                TransactionId = transactionId,
                CustomerId    = customerId,
            };
            var client = Mock.Of <IIamportClient>();
            var sut    = new SubscribeApi(client);

            // act/assert
            await Assert.ThrowsAsync <ValidationException>(
                () => sut.DoDirectPaymentAsync(aRequest));
        }