/// <summary> /// 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名 /// </summary> protected virtual void CreateSign() { StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(Parameters.Keys); akeys.Sort(ASCIISort.Create()); foreach (string k in akeys) { string v = (string)Parameters[k]; if (null != v && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0 && "key".CompareTo(k) != 0) { sb.Append(k + "=" + v + "&"); } } sb.Append("key=" + this.GetKey()); string sign = EncryptHelper.GetMD5(sb.ToString(), GetCharset()).ToUpper(); this.SetParameter("sign", sign); //debug信息 this.SetDebugInfo(sb.ToString() + " => sign:" + sign); }
/// <summary> /// 创建sha1签名 /// </summary> /// <returns></returns> public string CreateSHA1Sign() { StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(Parameters.Keys); akeys.Sort(ASCIISort.Create()); foreach (string k in akeys) { string v = (string)Parameters[k]; if (null != v && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0 && "key".CompareTo(k) != 0) { if (sb.Length == 0) { sb.Append(k + "=" + v); } else { sb.Append("&" + k + "=" + v); } } } string paySign = SHA1UtilHelper.GetSha1(sb.ToString()).ToString().ToLower(); //debug信息 this.SetDebugInfo(sb.ToString() + " => sign:" + paySign); return(paySign); }
/// <summary> /// 获取package带参数的签名包 /// </summary> /// <returns></returns> public string GetRequestURL() { this.CreateSign(); StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(Parameters.Keys); akeys.Sort(ASCIISort.Create()); foreach (string k in akeys) { string v = (string)Parameters[k]; if (null != v && "key".CompareTo(k) != 0) { sb.Append(k + "=" + TenPayUtil.UrlEncode(v, GetCharset()) + "&"); } } //去掉最后一个& if (sb.Length > 0) { sb.Remove(sb.Length - 1, 1); } return(sb.ToString()); }
//public virtual string CreateMd5SignForWork(string corpPaySecret,string ) /// <summary> /// 创建sha256摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名 /// </summary> /// <param name="key">参数名</param> /// <param name="value">参数值</param> /// key和value通常用于填充最后一组参数 /// <returns></returns> public virtual string CreateSha256Sign(string key, string value) { var sb = new StringBuilder(); var akeys = new ArrayList(Parameters.Keys); akeys.Sort(ASCIISort.Create()); foreach (string k in akeys) { string v = (string)Parameters[k]; if (null != v && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0 //&& "sign_type".CompareTo(k) != 0 && "key".CompareTo(k) != 0) { sb.Append(k + "=" + v + "&"); } } sb.Append(key + "=" + value); //string sign = EncryptHelper.GetMD5(sb.ToString(), GetCharset()).ToUpper(); //编码强制使用UTF8:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_1 // 现支持HMAC-SHA256签名方式(EncryptHelper.GetHmacSha256方法留待实现) // https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=4_3 string sign = EncryptHelper.GetHmacSha256(sb.ToString(), value).ToUpper(); return(sign); }
/// <summary> /// 是否财付通签名,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。return boolean /// </summary> /// <returns></returns> public virtual Boolean IsTenpaySign() { StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(Parameters.Keys); akeys.Sort(ASCIISort.Create()); foreach (string k in akeys) { string v = (string)Parameters[k]; if (null != v && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0 && "key".CompareTo(k) != 0) { sb.Append(k + "=" + v + "&"); } } sb.Append("key=" + this.GetKey()); string sign = EncryptHelper.GetMD5(sb.ToString(), GetCharset()).ToLower(); this.SetDebugInfo(sb.ToString() + " &sign=" + sign); //debug信息 return(GetParameter("sign").ToLower().Equals(sign)); }
/// <summary> /// 获取带参数的请求URL @return String /// </summary> /// <returns></returns> public virtual string GetRequestURL() { this.CreateSign(); StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(Parameters.Keys); akeys.Sort(ASCIISort.Create()); foreach (string k in akeys) { string v = (string)Parameters[k]; if (null != v && "key".CompareTo(k) != 0 && "spbill_create_ip".CompareTo(k) != 0) { sb.Append(k + "=" + TenPayUtil.UrlEncode(v, GetCharset()) + "&"); } else if ("spbill_create_ip".CompareTo(k) == 0) { sb.Append(k + "=" + v.Replace(".", "%2E") + "&"); } } //去掉最后一个& if (sb.Length > 0) { sb.Remove(sb.Length - 1, 1); } return(this.GetGateUrl() + "?" + sb.ToString()); }
/// <summary> /// 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名 /// <para>key和value通常用于填充最后一组参数</para> /// </summary> /// <param name="key">参数名</param> /// <param name="value">参数值</param> /// <param name="workPaySignType">企业支付签名(workwx_sign)类型,默认为 None</param> /// <returns></returns> public virtual string CreateMd5Sign(string key, string value) { StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(Parameters.Keys); akeys.Sort(ASCIISort.Create()); foreach (string k in akeys) { string v = (string)Parameters[k]; if (null != v && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0 //&& "sign_type".CompareTo(k) != 0 && "key".CompareTo(k) != 0) { sb.Append(k + "=" + v + "&"); } } sb.Append(key + "=" + value); //string sign = EncryptHelper.GetMD5(sb.ToString(), GetCharset()).ToUpper(); //编码强制使用UTF8:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_1 string sign = EncryptHelper.GetMD5(sb.ToString(), "UTF-8").ToUpper(); return(sign); }
/// <summary> /// sha1加密 /// </summary> /// <returns></returns> private static string CreateSha1(Hashtable parameters) { var sb = new StringBuilder(); var akeys = new ArrayList(parameters.Keys); akeys.Sort(ASCIISort.Create()); foreach (var k in akeys) { if (parameters[k] != null) { var v = (string)parameters[k]; if (sb.Length == 0) { sb.Append(k + "=" + v); } else { sb.Append("&" + k + "=" + v); } } } return(EncryptHelper.GetSha1(sb.ToString())); }
/// <summary> /// 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名 /// </summary> /// <param name="key">参数名</param> /// <param name="value">参数值</param> /// key和value通常用于填充最后一组参数 /// <returns></returns> public virtual string CreateMd5Sign(string key, string value) { StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(Parameters.Keys); akeys.Sort(ASCIISort.Create()); foreach (string k in akeys) { string v = (string)Parameters[k]; if (null != v && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0 //&& "sign_type".CompareTo(k) != 0 && "key".CompareTo(k) != 0) { sb.Append(k + "=" + v + "&"); } } sb.Append(key + "=" + value); string sign = MD5UtilHelper.GetMD5(sb.ToString(), GetCharset()).ToUpper(); return(sign); }
public void ASCIISortTest() { string[] scoure = new[] { "1", "2", "A", "a", "B", "b" }; scoure.ToList().OrderBy(x => x); //结果 1 2 a A b B Console.WriteLine("使用OrderBy排序:"); foreach (var item in scoure) { Console.WriteLine(item); } Assert.AreEqual("1", scoure[0]); Assert.AreEqual("2", scoure[1]); Assert.AreEqual("A", scoure[2]); Assert.AreEqual("a", scoure[3]); //注意这里不同 Assert.AreEqual("B", scoure[4]); //注意这里不同 Assert.AreEqual("b", scoure[5]); ArrayList arrSource = new ArrayList(new[] { "1", "2", "A", "a", "B", "b" }); arrSource.Sort(ASCIISort.Create()); Console.WriteLine("使用ASCIISort排序:"); foreach (var item in arrSource) { Console.WriteLine(item); } Assert.AreEqual("1", arrSource[0]); Assert.AreEqual("2", arrSource[1]); Assert.AreEqual("A", arrSource[2]); Assert.AreEqual("B", arrSource[3]); //注意这里不同 Assert.AreEqual("a", arrSource[4]); //注意这里不同 Assert.AreEqual("b", arrSource[5]); }
/// <summary> /// 添加卡券Ext参数的签名加密方法 /// </summary> /// <param name="parameters"></param> /// <returns></returns> private static string CreateNonekeySha1(Hashtable parameters) { var sb = new StringBuilder(); var aValues = new ArrayList(parameters.Values); aValues.Sort(ASCIISort.Create()); foreach (var v in aValues) { sb.Append(v); } return(EncryptHelper.GetSha1(sb.ToString()).ToString().ToLower()); }
public void CompareTest() { { var str1 = "PK0000397757"; var str2 = "otMXytwcamKAa3JmUoQ0N7OGDFuA"; ArrayList arrayList = new ArrayList(); ASCIISort asciiSort = new ASCIISort(); arrayList.Add(str1); arrayList.Add(str2); arrayList.Sort(asciiSort); Assert.AreEqual(str1, arrayList[0]); } { var str1 = "PK00003977572"; var str2 = "PK0000397757"; ArrayList arrayList = new ArrayList(); ASCIISort asciiSort = new ASCIISort(); arrayList.Add(str1); arrayList.Add(str2); arrayList.Sort(asciiSort); Assert.AreEqual(str2, arrayList[0]); } { var str1 = "PK0000397757"; var str2 = "PK0000397757"; ArrayList arrayList = new ArrayList(); ASCIISort asciiSort = new ASCIISort(); arrayList.Add(str1); arrayList.Add(str2); arrayList.Sort(asciiSort); Assert.AreEqual(str1, arrayList[0]); } { var str1 = "otMXytwcamKAa3JmUoQ0N7OGDFuA"; var str2 = "PK0000397757"; ArrayList arrayList = new ArrayList(); ASCIISort asciiSort = new ASCIISort(); arrayList.Add(str1); arrayList.Add(str2); arrayList.Sort(asciiSort); Assert.AreEqual(str2, arrayList[0]); } }
/// <summary> /// 生成cardSign的加密方法 /// </summary> /// <returns></returns> private static string CreateCardSha1(Hashtable parameters) { var sb = new StringBuilder(); var akeys = new ArrayList(parameters.Keys); akeys.Sort(ASCIISort.Create()); foreach (var k in akeys) { if (parameters[k] != null) { var v = (string)parameters[k]; sb.Append(v); } } return(EncryptHelper.GetSha1(sb.ToString()).ToString().ToLower()); }
/// <summary> /// 创建package签名 /// </summary> /// <returns></returns> public virtual string CreateMd5Sign() { StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(Parameters.Keys); akeys.Sort(ASCIISort.Create()); foreach (string k in akeys) { string v = (string)Parameters[k]; if (null != v && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0 && "".CompareTo(v) != 0) { sb.Append(k + "=" + v + "&"); } } string sign = EncryptHelper.GetMD5(sb.ToString(), GetCharset()).ToLower(); this.SetParameter("sign", sign); return(sign); }
/// <summary> /// 判断微信维权签名 /// </summary> /// <returns></returns> public virtual Boolean IsWXsignfeedback() { StringBuilder sb = new StringBuilder(); Hashtable signMap = new Hashtable(); foreach (string k in XmlMap.Keys) { if (SignField.IndexOf(k.ToLower()) != -1) { signMap.Add(k.ToLower(), XmlMap[k]); } } signMap.Add("appkey", this.Appkey); ArrayList akeys = new ArrayList(signMap.Keys); akeys.Sort(ASCIISort.Create()); foreach (string k in akeys) { string v = (string)signMap[k]; if (sb.Length == 0) { sb.Append(k + "=" + v); } else { sb.Append("&" + k + "=" + v); } } string sign = EncryptHelper.GetSha1(sb.ToString()).ToString().ToLower(); this.SetDebugInfo(sb.ToString() + " => SHA1 sign:" + sign); return(sign.Equals(XmlMap["AppSignature"])); }
/// <summary> /// 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名 /// <para>key和value通常用于填充最后一组参数</para> /// </summary> /// <param name="key">参数名</param> /// <param name="value">参数值</param> /// <param name="workPaySignType">企业支付签名(workwx_sign)类型,默认为 None</param> /// <returns></returns> public virtual string CreateMd5Sign(string key, string value, WorkPaySignType workPaySignType = WorkPaySignType.None) { StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(Parameters.Keys); akeys.Sort(ASCIISort.Create()); foreach (string k in akeys) { string v = (string)Parameters[k]; if (null != v && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0 //&& "sign_type".CompareTo(k) != 0 && "key".CompareTo(k) != 0) { //过滤企业支付特殊情况 if (workPaySignType == WorkPaySignType.WorkSendRedPackage) { //企业支付微信红包,仅保留以下字段 if ("act_name".CompareTo(k) != 0 && "mch_billno".CompareTo(k) != 0 && "mch_id".CompareTo(k) != 0 && "nonce_str".CompareTo(k) != 0 && "re_openid".CompareTo(k) != 0 && "total_amount".CompareTo(k) != 0 && "wxappid".CompareTo(k) != 0 ) { continue; } } else if (workPaySignType == WorkPaySignType.WorkPayApi) { //企业支付微信红包,仅保留以下字段 if ("amount".CompareTo(k) != 0 && "appid".CompareTo(k) != 0 && "desc".CompareTo(k) != 0 && "mch_id".CompareTo(k) != 0 && "nonce_str".CompareTo(k) != 0 && "openid".CompareTo(k) != 0 && "partner_trade_no".CompareTo(k) != 0 && "ww_msg_type".CompareTo(k) != 0 ) { continue; } } sb.Append(k + "=" + v + "&"); } } sb.Append(key + "=" + value); //string sign = EncryptHelper.GetMD5(sb.ToString(), GetCharset()).ToUpper(); //编码强制使用UTF8:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_1 string sign = EncryptHelper.GetMD5(sb.ToString(), "UTF-8").ToUpper(); return(sign); }