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; }