public static void CheckResponseSign(string sign, string signSourceDate, AlipayFormSetting setting) { if (string.IsNullOrEmpty(setting.PublicKey) || string.IsNullOrEmpty(setting.Charset)) { throw new AliPayException("public key or charset is Empty!"); } if (signSourceDate == null) { throw new AliPayException("sign check fail: sign is Empty!"); } var rsaCheckContent = AlipaySignature.RSACheckContent(signSourceDate, sign, "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlLPFduIFgSUbSLCyHTnvdQvLfU8kR8i/6OSMjnfcoIl0ROMAAdcv7JWD1BzqMTXfvZrmFWj4yuznSqNpdqoL11lQ35EGMZSHntsu5tpCg+9iguhBnTgHn+wr7pYxF9SfJU/6MxYdfArtcyx5FzKLrtpuVkDQZRavIrfoB49NJRXzV4bMPAvhnB3k/O9xwkT1UAh5gbqbaKKYdymInKmstrhQ5kqKCSQey4js/zM14y9SXXyxIHO6BGEGWepmym/2C2BDhMqANnujHZq4bEtsV+aTob5BDA6FcPijMUrlUcFCqParu4c4X0FlhoHsG0vm5owfjpjMsetggmPKR1nzQwIDAQAB", setting.Charset, setting.SignType, false); if (!rsaCheckContent) { throw new AliPayException("sign check fail: check Sign and Data Fail!"); } }
public static void CheckResponseSign(string sign, string signSourceDate, AlipayFormSetting setting) { if (string.IsNullOrEmpty(setting.PublicKey) || string.IsNullOrEmpty(setting.Charset)) { throw new AliPayException("public key or charset is Empty!"); } if (signSourceDate == null) { throw new AliPayException("sign check fail: sign is Empty!"); } var rsaCheckContent = AlipaySignature.RSACheckContent(signSourceDate, sign, setting.PublicKey, setting.Charset, setting.SignType); if (!rsaCheckContent) { throw new AliPayException("sign check fail: check Sign and Data Fail!"); } }
public static string Query(AopDictionary bizContent, AlipayFormSetting setting) { try { QueryValidation(bizContent); var data = new AlipayData(); var request = RequestBase(setting, ALIPAY_QUERY); request.Add("biz_content", data.ToJson(bizContent)); request.Add("sign", data.RSASign(request, setting.PrivateKey, setting.Charset, setting.SignType)); var body = HttpService.DoPost(setting.ServerUrl + "?" + CHARSET + "=" + setting.Charset, request, setting.Charset); return(body); } catch (Exception ex) { Console.WriteLine(ex.Message); return(null); } }
/** * 跳转支付宝页面直接进行支付 */ public static string Pay(AopDictionary bizContent, AlipayFormSetting setting, string returnUrl, string noticeUrl) { try { PayValidation(bizContent); var data = new AlipayData(); var request = RequestBase(setting, PayMethod); request.Add("biz_content", data.ToJson(bizContent)); request.Add("notify_url", noticeUrl); request.Add("return_url", returnUrl); request.Add("sign", data.RSASign(request, setting.PrivateKey, setting.Charset, setting.SignType)); var body = BuildHtmlRequest(request, "POST", setting); return(body); } catch (Exception ex) { Console.WriteLine(ex.Message); return(null); } }
private static AopDictionary RequestBase(AlipayFormSetting setting, string method) { if (string.IsNullOrEmpty(setting.APPId)) { throw new AliPayException("您的支付宝配置未能通过检查,详细信息:商户ID未指定!"); } //SignType私钥检查 if (string.IsNullOrEmpty(setting.SignType)) { throw new AliPayException("您的支付宝配置未能通过检查,详细信息:签名类型未指定!"); } //RSA私钥检查 if (string.IsNullOrEmpty(setting.PrivateKey)) { throw new AliPayException("您的支付宝配置未能通过检查,详细信息:未能获取到商户私钥!"); } //RSA私钥格式检查 RSA rsaCsp = AlipaySignature.LoadCertificateString(setting.PrivateKey, setting.SignType); if (rsaCsp == null) { throw new AliPayException("您的支付宝配置未能通过检查,详细信息:商户私钥格式错误,未能导入!"); } var dic = new AopDictionary(); dic.Add("app_id", setting.APPId); dic.Add("method", method); dic.Add("format", setting.Format); dic.Add("charset", setting.Charset); dic.Add("sign_type", setting.SignType); dic.Add("timestamp", DateTime.Now); dic.Add("version", setting.Version); return(dic); }
public IDictionary <string, object> FromJson(string body, AlipayFormSetting setting) { var json = JsonConvert.DeserializeObject <IDictionary <string, object> >(body); try { string sign = json["sign"].ToString(); var signSourceDate = GetSignSourceData(body); json = JsonConvert.DeserializeObject <IDictionary <string, object> >(signSourceDate); if (signSourceDate.Contains("sub_code")) { throw new AliPayException(json["sub_code"].ToString()); } if (!string.IsNullOrEmpty(sign) && !string.IsNullOrEmpty(signSourceDate)) { CheckResponseSign(sign, signSourceDate, setting); if (json["code"].ToString() != "10000") { throw new AliPayException(json["msg"].ToString()); } } else { throw new AliPayException("sign check fail: body or reponse content is Empty!"); } } catch (AliPayException ex) { throw new AliPayException(ex.Message); } return(json); }
private static string BuildHtmlRequest(IDictionary <string, string> dicPara, string strMethod, AlipayFormSetting setting) { //待请求参数数组 var sbHtml = new StringBuilder(); //sbHtml.Append("<head><meta http-equiv=\"Content-Type\" content=\"text/html\" charset= \"" + charset + "\" /></head>"); sbHtml.Append("<form id='alipaysubmit' name='alipaysubmit' action='" + setting.ServerUrl + "?charset=" + setting.Charset + "' method='" + strMethod + "'>"); ; foreach (var temp in dicPara) { sbHtml.Append("<input name='" + temp.Key + "' value='" + temp.Value + "'/>"); } //submit按钮控件请不要含有name属性 sbHtml.Append("<input type='submit' value='" + strMethod + "' style='display:none;'></form>"); // sbHtml.Append("<input type='submit' value='" + strButtonValue + "'></form></div>"); //表单实现自动提交 sbHtml.Append("<script>document.forms['alipaysubmit'].submit();</script>"); return(sbHtml.ToString()); }