/// <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 && "key".CompareTo(k) != 0) { sb.Append(k + "=" + v + "&"); } } sb.Append(key + "=" + value); string sign = EncryptHelper.GetMD5(sb.ToString(), GetCharset()).ToUpper(); return(sign); }
/// <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); }