public override void ProcessRequest() { string strRequest = context.Request.GetFromBodyString(); JObject request = JObject.Parse(strRequest); //Set variables Category = request["category"].ToString(); ProductName = request["productName"].ToString(); Value = request["value"].ToString(); Status = request["status"].ToString(); var Metadata = request["requestMetadata"]; CommandName = Metadata["command"].ToString(); Args = Metadata["args"].ToString(); Amount = Value.Split(' ')[1]; Currency = Value.Split(' ')[0]; if (Category == "MobileCheckout") { TransactionID = request["providerRefId"].ToString(); try { //Check IPs //CheckIP(); //Check duplicated transactions CheckIfNotDoneYet(TransactionID); //Check if we are the merchant CheckMerchant(MPesaAccountDetails.Exists(ProductName)); //Check currency CheckCurrency(Currency); //Check status CheckStatus(Status, "Success"); //All OK, let's proceed Assembly assembly = Assembly.GetAssembly(typeof(IIpnHandler)); var type = assembly.GetType(CommandName, true, true); IIpnHandler command = Activator.CreateInstance(type) as IIpnHandler; command.HandleMPesa(Args, TransactionID, Amount); } catch (Exception ex) { ErrorLogger.Log(ex); } } }
/// <summary> /// Creates some general payza button /// </summary> /// <param name="itemName">Name describing the item or service. Max Length: 50 characters</param> /// <param name="amount">The price or cost of the product or service. The value for /// amount must be positive. Null or negative numbers are not allowed.</param> /// <param name="command">Describes how handler should handle IPN request. /// Stored in field apc_1. Max Length: 100 characters</param> /// <param name="args"> /// Custom values you can pass along with the payment button. /// The values are not displayed to the payer on our Pay Process page. /// Payza returns these fields back in the IPN. /// Used by IIpnHandler ('command') /// Stored in fields apc_2 - apc_6. Max Length: 100 characters /// </param> /// <returns>Http address where member should be redirected after clicking button.</returns> protected override string generate(string itemName, Money amount, string command, object[] args) { MPesaAccountDetails accountDetails = PaymentAccountDetails.GetFirstIncomeGateway <MPesaAccountDetails>(); if (Member.IsLogged) { AfricasTalkingGateway gateway = new AfricasTalkingGateway(accountDetails.Username, accountDetails.ApiKey); Dictionary <string, string> metadata = new Dictionary <string, string>(); metadata.Add("itemName", itemName); metadata.Add("command", command); metadata.Add("args", String.Join(ButtonGenerationStrategy.ArgsDelimeter.ToString(), args)); var reply = gateway.initiateMobilePaymentCheckout(accountDetails.ProductName, Member.CurrentInCache.GetPaymentAddress(PaymentProcessor.MPesa), AppSettings.Site.CurrencyCode, amount.ToDecimal(), metadata); } string url = String.Empty; return(url); }
public MPesaButtonGenerationStrategy(MPesaAccountDetails mPesa) { account = mPesa; }