private void setupPayment() { try { string accessKey = ConfigurationManager.AppSettings["accesskey"]; string secretKey = ConfigurationManager.AppSettings["secretkey"]; string environment = ConfigurationManager.AppSettings["environment"]; layerAPI = new clsLayer(accessKey, secretKey, environment); data = new clsPaymentData(); data.amount = Convert.ToDecimal(ConfigurationManager.AppSettings["sampleDataAmount"]); data.currency = ConfigurationManager.AppSettings["sampleDataCurrency"].ToString(); data.name = ConfigurationManager.AppSettings["sampleDataName"].ToString(); data.contact_number = ConfigurationManager.AppSettings["sampleDataContactNumber"].ToString(); data.email_id = ConfigurationManager.AppSettings["sampleDataEmail"].ToString(); data.mtx = DateTime.Now.ToString("yyyyMMdd") + "-" + new Random().Next(1000, 9999).ToString(); JObject jObject = new JObject(); JObject jObjectToken = new JObject(); //create payment token var result = layerAPI.CreatePaymentToken(data); jObject = JsonConvert.DeserializeObject <JObject>(result); string errMessage = ""; if (jObject["error"] != null) { errMessage = "E55 Payment error. " + jObject.GetValue("error").ToString(); //add code for error list if (jObject["error_data"] != null) { foreach (JProperty p in jObject["error_data"]) { string e = p.Value.ToString().Replace("\r", "").Replace("\n", "").Replace("[", "").Replace("]", "").Trim(); errMessage += " " + e; } } } if (errMessage == "" && jObject["id"] != null && jObject.GetValue("id").ToString() == "") { errMessage = "Payment error. Layer token ID cannot be empty."; } if (errMessage == "") { //check that the payment is setup correctly and has not been pad var resultToken = layerAPI.GetPaymentToken(jObject.GetValue("id").ToString()); jObjectToken = JsonConvert.DeserializeObject <JObject>(result); if (jObjectToken["error"] != null) { errMessage = "E56 Payment error. " + jObjectToken.GetValue("error").ToString(); //add code for error list } if (errMessage == "" && jObjectToken["status"] != null && jObject.GetValue("status").ToString() == "paid") { errMessage = "Layer: this order has already been paid."; } if (errMessage == "" && jObjectToken["amount"] != null && Convert.ToDecimal(jObjectToken.GetValue("amount")) != Convert.ToDecimal(jObject.GetValue("amount"))) { errMessage = "Layer: an amount mismatch occurred"; } } if (errMessage.Length > 0) { lblError.Text = errMessage; return; } //setup hidden values string paymentTokenId = jObjectToken.GetValue("id").ToString(); string amount = (Convert.ToDecimal(jObjectToken.GetValue("amount"))).ToString("#0.00"); //create hash string hashValue = layerAPI.CreateHash(paymentTokenId, Convert.ToDecimal(jObjectToken.GetValue("amount")), data.mtx); layer_pay_token_id.Value = paymentTokenId; tranid.Value = data.mtx; layer_order_amount.Value = amount; layer_payment_id.Value = ""; fallback_url.Value = ""; hash.Value = hashValue; key.Value = layerAPI.accessKey; } catch (Exception ex) { lblError.Text = "Error: " + ex.Message; } }
private string verifyPayment() { try { string accessKey = ConfigurationManager.AppSettings["accesskey"]; string secretKey = ConfigurationManager.AppSettings["secretkey"]; string environment = ConfigurationManager.AppSettings["environment"]; layerAPI = new clsLayer(accessKey, secretKey, environment); string status = ""; string paymentId = Request.Params["layer_payment_id"]; if (string.IsNullOrEmpty(paymentId)) { status = "Invalid response."; } decimal amount = 0; if (status == "" && decimal.TryParse(Request.Params["layer_order_amount"], out amount) == false) { status = "Invalid response."; } string transactionId = Request.Params["tranid"]; if (status == "" && string.IsNullOrEmpty(transactionId)) { status = "Invalid response."; } string paymentTokenId = Request.Params["layer_pay_token_id"]; if (status == "" && string.IsNullOrEmpty(transactionId)) { status = "Invalid response."; } //calculate and compare hash string hashValue = layerAPI.CreateHash(paymentTokenId, amount, transactionId); if (status == "" && hashValue != Request.Params["hash"]) { status = "Invalid hash"; } if (status == "") { var result = layerAPI.GetPaymentDetails(paymentId); JObject jObject = JsonConvert.DeserializeObject <JObject>(result); if (jObject["error"] != null) { status = "Layer: an error occurred E14" + jObject.GetValue("error").ToString(); } if (status == "" && (jObject["id"] == null || jObject.GetValue("id").ToString() == "")) { status = "Invalid payment data received E98"; } if (status == "" && jObject["payment_token"]["id"].ToString() != paymentTokenId) { status = "Layer: received layer_pay_token_id and collected layer_pay_token_id doesnt match"; } if (status == "" && Convert.ToDecimal(jObject.GetValue("amount")) != amount) { status = "Layer: received amount and collected amount doesnt match"; } if (status == "") { string id = jObject.GetValue("id").ToString(); switch (jObject.GetValue("status").ToString()) { case "authorized": case "captured": status = "Payment captured: Payment ID " + id; break; case "failed": case "cancelled": status = "Payment cancelled/failed: Payment ID " + id; break; default: status = "Payment pending: Payment ID " + id; break; } } } return(status); } catch (Exception ex) { return("Error: " + ex.Message); } }