public T SdkExecute <T>(IAopRequest <T> request) where T : AopResponse { // 构造请求参数 AopDictionary requestParams = buildRequestParams(request, null, null); // 字典排序 IDictionary <string, string> sortedParams = new SortedDictionary <String, String>(requestParams); AopDictionary sortedAopDic = new AopDictionary(sortedParams); // 参数签名 String charset = String.IsNullOrEmpty(this.charset) ? "utf-8" : this.charset; String signResult = AopUtils.SignAopRequest(sortedAopDic, privateKeyPem, charset, this.keyFromFile, this.signType); // 添加签名结果参数 sortedAopDic.Add(SIGN, signResult); // 参数拼接 String signedResult = WebUtils.BuildQuery(sortedAopDic, charset); // 构造结果 T rsp = (T)Activator.CreateInstance(typeof(T)); rsp.Body = signedResult; return(rsp); }
private AopResponse DoGet(AopDictionary parameters, Stream outStream) { AlipayMobilePublicMultiMediaDownloadResponse response = null; string url = this.serverUrl; System.Console.WriteLine(url); if (parameters != null && parameters.Count > 0) { if (url.Contains("?")) { url = url + "&" + WebUtils.BuildQuery(parameters, charset); } else { url = url + "?" + WebUtils.BuildQuery(parameters, charset); } } HttpWebRequest req = webUtils.GetWebRequest(url, "GET"); req.ContentType = "application/x-www-form-urlencoded;charset=" + charset; HttpWebResponse rsp = (HttpWebResponse)req.GetResponse(); if (rsp.StatusCode == HttpStatusCode.OK) { if (rsp.ContentType.ToLower().Contains("text/plain")) { Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet); string body = webUtils.GetResponseAsString(rsp, encoding); IAopParser <AlipayMobilePublicMultiMediaDownloadResponse> tp = new AopJsonParser <AlipayMobilePublicMultiMediaDownloadResponse>(); response = tp.Parse(body, charset); } else { GetResponseAsStream(outStream, rsp); response = new AlipayMobilePublicMultiMediaDownloadResponse(); } } return(response); }
public T pageExecute <T>(IAopRequest <T> request, string accessToken, string reqMethod) where T : AopResponse { if (string.IsNullOrEmpty(this.charset)) { this.charset = "utf-8"; } string apiVersion = null; if (!string.IsNullOrEmpty(request.GetApiVersion())) { apiVersion = request.GetApiVersion(); } else { apiVersion = Version; } AopDictionary txtParams = new AopDictionary(request.GetParameters()); // 序列化BizModel txtParams = SerializeBizModel(txtParams, request); System.Text.StringBuilder xmlData = new System.Text.StringBuilder(); // 添加协议级请求参数 //AopDictionary txtParams = new AopDictionary(request.GetParameters()); txtParams.Add(METHOD, request.GetApiName()); txtParams.Add(VERSION, apiVersion); txtParams.Add(APP_ID, appId); txtParams.Add(FORMAT, format); txtParams.Add(TIMESTAMP, DateTime.Now); txtParams.Add(ACCESS_TOKEN, accessToken); txtParams.Add(SIGN_TYPE, signType); txtParams.Add(TERMINAL_TYPE, request.GetTerminalType()); txtParams.Add(TERMINAL_INFO, request.GetTerminalInfo()); txtParams.Add(PROD_CODE, request.GetProdCode()); txtParams.Add(NOTIFY_URL, request.GetNotifyUrl()); txtParams.Add(CHARSET, this.charset); //txtParams.Add(RETURN_URL, this.return_url); txtParams.Add(RETURN_URL, request.GetReturnUrl()); //字典排序 IDictionary <string, string> sortedTxtParams = new SortedDictionary <string, string>(txtParams); txtParams = new AopDictionary(sortedTxtParams); // 排序返回字典类型添加签名参数 txtParams.Add(SIGN, AopUtils.SignAopRequest(sortedTxtParams, privateKeyPem, this.charset, this.keyFromFile, this.signType)); // 是否需要上传文件 string body; if (request is IAopUploadRequest <T> ) { IAopUploadRequest <T> uRequest = (IAopUploadRequest <T>)request; IDictionary <string, FileItem> fileParams = AopUtils.CleanupDictionary(uRequest.GetFileParameters()); body = webUtils.DoPost(this.serverUrl + "?" + CHARSET + "=" + this.charset, txtParams, fileParams, this.charset); } else { if (reqMethod.Equals("GET")) { //直接调用DoGet方法请求 //body=webUtils .DoGet (this.serverUrl ,txtParams ,this.charset); //拼接get请求的url string tmpUrl = serverUrl; if (txtParams != null && txtParams.Count > 0) { if (tmpUrl.Contains("?")) { tmpUrl = tmpUrl + "&" + WebUtils.BuildQuery(txtParams, charset); } else { tmpUrl = tmpUrl + "?" + WebUtils.BuildQuery(txtParams, charset); } } body = tmpUrl; } else { //直接调用DoPost方法请求 // body = webUtils.DoPost(this.serverUrl, txtParams, this.charset); //输出post表单 body = BuildHtmlRequest(txtParams, reqMethod, reqMethod); } } T rsp = null; IAopParser <T> parser = null; if ("xml".Equals(format)) { parser = new AopXmlParser <T>(); rsp = parser.Parse(body, charset); } else { parser = new AopJsonParser <T>(); rsp = parser.Parse(body, charset); } //验签 // CheckResponseSign(request, rsp, parser, this.alipayPublicKey, this.charset); return(rsp); }