/* * Build signature for the pingback received * * @param Dictionary<string, string> parameters * @param string secret Paymentwall Secret Key * @param int version Paymentwall Signature Version * @return string */ public string CalculateSignature(Dictionary <string, string> signatureParamsToSign, string secret, int version) { string baseString = ""; signatureParamsToSign.Remove("sig"); if (version == PWPingback.SIGNATURE_VERSION_2 || version == PWPingback.SIGNATURE_VERSION_3) { signatureParamsToSign = signatureParamsToSign.OrderBy(d => d.Key, StringComparer.Ordinal).ToDictionary(d => d.Key, d => d.Value); } foreach (KeyValuePair <string, string> kvp in signatureParamsToSign) { baseString += kvp.Key + "=" + kvp.Value; } baseString += secret; if (version == PWPingback.SIGNATURE_VERSION_3) { return(PWPingback.getHash(baseString, "sha256")); } else { return(PWPingback.getHash(baseString, "md5")); } }
/** * @return bool */ public bool IsSignatureValid() { string signature = ""; Dictionary <string, string> signatureParamsToSign = new Dictionary <string, string>(); if (this.parameters.ContainsKey("sig")) { signature = this.parameters["sig"]; } else { signature = null; } List <string> signatureParams = new List <string>(); if (PWPingback.GetApiType() == PWPingback.API_VC) { signatureParams.AddRange(new string[] { "uid", "currency", "type", "ref" }); } else if (PWPingback.GetApiType() == PWPingback.API_GOODS) { signatureParams.AddRange(new string[] { "uid", "goodsid", "slength", "speriod", "type", "ref" }); } else //API_CART { signatureParams.AddRange(new string[] { "uid", "goodsid", "type", "ref" }); this.parameters["sign_version"] = PWPingback.SIGNATURE_VERSION_2.ToString(); } if (!this.parameters.ContainsKey("sign_version")) //Check if signature version 1 { foreach (string field in signatureParams) { if (this.parameters[field] != null) { signatureParamsToSign.Add(field, this.parameters[field]); } else { signatureParamsToSign.Add(field, null); } } this.parameters["sign_version"] = PWPingback.SIGNATURE_VERSION_1.ToString(); } else { signatureParamsToSign = this.parameters; } string signatureCalculated = this.CalculateSignature(signatureParamsToSign, PWPingback.GetSecretKey(), Convert.ToInt32(this.parameters["sign_version"])); return(signatureCalculated == signature); }
/* * Get required parameters based on API * * @return List<string> */ public List <string> GetRequiredParams() { List <string> requiredParams = new List <string>(); if (PWPingback.GetApiType() == PWPingback.API_VC) { requiredParams.AddRange(new string[] { "uid", "currency", "type", "ref", "sig" }); } else if (PWPingback.GetApiType() == PWPingback.API_GOODS) { requiredParams.AddRange(new string[] { "uid", "goodsid", "type", "ref", "sig" }); } else //API_CART { requiredParams.AddRange(new string[] { "uid", "goodsid[0]", "type", "ref", "sig" }); } return(requiredParams); }