예제 #1
0
        public async Task <bool> CreateSubscriptionAsync(string customerId, string customerName, string iban, PaymentMethod paymentMethod, string description, DateTime startDate, decimal amount, string interval, int?times, string webhookUrl)
        {
            var result = false;

            var mandateClient = GetMandateClient();

            // Create "mandate" via Mollie to be able to create a customer subscription.
            // Mandates allow you to charge a customer’s credit card or bank account recurrently.
            var mandateRequest = new MandateRequest
            {
                ConsumerName    = customerName,
                ConsumerAccount = iban,
                Method          = paymentMethod
            };

            MandateResponse mandateResponse = await mandateClient.CreateMandateAsync(customerId, mandateRequest);

            if (mandateResponse.Status == MandateStatus.Valid)
            {
                // Create your customer payment record here

                var mollieSettings = _configuration.GetSection("Mollie");
                var currency       = mollieSettings.GetValue <string>("DefaultCurrency");

                var subscriptionRequest = new SubscriptionRequest
                {
                    Amount = new Amount
                    {
                        Currency = currency,
                        Value    = amount.ToString()
                    },
                    Description = description,
                    StartDate   = startDate,
                    Method      = paymentMethod,
                    Interval    = interval,  // Interval to wait between charges like 1 month(s) or 14 days
                    Times       = times,     // Total number of charges for the subscription to complete. Leave empty for an on-going subscription
                    WebhookUrl  = webhookUrl // The url that Mollie calls with the payment id when the payment status changes.
                };

                var subscriptionClient = GetSubscriptionClient();

                SubscriptionResponse subscriptionResponse = await subscriptionClient.CreateSubscriptionAsync(customerId, subscriptionRequest);

                if (subscriptionResponse.Status == SubscriptionStatus.Active)
                {
                    // Update your customer payment record here with new subscription Id

                    result = true;
                }
            }

            return(result);
        }
예제 #2
0
        private MandateResponse CreateMandate(APIClient client)
        {
            var reference = BankAccountTester.CreateAccount(client, UserId);
            var mandate   = new MandateRequest
            {
                BankAccount = reference,
                UrlReturn   = "http://example.com/dummy/Mandate"
            };

            var result = client.PostMandate(mandate, UserId);

            Assert.IsNotNull(result);
            Assert.Greater(result.Id, 0);
            Assert.AreEqual(reference.Id, result.BankAccount.Id);
            return(result);
        }
예제 #3
0
        public async Task CanCreateMandate()
        {
            // We can only test this if there are customers
            ListResponse <CustomerResponse> customers = await fixture.CustomerClient.GetCustomerListAsync();

            if (customers.TotalCount > 0)
            {
                // If: We create a new mandate request
                MandateRequest mandateRequest = new MandateRequest()
                {
                    ConsumerAccount = "NL26ABNA0516682814",
                    ConsumerName    = "John Doe"
                };

                // When: We send the mandate request
                MandateResponse mandateResponse = await fixture.MandateClient.CreateMandateAsync(customers.Data.First().Id, mandateRequest);

                // Then: Make sure we created a new mandate
                Assert.Equal(mandateRequest.ConsumerAccount, mandateResponse.Details.ConsumerAccount);
                Assert.Equal(mandateRequest.ConsumerName, mandateResponse.Details.ConsumerName);
            }
        }
예제 #4
0
 public Task <MandateResponse> CreateMandateAsync(string customerId, MandateRequest request) =>
 ClientService.PostAsync <MandateResponse>($"customers/{customerId}/mandates", request);
예제 #5
0
 public async Task <MandateResponse> CreateMandateAsync(string customerId, MandateRequest request)
 {
     return(await this._mandateClient.CreateMandateAsync(customerId, request));
 }
예제 #6
0
        public MandateResponse PostMandate(MandateRequest mandate, string userId = null)
        {
            var uri = CreateUri(userId, mandates);

            return(PostAsync <MandateRequest, MandateResponse>(uri, mandate));
        }
예제 #7
0
        public async Task <MandateResponse> Create(string customerId)
        {
            MandateRequest mandateRequest = this.CreateDefaultMandateRequest();

            return(await this._mandateClient.CreateMandateAsync(customerId, mandateRequest));
        }
예제 #8
0
 public async Task <MandateResponse> CreateMandateAsync(string customerId, MandateRequest request)
 {
     return(await this.PostAsync <MandateResponse>($"customers/{customerId}/mandates", request)
            .ConfigureAwait(false));
 }
 public Dictionary <string, object> RejectMandate([FromBody] MandateRequest MandateRequestData)
 {
     return(objRBLMandateRequest.RejectMandate(MandateRequestData));
 }
 public Dictionary <string, object> ProcessedMandateResponseShowRespons([FromBody] MandateRequest MandateRequestData)
 {
     return(objRBLMandateRequest.ProcessedMandateResponseShowRespons(MandateRequestData));
 }
 public Dictionary <string, object> UpdateHeaderStatus([FromBody] MandateRequest MandateRequestData)
 {
     return(objRBLMandateRequest.UpdateHeaderStatus(MandateRequestData));
 }
 public Dictionary <string, object> UnderProcessDetails([FromBody] MandateRequest MandateRequestData)
 {
     return(objRBLMandateRequest.UnderProcessDetails(MandateRequestData));
 }
 public Dictionary <string, object> BindGrid([FromBody] MandateRequest MandateRequestData)
 {
     return(objRBLMandateRequest.BindGrid(MandateRequestData));
 }