private bool Verify(HttpRequestBase request, NameValueCollection requestVal, out AliPayReturnModel model) { bool result = false; SortedDictionary <string, string> sortedDic = new SortedDictionary <string, string>(); foreach (var item in requestVal.AllKeys) { if (item.ToLower() != "sign" && item.ToLower() != "sign_type" && !string.IsNullOrEmpty(item)) { sortedDic.Add(item, requestVal[item]); } } string requestSign = requestVal["sign"]; string requestSigntype = requestVal["sign_type"]; string param = CreateURLParamString(sortedDic); EnumSignType signType = requestSigntype == "MD5" ? EnumSignType.MD5 : requestSigntype == "RSA" ? EnumSignType.RSA : EnumSignType.MD5; if (signType == EnumSignType.MD5) { string sign = BuildRequestsign(param, signType); if (requestSign.Equals(sign)) { result = true; } } else { result = RSAFromPkcs8.verify(param, requestSign, AlipayConfig.ALIPay_RSA_ALI_PUBLICKEY, "utf-8"); } string responseText = GetResponseTxt(requestVal["notify_id"]); bool resultVal = result && responseText == "true"; if (resultVal) { model = new AliPayReturnModel() { OutTradeNo = request.Form["out_trade_no"], TradeNo = request.Form["trade_no"], TradeStatus = request.Form["trade_status"] }; decimal total_fee; decimal.TryParse(request.Form["total_fee"], out total_fee); model.TotalFee = total_fee; } else { model = null; } return(resultVal); }
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 BuildRequestsign(string urlParam, EnumSignType signType) { string mysign = ""; if (signType == EnumSignType.MD5) { string preString = urlParam + AlipayConfig.ALI_KEY; mysign = MD5Helper.Sign(preString, AlipayConfig.CHARTSET); } else if (signType == EnumSignType.RSA) { mysign = RSASign(urlParam, AlipayConfig.ALIPay_RSA_PRIVATEKEY, AlipayConfig.CHARTSET); } return(mysign); }
public string BuildWebPay(string orderNo, string subject, decimal payAmount, EnumSignType signType = EnumSignType.MD5) { return this.BuildRequest(orderNo, subject, payAmount, EnumAliPayType.Website, signType); }
private string BuildRequestsign(string urlParam, EnumSignType signType) { string mysign = ""; if (signType == EnumSignType.MD5) mysign = MD5Sign(urlParam, Config.ALI_KEY, Config.CHARTSET); else if (signType == EnumSignType.RSA) mysign = RSASign(urlParam, Config.ALIPay_RSA_PRIVATEKEY, Config.CHARTSET); return mysign; }
public string BuildMobilePay(string orderNo, string subject, decimal payAmount, EnumSignType signType = EnumSignType.RSA) { return this.BuildRequest(orderNo, subject, payAmount, EnumAliPayType.Mobile, signType); }
private string BuildRequestsign(string urlParam, EnumSignType signType) { string mysign = ""; if (signType == EnumSignType.MD5) { string preString = urlParam + AlipayConfig.ALI_KEY; mysign = MD5Helper.Sign(preString, AlipayConfig.CHARTSET); } else if (signType == EnumSignType.RSA) mysign = RSASign(urlParam, AlipayConfig.ALIPay_RSA_PRIVATEKEY, AlipayConfig.CHARTSET); return mysign; }