private string BuildRequest(string orderNo, string subject, decimal totalAmt, EnumAliPayType aliPayType, EnumSignType signType = EnumSignType.MD5)
        {
            SortedDictionary<string, string> dicParam = CreateParam(orderNo, subject, totalAmt, aliPayType);
            string urlParam = CreateURLParamString(dicParam, aliPayType);
            string sign = HttpUtility.UrlEncode(BuildRequestsign(urlParam, signType), Encoding.UTF8);
            dicParam.Add("sign", sign);
            dicParam.Add("sign_type", signType.ToString());

            if (aliPayType == EnumAliPayType.Mobile)
            {
                return urlParam + "&sign=\"" + sign + "\"&sign_type=\"" + signType.ToString() + "\"";
            }
            else
                return BuildForm(dicParam);
        }
        private string CreateURLParamString(SortedDictionary<string, string> dicArray, EnumAliPayType type = EnumAliPayType.Website)
        {
            StringBuilder prestr = new StringBuilder();
            foreach (KeyValuePair<string, string> temp in dicArray.OrderBy(o => o.Key))
            {
                if (type == EnumAliPayType.Mobile)
                    prestr.Append(temp.Key + "=\"" + temp.Value + "\"&");
                else
                    prestr.Append(temp.Key + "=" + temp.Value + "&");
            }

            int nLen = prestr.Length;
            prestr.Remove(nLen - 1, 1);
            return prestr.ToString();
        }
        private SortedDictionary<string, string> CreateParam(string orderNo, string subject, decimal totalAmt, EnumAliPayType aliPayType)
        {
            SortedDictionary<string, string> dic = new SortedDictionary<string, string>();
            #region BASEPARAM

            string service = aliPayType == EnumAliPayType.Website ? Config.ALIPay_WEB_SERVICE
                            : aliPayType == EnumAliPayType.Wap ? Config.ALIPay_WAP_SERVICE
                            : aliPayType == EnumAliPayType.Mobile ? Config.ALIPay_MOBILE_SERVICE
                            : "";

            dic.Add("service", service);
            dic.Add("partner", Config.ALI_PARTER);
            dic.Add("_input_charset", Config.CHARTSET);
            dic.Add("notify_url", Config.ALIPay_NotifyURL);

            //dic.Add("sign_type", SIGNTYPE); 
            #endregion

            #region BIZPARAM
            dic.Add("out_trade_no", orderNo);
            dic.Add("subject", subject);
            dic.Add("payment_type", Config.PAYMENT_TYPE);
            dic.Add("total_fee", totalAmt.ToString("F2"));
            //dic.Add("seller_email", ALI_SELLEREMAIL);
            dic.Add("seller_id", Config.ALI_SELLERID);
            //dic.Add("anti_phishing_key", anti_phishing_key);//防钓鱼时间戳,如果已申请开通防钓鱼证,则此字段必填。
            //dic.Add("exter_invoke_ip", exter_invoke_ip);//客户端 IP ,如果商户申请后台开通防钓鱼 IP地址检查选项,此字段必填,校验用。 
            #endregion

            if (aliPayType == EnumAliPayType.Mobile)
                dic.Add("body", subject + "购买");

            return dic;
        }