private async Task ExecuteMpesaStkCommand()
        {
            try
            {
                var mpesaPayment = new LipaNaMpesaOnline
                                   (
                    businessShortCode: mpesaAPIConfiguration.LNMOshortCode,
                    timeStamp: DateTime.Now,
                    transactionType: Transaction_Type.CustomerPayBillOnline,
                    amount: Amount,
                    partyA: PhoneNumber,
                    partyB: mpesaAPIConfiguration.LNMOshortCode,
                    phoneNumber: PhoneNumber,
                    callBackUrl: mpesaAPIConfiguration.CallBackUrl.Replace("{requestId}", Guid.NewGuid().ToString()),
                    accountReference: AccountReference,
                    transactionDescription: TransactionDescription,
                    passkey: mpesaAPIConfiguration.PassKey
                                   );

                var stkResults = await _mpesaClient.MakeLipaNaMpesaOnlinePaymentAsync(mpesaPayment, await RetrieveAccessToken(), MpesaRequestEndpoint.LipaNaMpesaOnline);

                stkResults.PhoneNumber = PhoneNumber;

                var navigationParams = new NavigationParameters();
                navigationParams.Add("PushSTKResponse", JsonConvert.SerializeObject(stkResults));
                await _navigationService.NavigateAsync("MpesaResultsPage", navigationParams);
            }
            catch (MpesaAPIException ex)
            {
                Device.BeginInvokeOnMainThread(() =>
                {
                    _dialogs.Alert(new AlertConfig()
                                   .SetMessage(ex.Message.ToString())
                                   .SetTitle(ex.StatusCode.ToString()));
                });
            }
            catch (Exception ex)
            {
                Device.BeginInvokeOnMainThread(() =>
                {
                    _dialogs.Alert(new AlertConfig()
                                   .SetMessage(ex.Message.ToString())
                                   .SetTitle("Error"));
                });
            }
        }
        public async Task <IActionResult> MpesaPayment(LipaNaMpesaOnlineViewModel lipaNaMpesaOnline)
        {
            LipaNaMpesaOnlinePushStkResponse mpesaPaymentRequest;

            try
            {
#if DEBUG
                var generatedCallBackUrl = _mpesaApiConfiguration.CallBackUrl.Replace("{requestId}", Guid.NewGuid().ToString());
#else
                var generatedCallBackUrl = _linkGenerator.GetUriByAction(_httpContextAccessor.HttpContext,
                                                                         action: nameof(APIControllers.PaymentCallbackController.LipaNaMpesaCallback),
                                                                         controller: nameof(APIControllers.PaymentCallbackController).Replace("Controller", ""),
                                                                         values: new { requestId = Guid.NewGuid() },
                                                                         scheme: Request.Scheme);
#endif
                var mpesaPayment = new LipaNaMpesaOnline
                                   (
                    businessShortCode: _mpesaApiConfiguration.LNMOshortCode,
                    timeStamp: DateTime.Now,
                    transactionType: Transaction_Type.CustomerPayBillOnline,
                    amount: lipaNaMpesaOnline.Amount,
                    partyA: lipaNaMpesaOnline.PhoneNumber,
                    partyB: _mpesaApiConfiguration.LNMOshortCode,
                    phoneNumber: lipaNaMpesaOnline.PhoneNumber,
                    callBackUrl: generatedCallBackUrl,
                    accountReference: lipaNaMpesaOnline.AccountReference,
                    transactionDescription: lipaNaMpesaOnline.TransactionDesc,
                    passkey: _mpesaApiConfiguration.PassKey
                                   );

                mpesaPaymentRequest = await _mpesaClient.MakeLipaNaMpesaOnlinePaymentAsync(mpesaPayment, await RetrieveAccessToken(), MpesaRequestEndpoint.LipaNaMpesaOnline);
            }
            catch (MpesaAPIException ex)
            {
                _logger.LogError(ex, ex.Message);
                return(View().WithDanger("Error", ex.Message));
            }

            var pushStkResponse = mpesaPaymentRequest;
            pushStkResponse.PhoneNumber = lipaNaMpesaOnline.PhoneNumber;

            return(RedirectToAction(nameof(ShowMpesaResult), pushStkResponse).WithInfo("Info", "Please wait for confirmation message to arrive on your phone."));
        }
Esempio n. 3
0
        public async Task <IActionResult> LNMO(IFormCollection collection)
        {
            LipaNaMpesaOnlineDto lipaOnline = new LipaNaMpesaOnlineDto
                                              (
                _configuration["MpesaConfiguration:LNMOshortCode"],
                DateTime.Now,
                TransactType.CustomerPayBillOnline,
                collection["amount"],
                collection["phone_number"],
                _configuration["MpesaConfiguration:LNMOshortCode"],
                collection["phone_number"],
                _configuration["MpesaConfiguration:CallBackUrl"],
                "MpesaLib Sample",
                "MpesaLib Sample",
                PassKey

                                              );

            var lipaNaMpesa = "";

            try
            {
                lipaNaMpesa = await _mpesaClient.MakeLipaNaMpesaOnlinePaymentAsync(lipaOnline, AccessToken, RequestEndPoint.LipaNaMpesaOnline);
            }
            catch (MpesaApiException ex)
            {
                _logger.LogError(ex.Content);
                return(BadRequest());
            }



            //ViewData["Message2"] = lipaNaMpesa;

            return(RedirectToAction("ShowMpesaResult", new { response = lipaNaMpesa, customerNumber = collection["phone_number"], invoicenumber = collection["invoice_number"] }));
        }