public MpesaResponse MnauriRequest(MpesaRequest req) { MpesaResponse resp = new MpesaResponse(); try { if (req == null) { return(new MpesaResponse { message = "Request cannt be empty!!!!!!!!!!!" }); } string data = ""; resp = makeRequest(req); //string data = new StreamReader(HttpContext.Request.Body);// Request.Content.ReadAsStringAsync(); using (StreamReader stream = new StreamReader(HttpContext.Request.Body)) { data = stream.ReadToEnd(); // body = "param=somevalue¶m2=someothervalue" } Util.LogError("MpesaResponse", new Exception(data), false); if (!string.IsNullOrEmpty(data)) { Util.LogError("MpesaResponse", new Exception(data)); } if (resp.ResponseCode == "0") { resp.message = "wahala!!!"; } return(resp); } catch (Exception ex) { Util.LogError("MpesaResponse", ex); } return(resp); }
public MpesaResponse makeRequest(MpesaRequest req) { //this url,consumer key , secret key should be fetched from a db for easier management string authUrl = "https://sandbox.safaricom.co.ke/oauth/v1/generate?grant_type=client_credentials"; string consumerkey = "9HUN5NOlioAZdjhEofAyFD0nr4j69xQv"; string consumersecret = "LK2iIjCN3a4G4a6P"; String timeStamp = "20181101101948";// format to generate DateTime.Now.ToString("yyyyMMddHHmmss"); string Password = ""; Encoding iso = Encoding.GetEncoding("ISO-8859-1"); Encoding utf8 = Encoding.UTF8; byte[] utfBytes = utf8.GetBytes(consumerkey + consumersecret); byte[] isoBytes = Encoding.Convert(Encoding.UTF8, iso, utfBytes); string d = Convert.ToBase64String(isoBytes); string authToken = GetMPesaAuthToken(authUrl, consumerkey, consumersecret); if (string.IsNullOrEmpty(authToken)) { return new MpesaResponse { ResultCode = "1", message = "Failed to get auth token!" } } ; //password string pass = req.BusinessShortCode + "bfb279f9aa9bdbcf158e97dd71a467cd2e0c893059b10f78e6b72ada1ed2c919" + "20181101101948"; byte[] passutfBytes = utf8.GetBytes(pass); byte[] passisoBytes = Encoding.Convert(Encoding.UTF8, iso, passutfBytes); Password = Convert.ToBase64String(passisoBytes); MpesaResponse resp = new MpesaResponse(); //----- Post main transaction -- add record to db --ones posted update txn status -- MpesaRequest postModel = new MpesaRequest { PostUrl = "https://sandbox.safaricom.co.ke/mpesa/stkpush/v1/processrequest", BusinessShortCode = req.BusinessShortCode, Password = Password, Timestamp = timeStamp, TransactionType = "CustomerPayBillOnline", Amount = "310", PartyA = "254707318620", PartyB = req.BusinessShortCode, PhoneNumber = "254707318620", CallBackURL = "http://8ba878d9.ngrok.io/Mpesa/api/v1/Mpesa/LipaOnline", AccountReference = "MN2018", TransactionDesc = "this is a test" }; var jsonData = JsonConvert.SerializeObject(postModel); //============================================= Util.LogError("PostMnauri mpesa request:Data ", new Exception(jsonData), false); //=============================================== var postResp = DoPost(jsonData, authToken, postModel.PostUrl); //============================================= Util.LogError("PostMnauri mpesa request >> ", new Exception(postResp), false); //=============================================== if (postResp.StartsWith("Error!")) { return(new MpesaResponse { ResponseCode = "140", ResponseDescription = postResp }); } else { var respData = JsonConvert.DeserializeObject <MpesaResponse>(postResp); return(respData); } }