Ejemplo n.º 1
0
        public async Task SchedulePaymentsAsync_requests_proper_api()
        {
            // arrange
            var aRequest = new SchedulePaymentsRequest
            {
                CustomerId = Guid.NewGuid().ToString(),
                Schedules  = new PaymentSchedule[]
                {
                    new PaymentSchedule
                    {
                        Amount        = 1024,
                        ScheduleAt    = DateTime.UtcNow.AddDays(30),
                        TransactionId = Guid.NewGuid().ToString(),
                    },
                    new PaymentSchedule
                    {
                        Amount        = 1024,
                        ScheduleAt    = DateTime.UtcNow.AddDays(60),
                        TransactionId = Guid.NewGuid().ToString(),
                    },
                }
            };
            var expectedResult = new IamportResponse <ScheduledPayment[]>
            {
                HttpStatusCode = HttpStatusCode.OK,
                Content        = new ScheduledPayment[]
                {
                    new ScheduledPayment
                    {
                        TransactionId = aRequest.Schedules[0].TransactionId,
                        Amount        = aRequest.Schedules[0].Amount,
                        ScheduleAt    = aRequest.Schedules[0].ScheduleAt,
                    },
                    new ScheduledPayment
                    {
                        TransactionId = aRequest.Schedules[1].TransactionId,
                        Amount        = aRequest.Schedules[1].Amount,
                        ScheduleAt    = aRequest.Schedules[1].ScheduleAt,
                    },
                }
            };
            var client = GetMockClient(aRequest, expectedResult);
            var sut    = new SubscribeApi(client);

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

            // assert
            Mock.Get(client)
            .Verify(mocked =>
                    mocked.RequestAsync <SchedulePaymentsRequest, ScheduledPayment[]>(
                        It.Is <IamportRequest <SchedulePaymentsRequest> >(req =>
                                                                          req.Method == HttpMethod.Post &&
                                                                          req.Content == aRequest &&
                                                                          req.ApiPathAndQueryString.EndsWith($"subscribe/payments/schedule"))));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// [POST] /subscribe/payments/schedule
        /// iamport: 비인증 결제요청을 미리 예약해두면 아임포트가 자동으로 해당 시간에 맞춰 결제를 진행하는 방식입니다.(/subscribe/payments/again 를 아임포트가 대신 수행하는 개념)
        ///        결제가 이뤄지고나면 Notification URL로 결제성공/실패 결과를 POST request로 보내드립니다.
        ///
        /// 1. 기존에 빌링키가 등록된 customeruid가 존재하는 경우 해당 customer_uid와 해당되는 빌링키로 schedule정보가 예약됩니다.(카드정보 선택사항)
        /// 2. 등록된 customer_uid가 없는 경우 빌링키 신규 발급을 먼저 진행한 후 schedule정보를 예약합니다.(카드정보 필수사항)
        ///
        /// 예약건 별로 고유의 merchant_uid를 전달해주셔야 합니다.
        ///
        /// schedules의 상세정보(선택정보) buyer_name, buyer_email, buyer_tel, buyer_addr, buyer_postcode는 누락되는 경우에 한해,
        /// customer_uid에 해당되는 customer_name, customer_email, customer_tel, customer_addr, customer_postcode 정보로 대체됩니다.
        /// (buyer 정보는 customer_정보에 우선합니다)
        /// </summary>
        /// <param name="request">스케줄 등록 정보</param>
        /// <returns>등록된 스케줄의 목록</returns>
        public async Task <ScheduledPayment[]> SchedulePaymentsAsync(SchedulePaymentsRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            ValidateObject(request);
            var iamportRequest = new IamportRequest <SchedulePaymentsRequest>
            {
                ApiPathAndQueryString = GetPaymentsPathAndQuerystring("schedule"),
                Content = request,
                Method  = HttpMethod.Post
            };

            return(await SendRequestAsync <SchedulePaymentsRequest, ScheduledPayment[]>(iamportRequest));
        }