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.")); }
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"] })); }