public Task <T> SdkExecuteAsync <T>(IAlipayRequest <T> request) where T : AlipayResponse { // 构造请求参数 var requestParams = BuildRequestParams(request, null, null); // 字典排序 var sortedParams = new SortedDictionary <string, string>(requestParams); var sortedAlipayDic = new AlipayDictionary(sortedParams); // 参数签名 var signContent = AlipaySignature.GetSignContent(sortedAlipayDic); var signResult = AlipaySignature.RSASignContent(signContent, PrivateRSAParameters, Options.SignType); // 添加签名结果参数 sortedAlipayDic.Add(SIGN, signResult); // 参数拼接 var signedResult = HttpClientEx.BuildQuery(sortedAlipayDic); // 构造结果 var rsp = Activator.CreateInstance <T>(); rsp.Body = signedResult; return(Task.FromResult(rsp)); }
public Task <T> SdkExecuteAsync <T>(IAlipayRequest <T> request, string optionsName) where T : AlipayResponse { var options = string.IsNullOrEmpty(optionsName) ? _optionsSnapshotAccessor.Value : _optionsSnapshotAccessor.Get(optionsName); // 构造请求参数 var requestParams = BuildRequestParams(request, null, null, options); // 字典排序 var sortedParams = new SortedDictionary <string, string>(requestParams); var sortedAlipayDic = new AlipayDictionary(sortedParams); // 参数签名 var signContent = AlipaySignature.GetSignContent(sortedAlipayDic); var signResult = AlipaySignature.RSASignContent(signContent, options.PrivateRSAParameters, options.SignType); // 添加签名结果参数 sortedAlipayDic.Add(SIGN, signResult); // 参数拼接 var signedResult = AlipayUtility.BuildQuery(sortedAlipayDic); // 构造结果 var rsp = Activator.CreateInstance <T>(); rsp.Body = signedResult; return(Task.FromResult(rsp)); }
public Task <T> SdkExecuteAsync <T>(IAlipayRequest <T> request, AlipayOptions options) where T : AlipayResponse { if (options == null) { throw new ArgumentNullException(nameof(options)); } if (string.IsNullOrEmpty(options.AppId)) { throw new ArgumentNullException(nameof(options.AppId)); } if (string.IsNullOrEmpty(options.SignType)) { throw new ArgumentNullException(nameof(options.SignType)); } if (string.IsNullOrEmpty(options.AppPrivateKey)) { throw new ArgumentNullException(nameof(options.AppPrivateKey)); } if (string.IsNullOrEmpty(options.ServerUrl)) { throw new ArgumentNullException(nameof(options.ServerUrl)); } // 构造请求参数 var requestParams = BuildRequestParams(request, null, null, options); // 字典排序 var sortedParams = new SortedDictionary <string, string>(requestParams); var sortedDic = new AlipayDictionary(sortedParams); // 参数签名 var signContent = AlipaySignature.GetSignContent(sortedDic); var signResult = AlipaySignature.RSASignContent(signContent, options.AppPrivateKey, options.SignType); // 添加签名结果参数 sortedDic.Add(AlipayConstants.SIGN, signResult); // 参数拼接 var signedResult = AlipayUtility.BuildQuery(sortedDic); // 构造结果 var rsp = Activator.CreateInstance <T>(); rsp.ResponseBody = signedResult; return(Task.FromResult(rsp)); }
private string MakeVerifyGWResponse(bool isSuccess, string certPublicKey, string appPrivateKey, string charset, string signType) { var xmlDoc = new XmlDocument(); //创建实例 var xmldecl = xmlDoc.CreateXmlDeclaration("1.0", "GBK", null); xmlDoc.AppendChild(xmldecl); var xmlElem = xmlDoc.CreateElement("alipay"); //新建元素 xmlDoc.AppendChild(xmlElem); //添加元素 var alipay = xmlDoc.SelectSingleNode("alipay"); var response = xmlDoc.CreateElement("response"); var success = xmlDoc.CreateElement("success"); if (isSuccess) { success.InnerText = "true"; //设置文本节点 response.AppendChild(success); //添加到<Node>节点中 } else { success.InnerText = "false"; //设置文本节点 response.AppendChild(success); //添加到<Node>节点中 var err = xmlDoc.CreateElement("error_code"); err.InnerText = "VERIFY_FAILED"; response.AppendChild(err); } var biz_content = xmlDoc.CreateElement("biz_content"); biz_content.InnerText = certPublicKey; response.AppendChild(biz_content); alipay.AppendChild(response); var sign = xmlDoc.CreateElement("sign"); sign.InnerText = AlipaySignature.RSASignContent(response.InnerXml, appPrivateKey, charset, signType); alipay.AppendChild(sign); var sign_type = xmlDoc.CreateElement("sign_type"); sign_type.InnerText = signType; alipay.AppendChild(sign_type); return(xmlDoc.InnerXml); }
public async Task <T> PageExecuteAsync <T>(IAlipayRequest <T> request, AlipayOptions options, string accessToken, string reqMethod) where T : AlipayResponse { if (options == null) { throw new ArgumentNullException(nameof(options)); } if (string.IsNullOrEmpty(options.AppId)) { throw new ArgumentNullException(nameof(options.AppId)); } if (string.IsNullOrEmpty(options.SignType)) { throw new ArgumentNullException(nameof(options.SignType)); } if (string.IsNullOrEmpty(options.AppPrivateKey)) { throw new ArgumentNullException(nameof(options.AppPrivateKey)); } if (string.IsNullOrEmpty(options.ServerUrl)) { throw new ArgumentNullException(nameof(options.ServerUrl)); } var apiVersion = string.IsNullOrEmpty(request.GetApiVersion()) ? options.Version : request.GetApiVersion(); // 添加协议级请求参数 var txtParams = new AlipayDictionary(request.GetParameters()) { { AlipayConstants.METHOD, request.GetApiName() }, { AlipayConstants.VERSION, apiVersion }, { AlipayConstants.APP_ID, options.AppId }, { AlipayConstants.FORMAT, options.Format }, { AlipayConstants.TIMESTAMP, DateTime.Now }, { AlipayConstants.ACCESS_TOKEN, accessToken }, { AlipayConstants.SIGN_TYPE, options.SignType }, { AlipayConstants.TERMINAL_TYPE, request.GetTerminalType() }, { AlipayConstants.TERMINAL_INFO, request.GetTerminalInfo() }, { AlipayConstants.PROD_CODE, request.GetProdCode() }, { AlipayConstants.NOTIFY_URL, request.GetNotifyUrl() }, { AlipayConstants.CHARSET, options.Charset }, { AlipayConstants.RETURN_URL, request.GetReturnUrl() } }; // 序列化BizModel txtParams = SerializeBizModel(txtParams, request); // 添加签名参数 var signContent = AlipaySignature.GetSignContent(txtParams); txtParams.Add(AlipayConstants.SIGN, AlipaySignature.RSASignContent(signContent, options.AppPrivateKey, options.SignType)); string body; // 是否需要上传文件 if (request is IAlipayUploadRequest <T> uploadRequest) { var fileParams = AlipayUtility.CleanupDictionary(uploadRequest.GetFileParameters()); var client = _httpClientFactory.CreateClient(nameof(AlipayClient)); body = await client.PostAsync(options.ServerUrl, txtParams, fileParams); } else { if (reqMethod.ToUpperInvariant() == "GET") { var url = options.ServerUrl; if (txtParams != null && txtParams.Count > 0) { if (url.Contains("?")) { url += "&" + AlipayUtility.BuildQuery(txtParams); } else { url += "?" + AlipayUtility.BuildQuery(txtParams); } } body = url; } else { body = BuildHtmlRequest(txtParams, options.ServerUrl, options.Charset, reqMethod); } } var parser = new AlipayJsonParser <T>(); var rsp = parser.Parse(body); return(rsp); }
public async Task <T> CertificateExecuteAsync <T>(IAlipayRequest <T> request, AlipayOptions options, string accessToken, string appAuthToken) where T : AlipayResponse { if (options == null) { throw new ArgumentNullException(nameof(options)); } if (string.IsNullOrEmpty(options.AppId)) { throw new ArgumentNullException(nameof(options.AppId)); } if (string.IsNullOrEmpty(options.SignType)) { throw new ArgumentNullException(nameof(options.SignType)); } if (string.IsNullOrEmpty(options.AppPrivateKey)) { throw new ArgumentNullException(nameof(options.AppPrivateKey)); } if (string.IsNullOrEmpty(options.AppCert)) { throw new ArgumentNullException(nameof(options.AppCert)); } if (string.IsNullOrEmpty(options.AlipayPublicCert)) { throw new ArgumentNullException(nameof(options.AlipayPublicCert)); } if (string.IsNullOrEmpty(options.RootCert)) { throw new ArgumentNullException(nameof(options.RootCert)); } if (string.IsNullOrEmpty(options.ServerUrl)) { throw new ArgumentNullException(nameof(options.ServerUrl)); } var apiVersion = string.IsNullOrEmpty(request.GetApiVersion()) ? options.Version : request.GetApiVersion(); // 添加协议级请求参数 var txtParams = new AlipayDictionary(request.GetParameters()) { { AlipayConstants.METHOD, request.GetApiName() }, { AlipayConstants.VERSION, apiVersion }, { AlipayConstants.APP_ID, options.AppId }, { AlipayConstants.FORMAT, options.Format }, { AlipayConstants.TIMESTAMP, DateTime.Now }, { AlipayConstants.ACCESS_TOKEN, accessToken }, { AlipayConstants.SIGN_TYPE, options.SignType }, { AlipayConstants.TERMINAL_TYPE, request.GetTerminalType() }, { AlipayConstants.TERMINAL_INFO, request.GetTerminalInfo() }, { AlipayConstants.PROD_CODE, request.GetProdCode() }, { AlipayConstants.CHARSET, options.Charset }, { AlipayConstants.APP_CERT_SN, options.AppCertSN }, { AlipayConstants.ALIPAY_ROOT_CERT_SN, options.RootCertSN } }; // 序列化BizModel txtParams = SerializeBizModel(txtParams, request); if (!string.IsNullOrEmpty(request.GetNotifyUrl())) { txtParams.Add(AlipayConstants.NOTIFY_URL, request.GetNotifyUrl()); } if (!string.IsNullOrEmpty(appAuthToken)) { txtParams.Add(AlipayConstants.APP_AUTH_TOKEN, appAuthToken); } if (request.GetNeedEncrypt()) { if (string.IsNullOrEmpty(txtParams[AlipayConstants.BIZ_CONTENT])) { throw new AlipayException("api request Fail ! The reason: encrypt request is not supported!"); } if (string.IsNullOrEmpty(options.EncyptKey) || string.IsNullOrEmpty(options.EncyptType)) { throw new AlipayException("encryptType or encryptKey must not null!"); } if (!"AES".Equals(options.EncyptType)) { throw new AlipayException("api only support Aes!"); } var encryptContent = AlipaySignature.AESEncrypt(txtParams[AlipayConstants.BIZ_CONTENT], options.EncyptKey); txtParams.Remove(AlipayConstants.BIZ_CONTENT); txtParams.Add(AlipayConstants.BIZ_CONTENT, encryptContent); txtParams.Add(AlipayConstants.ENCRYPT_TYPE, options.EncyptType); } // 添加签名参数 var signContent = AlipaySignature.GetSignContent(txtParams); txtParams.Add(AlipayConstants.SIGN, AlipaySignature.RSASignContent(signContent, options.AppPrivateKey, options.SignType)); string body; var client = _httpClientFactory.CreateClient(nameof(AlipayClient)); // 是否需要上传文件 if (request is IAlipayUploadRequest <T> uRequest) { var fileParams = AlipayUtility.CleanupDictionary(uRequest.GetFileParameters()); body = await client.PostAsync(options.ServerUrl, txtParams, fileParams); } else { body = await client.PostAsync(options.ServerUrl, txtParams); } var parser = new AlipayJsonParser <T>(); var item = ParseRespItem(request, body, parser, options.EncyptKey, options.EncyptType); var rsp = parser.Parse(item.RealContent); await CheckResponseCertSignAsync(request, item.RespContent, rsp.IsError, parser, options); return(rsp); }
public async Task <T> ExecuteAsync <T>(IAlipayRequest <T> request, AlipayOptions options, string accessToken, string appAuthToken) where T : AlipayResponse { if (options == null) { throw new ArgumentNullException(nameof(options)); } if (string.IsNullOrEmpty(options.AppId)) { throw new AlipayException("options.AppId is Empty!"); } if (string.IsNullOrEmpty(options.SignType)) { throw new AlipayException("options.SignType is Empty!"); } if (string.IsNullOrEmpty(options.AppPrivateKey)) { throw new AlipayException("options.AppPrivateKey is Empty!"); } if (string.IsNullOrEmpty(options.ServerUrl)) { throw new AlipayException("options.ServerUrl is Empty!"); } var multiMediaDownloadRequest = (AlipayMobilePublicMultiMediaDownloadRequest)request; var apiVersion = string.IsNullOrEmpty(request.GetApiVersion()) ? options.Version : request.GetApiVersion(); // 添加协议级请求参数 var txtParams = new AlipayDictionary(request.GetParameters()) { { AlipayConstants.METHOD, request.GetApiName() }, { AlipayConstants.VERSION, apiVersion }, { AlipayConstants.APP_ID, options.AppId }, { AlipayConstants.FORMAT, options.Format }, { AlipayConstants.TIMESTAMP, DateTime.Now }, { AlipayConstants.ACCESS_TOKEN, accessToken }, { AlipayConstants.APP_AUTH_TOKEN, appAuthToken }, { AlipayConstants.SIGN_TYPE, options.SignType }, { AlipayConstants.TERMINAL_TYPE, request.GetTerminalType() }, { AlipayConstants.TERMINAL_INFO, request.GetTerminalInfo() }, { AlipayConstants.PROD_CODE, request.GetProdCode() } }; // 添加签名参数 var signContent = AlipaySignature.GetSignContent(txtParams); txtParams.Add(AlipayConstants.SIGN, AlipaySignature.RSASignContent(signContent, options.AppPrivateKey, options.SignType)); var url = options.ServerUrl; if (txtParams != null && txtParams.Count > 0) { if (url.Contains("?")) { url = url + "&" + AlipayUtility.BuildQuery(txtParams); } else { url = url + "?" + AlipayUtility.BuildQuery(txtParams); } } var client = _httpClientFactory.CreateClient(nameof(AlipayMobilePublicMultiMediaClient)); T response = null; var rsp = await client.GetAsync(url); if (rsp.StatusCode == HttpStatusCode.OK) { if (rsp.Content.Headers.ContentType.ToString().ToLower().Contains("text/plain")) { var body = await rsp.Content.ReadAsStringAsync(); var tp = new AlipayJsonParser <T>(); response = tp.Parse(body); } else { multiMediaDownloadRequest.Stream = await rsp.Content.ReadAsStreamAsync(); response = Activator.CreateInstance <T>(); } } return(response); }
public async Task <T> ExecuteAsync <T>(IAlipayRequest <T> request, string accessToken, string appAuthToken) where T : AlipayResponse { var apiVersion = string.Empty; if (!string.IsNullOrEmpty(request.GetApiVersion())) { apiVersion = request.GetApiVersion(); } else { apiVersion = Options.Version; } // 添加协议级请求参数 var txtParams = new AlipayDictionary(request.GetParameters()) { // 序列化BizModel { BIZ_CONTENT, Serialize(request.GetBizModel()) }, // 添加协议级请求参数 { METHOD, request.GetApiName() }, { VERSION, apiVersion }, { APP_ID, Options.AppId }, { FORMAT, Options.Format }, { TIMESTAMP, DateTime.Now }, { ACCESS_TOKEN, accessToken }, { SIGN_TYPE, Options.SignType }, { TERMINAL_TYPE, request.GetTerminalType() }, { TERMINAL_INFO, request.GetTerminalInfo() }, { PROD_CODE, request.GetProdCode() }, { CHARSET, Options.Charset } }; if (!string.IsNullOrEmpty(request.GetNotifyUrl())) { txtParams.Add(NOTIFY_URL, request.GetNotifyUrl()); } if (!string.IsNullOrEmpty(appAuthToken)) { txtParams.Add(APP_AUTH_TOKEN, appAuthToken); } if (request.GetNeedEncrypt()) { if (string.IsNullOrEmpty(txtParams[BIZ_CONTENT])) { throw new Exception("api request Fail ! The reason: encrypt request is not supported!"); } if (string.IsNullOrEmpty(Options.EncyptKey) || string.IsNullOrEmpty(Options.EncyptType)) { throw new Exception("encryptType or encryptKey must not null!"); } if (!"AES".Equals(Options.EncyptType)) { throw new Exception("api only support Aes!"); } var encryptContent = AES.Encrypt(txtParams[BIZ_CONTENT], Options.EncyptKey, AlipaySignature.AES_IV, AESCipherMode.CBC, AESPaddingMode.PKCS7); txtParams.Remove(BIZ_CONTENT); txtParams.Add(BIZ_CONTENT, encryptContent); txtParams.Add(ENCRYPT_TYPE, Options.EncyptType); } // 添加签名参数 var signContent = AlipaySignature.GetSignContent(txtParams); txtParams.Add(SIGN, AlipaySignature.RSASignContent(signContent, PrivateRSAParameters, Options.SignType)); var query = HttpClientEx.BuildQuery(txtParams); Logger?.LogTrace(0, "Request:{query}", query); // 是否需要上传文件 var body = string.Empty; if (request is IAlipayUploadRequest <T> uRequest) { var fileParams = AlipayUtility.CleanupDictionary(uRequest.GetFileParameters()); body = await Client.DoPostAsync(Options.ServerUrl, txtParams, fileParams); } else { body = await Client.DoPostAsync(Options.ServerUrl, query); } Logger?.LogTrace(1, "Response:{body}", body); T rsp = null; IAlipayParser <T> parser = null; if ("xml".Equals(Options.Format)) { parser = new AlipayXmlParser <T>(); rsp = parser.Parse(body); } else { parser = new AlipayJsonParser <T>(); rsp = parser.Parse(body); } var item = ParseRespItem(request, body, parser, Options.EncyptKey, Options.EncyptType); rsp = parser.Parse(item.realContent); CheckResponseSign(request, item.respContent, rsp.IsError, parser, PublicRSAParameters, Options.SignType); return(rsp); }
public async Task <T> PageExecuteAsync <T>(IAlipayRequest <T> request, string accessToken, string reqMethod) where T : AlipayResponse { string apiVersion = null; if (!string.IsNullOrEmpty(request.GetApiVersion())) { apiVersion = request.GetApiVersion(); } else { apiVersion = Options.Version; } var txtParams = new AlipayDictionary(request.GetParameters()) { // 序列化BizModel { BIZ_CONTENT, Serialize(request.GetBizModel()) }, // 添加协议级请求参数 { METHOD, request.GetApiName() }, { VERSION, apiVersion }, { APP_ID, Options.AppId }, { FORMAT, Options.Format }, { TIMESTAMP, DateTime.Now }, { ACCESS_TOKEN, accessToken }, { SIGN_TYPE, Options.SignType }, { TERMINAL_TYPE, request.GetTerminalType() }, { TERMINAL_INFO, request.GetTerminalInfo() }, { PROD_CODE, request.GetProdCode() }, { NOTIFY_URL, request.GetNotifyUrl() }, { CHARSET, Options.Charset }, { RETURN_URL, request.GetReturnUrl() } }; // 添加签名参数 var signContent = AlipaySignature.GetSignContent(txtParams); txtParams.Add(SIGN, AlipaySignature.RSASignContent(signContent, PrivateRSAParameters, Options.SignType)); // 是否需要上传文件 var body = string.Empty; if (request is IAlipayUploadRequest <T> uRequest) { var fileParams = AlipayUtility.CleanupDictionary(uRequest.GetFileParameters()); body = await Client.DoPostAsync(Options.ServerUrl, txtParams, fileParams); } else { if (reqMethod.ToUpper() == "GET") { //拼接get请求的url var tmpUrl = Options.ServerUrl; if (txtParams != null && txtParams.Count > 0) { if (tmpUrl.Contains("?")) { tmpUrl = tmpUrl + "&" + HttpClientEx.BuildQuery(txtParams); } else { tmpUrl = tmpUrl + "?" + HttpClientEx.BuildQuery(txtParams); } } body = tmpUrl; Logger?.LogTrace(0, "Request Url:{body}", body); } else { //输出post表单 body = BuildHtmlRequest(txtParams, reqMethod); Logger?.LogTrace(0, "Request Html:{body}", body); } } T rsp = null; IAlipayParser <T> parser = null; if ("xml".Equals(Options.Format)) { parser = new AlipayXmlParser <T>(); rsp = parser.Parse(body); } else { parser = new AlipayJsonParser <T>(); rsp = parser.Parse(body); } return(rsp); }
public async Task <T> PageExecuteAsync <T>(IAlipayRequest <T> request, string optionsName, string accessToken, string reqMethod) where T : AlipayResponse { var options = _optionsSnapshotAccessor.Get(optionsName); var apiVersion = string.IsNullOrEmpty(request.GetApiVersion()) ? options.Version : request.GetApiVersion(); // 添加协议级请求参数 var txtParams = new AlipayDictionary(request.GetParameters()) { { METHOD, request.GetApiName() }, { VERSION, apiVersion }, { APP_ID, options.AppId }, { FORMAT, options.Format }, { TIMESTAMP, DateTime.Now }, { ACCESS_TOKEN, accessToken }, { SIGN_TYPE, options.SignType }, { TERMINAL_TYPE, request.GetTerminalType() }, { TERMINAL_INFO, request.GetTerminalInfo() }, { PROD_CODE, request.GetProdCode() }, { NOTIFY_URL, request.GetNotifyUrl() }, { CHARSET, options.Charset }, { RETURN_URL, request.GetReturnUrl() } }; // 序列化BizModel txtParams = SerializeBizModel(txtParams, request); // 添加签名参数 var signContent = AlipaySignature.GetSignContent(txtParams); txtParams.Add(SIGN, AlipaySignature.RSASignContent(signContent, options.PrivateRSAParameters, options.SignType)); // 是否需要上传文件 var body = string.Empty; if (request is IAlipayUploadRequest <T> uRequest) { var fileParams = AlipayUtility.CleanupDictionary(uRequest.GetFileParameters()); using (var client = _clientFactory.CreateClient()) { body = await client.DoPostAsync(options.ServerUrl, txtParams, fileParams); } } else { if (reqMethod.ToUpper() == "GET") { //拼接get请求的url var tmpUrl = options.ServerUrl; if (txtParams != null && txtParams.Count > 0) { if (tmpUrl.Contains("?")) { tmpUrl = tmpUrl + "&" + AlipayUtility.BuildQuery(txtParams); } else { tmpUrl = tmpUrl + "?" + AlipayUtility.BuildQuery(txtParams); } } body = tmpUrl; _logger.Log(options.LogLevel, "Request Url:{body}", body); } else { //输出post表单 body = BuildHtmlRequest(txtParams, reqMethod, options); _logger.Log(options.LogLevel, "Request Html:{body}", body); } } T rsp = null; IAlipayParser <T> parser = null; if ("xml".Equals(options.Format)) { parser = new AlipayXmlParser <T>(); rsp = parser.Parse(body); } else { parser = new AlipayJsonParser <T>(); rsp = parser.Parse(body); } return(rsp); }