Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }