private AopResponse DoGet(AopDictionary parameters, Stream outStream)
        {
            AlipayMobilePublicMultiMediaDownloadResponse result = null;
            string text = serverUrl;

            Console.WriteLine(text);
            if (parameters != null && parameters.Count > 0)
            {
                text = ((!text.Contains("?")) ? (text + "?" + WebUtils.BuildQuery(parameters, charset)) : (text + "&" + WebUtils.BuildQuery(parameters, charset)));
            }
            HttpWebRequest webRequest = webUtils.GetWebRequest(text, "GET");

            webRequest.ContentType = "application/x-www-form-urlencoded;charset=" + charset;
            HttpWebResponse httpWebResponse = (HttpWebResponse)webRequest.GetResponse();

            if (httpWebResponse.StatusCode == HttpStatusCode.OK)
            {
                if (httpWebResponse.ContentType.ToLower().Contains("text/plain"))
                {
                    Encoding encoding         = Encoding.GetEncoding(httpWebResponse.CharacterSet);
                    string   responseAsString = webUtils.GetResponseAsString(httpWebResponse, encoding);
                    IAopParser <AlipayMobilePublicMultiMediaDownloadResponse> aopParser = new AopJsonParser <AlipayMobilePublicMultiMediaDownloadResponse>();
                    result = aopParser.Parse(responseAsString, charset);
                }
                else
                {
                    GetResponseAsStream(outStream, httpWebResponse);
                    result = new AlipayMobilePublicMultiMediaDownloadResponse();
                }
            }
            return(result);
        }
Exemple #2
0
        public void should_be_able_to_convert_json_to_response_object()
        {
            string body = "{\"alipay_trade_create_response\":{\"code\":\"10000\",\"msg\":\"Success\",\"out_trade_no\":\"20150320010101001\","
                          + "\"fund_bill_list\":[{\"amount\":\"123\"},{\"amount\":\"456\"}],\"voucher_detail_list\":[{\"id\":\"id123\","
                          + "\"other_contribute_detail\":[{\"contribute_amount\":\"123\"}]}],\"test1\":{\"id\":\"id222\","
                          + "\"other_contribute_detail\":[{\"contribute_amount\":\"222\"}]},\"test2\":123,\"test3\":5223434252345,\"test4\":1234567.89,"
                          + "\"test5\":true,\"test6\":null,\"test_list1\":[123,123,123],\"test_list2\":[5223434252345,5223434252345,5223434252345],"
                          + "\"test_list3\":[1234567.89,1234567.89,1234567.89],\"test_list4\":[true,false,true],\"test_list5\":[\"a\",null,\"c\"],},"
                          + "\"sign\":\"TS355N0QjK1r9GyD4YOsG5esszSUhESgwu1q5\"}";
            AopJsonParser <AlipayTradeQueryResponse> parser = new AopJsonParser <AlipayTradeQueryResponse>();
            AlipayTradeQueryResponse resposne = parser.Parse(body, "utf-8");

            Assert.AreEqual(resposne.Msg, "Success");
            Assert.AreEqual(resposne.OutTradeNo, "20150320010101001");
            Assert.AreEqual(resposne.OutTradeNo, "20150320010101001");
            Assert.AreEqual(resposne.FundBillList.Count, 2);
            Assert.AreEqual(resposne.FundBillList[0].Amount, "123");
            Assert.AreEqual(resposne.VoucherDetailList[0].OtherContributeDetail[0].ContributeAmount, "123");

            Assert.AreEqual(resposne.Test1.Id, "id222");
            Assert.AreEqual(resposne.Test1.OtherContributeDetail[0].ContributeAmount, "222");

            Assert.AreEqual(resposne.Test2, 123);
            Assert.AreEqual(resposne.Test3, 5223434252345);
            Assert.AreEqual(resposne.Test4, 1234567.89);
            Assert.AreEqual(resposne.Test5, true);
            Assert.AreEqual(resposne.Test6, null);

            Assert.AreEqual(resposne.TestList1[2], 123);
            Assert.AreEqual(resposne.TestList2[2], 5223434252345);
            Assert.AreEqual(resposne.TestList3[2], 1234567.89);
            Assert.AreEqual(resposne.TestList4[2], true);
            Assert.AreEqual(resposne.TestList5[1], null);
            Assert.AreEqual(resposne.TestList5[2], "c");
        }
        public T Execute <T>(IAopRequest <T> request, string accessToken) where T : AopResponse
        {
            // 添加协议级请求参数
            AopDictionary txtParams = new AopDictionary(request.GetParameters());

            txtParams.Add(METHOD, request.GetApiName());
            txtParams.Add(VERSION, version);
            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(SIGN, AopUtils.SignAopRequest(txtParams, privateKeyPem));

            if (string.IsNullOrEmpty(this.charset))
            {
                this.charset = "utf-8";
            }

            // 是否需要上传文件
            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, txtParams, fileParams, this.charset);
            }
            else
            {
                body = webUtils.DoPost(this.serverUrl, txtParams, this.charset);
            }

            T rsp;

            if ("xml".Equals(format))
            {
                IAopParser <T> tp = new AopXmlParser <T>();
                rsp = tp.Parse(body);
            }
            else
            {
                IAopParser <T> tp = new AopJsonParser <T>();
                rsp = tp.Parse(body);
            }

            return(rsp);
        }
Exemple #4
0
        private AopResponse DoGet(AopDictionary parameters, Stream outStream)
        {
            AlipayMobilePublicMultiMediaDownloadResponse response = null;

            var url = serverUrl;

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

            var req = webUtils.GetWebRequest(url, "GET");

            req.ContentType = "application/x-www-form-urlencoded;charset=" + charset;

            var reqTask = req.GetResponseAsync();

            reqTask.Wait();
            var rsp = (HttpWebResponse)reqTask.Result;

            if (rsp.StatusCode == HttpStatusCode.OK)
            {
                if (rsp.ContentType.ToLower().Contains("text/plain"))
                {
                    //临时
                    var contentType = rsp.ContentType;
                    var charset     = contentType.IndexOf("charset=utf-8", StringComparison.OrdinalIgnoreCase) > 0
                        ? "UTF-8"
                        : "GBK";
                    var encoding = Encoding.GetEncoding(charset);
                    var 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);
        }
        private AopResponse DoGet(AopDictionary parameters, Stream outStream)
        {
            AlipayMobilePublicMultiMediaDownloadResponse response = null;

            if (string.IsNullOrEmpty(charset))
            {
                charset = "UTF-8";
            }

            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);
        }
Exemple #6
0
        /// <summary>
        /// 支付宝支付查询(蚂蚁金服)
        /// </summary>
        /// <param name="alipayTradeQueryInfo">查询信息</param>
        /// <param name="config">config</param>
        /// <returns>结果</returns>
        public static AlipayTradeQueryResult QueryPayTradeResult(AlipayTradeQueryInfo alipayTradeQueryInfo, SdkPay.Config config)
        {
            var body                   = QueryPayTrade(alipayTradeQueryInfo, config);
            var parser                 = new AopJsonParser <QueryPayTrade>();
            var queryPayTrade          = parser.Parse(body, SdkPay.Config.Charset);
            var alipayTradeQueryResult = new AlipayTradeQueryResult
            {
                IsSuccess = queryPayTrade.Code == "10000" && (queryPayTrade.trade_status == "TRADE_SUCCESS" || queryPayTrade.trade_status == "TRADE_FINISHED")
            };

            if (alipayTradeQueryResult.IsSuccess)
            {
                alipayTradeQueryResult.Buyer           = queryPayTrade.buyer_logon_id;
                alipayTradeQueryResult.PayAmount       = Convert.ToDecimal(queryPayTrade.total_amount);
                alipayTradeQueryResult.PanyInterfaceNo = queryPayTrade.trade_no;
                alipayTradeQueryResult.TradeNo         = queryPayTrade.out_trade_no;
            }
            return(alipayTradeQueryResult);
        }
Exemple #7
0
        public T Execute <T>(IAopRequest <T> request, string accessToken, string appAuthToken) 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);

            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(CHARSET, 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 AopException("api request Fail ! The reason: encrypt request is not supported!");
                }

                if (string.IsNullOrEmpty(this.encyptKey) || string.IsNullOrEmpty(this.encyptType))
                {
                    throw new AopException("encryptType or encryptKey must not null!");
                }

                if (!"AES".Equals(this.encyptType))
                {
                    throw new AopException("api only support Aes!");
                }

                string encryptContent = AopUtils.AesEncrypt(this.encyptKey, txtParams[BIZ_CONTENT], this.charset);
                txtParams.Remove(BIZ_CONTENT);
                txtParams.Add(BIZ_CONTENT, encryptContent);
                txtParams.Add(ENCRYPT_TYPE, this.encyptType);
            }

            // 添加签名参数
            txtParams.Add(SIGN, AopUtils.SignAopRequest(txtParams, privateKeyPem, charset, this.keyFromFile, 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
            {
                body = webUtils.DoPost(this.serverUrl + "?" + CHARSET + "=" + this.charset, txtParams, this.charset);
            }

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

            ResponseParseItem item = parseRespItem(request, body, parser, this.encyptKey, this.encyptType, charset);

            rsp = parser.Parse(item.realContent, charset);

            CheckResponseSign(request, item.respContent, rsp.IsError, parser, this.alipayPublicKey, this.charset, signType, this.keyFromFile);

            return(rsp);
        }
Exemple #8
0
        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 + "&" + Aop.Api.Util.WebUtils.BuildQuery(txtParams, charset);
                        }
                        else
                        {
                            tmpUrl = tmpUrl + "?" + Aop.Api.Util.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);
        }
Exemple #9
0
        public T pageExecute <T>(IAopRequest <T> request, string accessToken, string appAuthToken, 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);

            // 添加协议级请求参数
            txtParams.Add(AlipayConstants.METHOD, request.GetApiName());
            txtParams.Add(AlipayConstants.VERSION, apiVersion);
            txtParams.Add(AlipayConstants.ALIPAY_SDK, SDK_VERSION);
            txtParams.Add(AlipayConstants.APP_ID, appId);
            txtParams.Add(AlipayConstants.FORMAT, format);
            txtParams.Add(AlipayConstants.TIMESTAMP, DateTime.Now);
            txtParams.Add(AlipayConstants.ACCESS_TOKEN, accessToken);
            txtParams.Add(AlipayConstants.APP_AUTH_TOKEN, appAuthToken);
            txtParams.Add(AlipayConstants.SIGN_TYPE, signType);
            txtParams.Add(AlipayConstants.TERMINAL_TYPE, request.GetTerminalType());
            txtParams.Add(AlipayConstants.TERMINAL_INFO, request.GetTerminalInfo());
            txtParams.Add(AlipayConstants.PROD_CODE, request.GetProdCode());
            txtParams.Add(AlipayConstants.NOTIFY_URL, request.GetNotifyUrl());
            txtParams.Add(AlipayConstants.CHARSET, this.charset);
            txtParams.Add(AlipayConstants.RETURN_URL, request.GetReturnUrl());
            if (certEnvironment != null)
            {
                txtParams.Add(AlipayConstants.ALIPAY_ROOT_CERT_SN, certEnvironment.RootCertSN);
                txtParams.Add(AlipayConstants.APP_CERT_SN, certEnvironment.AppCertSN);
            }
            //字典排序
            IDictionary <string, string> sortedTxtParams = new SortedDictionary <string, string>(txtParams, StringComparer.Ordinal);

            txtParams = new AopDictionary(sortedTxtParams);

            // 排序返回字典类型添加签名参数
            txtParams.Add(AlipayConstants.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 + "?" + AlipayConstants.CHARSET + "=" + this.charset, txtParams, fileParams, this.charset);
            }
            else
            {
                if (reqMethod.Equals("GET"))
                {
                    //拼接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
                {
                    //输出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);
            }

            return(rsp);
        }
Exemple #10
0
        public T CertificateExecute <T>(IAopRequest <T> request, string accessToken, string appAuthToken, String targetAppId) where T : AopResponse
        {
            ArgumentValidator.CheckNotNull(certEnvironment, "检测到证书相关参数未初始化,非证书模式下请改为调用Execute。");

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

            txtParams.Add(AlipayConstants.METHOD, request.GetApiName());
            txtParams.Add(AlipayConstants.VERSION, apiVersion);
            txtParams.Add(AlipayConstants.ALIPAY_SDK, SDK_VERSION);
            txtParams.Add(AlipayConstants.APP_ID, appId);
            txtParams.Add(AlipayConstants.FORMAT, format);
            txtParams.Add(AlipayConstants.TIMESTAMP, DateTime.Now);
            txtParams.Add(AlipayConstants.ACCESS_TOKEN, accessToken);
            txtParams.Add(AlipayConstants.SIGN_TYPE, signType);
            txtParams.Add(AlipayConstants.TERMINAL_TYPE, request.GetTerminalType());
            txtParams.Add(AlipayConstants.TERMINAL_INFO, request.GetTerminalInfo());
            txtParams.Add(AlipayConstants.PROD_CODE, request.GetProdCode());
            txtParams.Add(AlipayConstants.CHARSET, charset);

            txtParams.Add(AlipayConstants.APP_CERT_SN, certEnvironment.AppCertSN);
            txtParams.Add(AlipayConstants.ALIPAY_ROOT_CERT_SN, certEnvironment.RootCertSN);


            if (!string.IsNullOrEmpty(request.GetNotifyUrl()))
            {
                txtParams.Add(AlipayConstants.NOTIFY_URL, request.GetNotifyUrl());
            }

            if (!string.IsNullOrEmpty(appAuthToken))
            {
                txtParams.Add(AlipayConstants.APP_AUTH_TOKEN, appAuthToken);
            }

            if (!string.IsNullOrEmpty(targetAppId))
            {
                txtParams.Add(AlipayConstants.TARGET_APP_ID, targetAppId);
            }

            if (request.GetNeedEncrypt())
            {
                if (string.IsNullOrEmpty(txtParams[AlipayConstants.BIZ_CONTENT]))
                {
                    throw new AopException("api request Fail ! The reason: encrypt request is not supported!");
                }

                if (string.IsNullOrEmpty(this.encyptKey) || string.IsNullOrEmpty(this.encyptType))
                {
                    throw new AopException("encryptType or encryptKey must not null!");
                }

                if (!"AES".Equals(this.encyptType))
                {
                    throw new AopException("api only support Aes!");
                }

                string encryptContent = AopUtils.AesEncrypt(this.encyptKey, txtParams[AlipayConstants.BIZ_CONTENT], this.charset);
                txtParams.Remove(AlipayConstants.BIZ_CONTENT);
                txtParams.Add(AlipayConstants.BIZ_CONTENT, encryptContent);
                txtParams.Add(AlipayConstants.ENCRYPT_TYPE, this.encyptType);
            }

            // 添加签名参数
            txtParams.Add(AlipayConstants.SIGN, AopUtils.SignAopRequest(txtParams, privateKeyPem, charset, this.keyFromFile, 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 + "?" + AlipayConstants.CHARSET + "=" + this.charset, txtParams, fileParams, this.charset);
            }
            else
            {
                body = webUtils.DoPost(this.serverUrl + "?" + AlipayConstants.CHARSET + "=" + this.charset, txtParams, this.charset);
            }

            T rsp;
            IAopParser <T> parser;

            if ("xml".Equals(format))
            {
                parser = new AopXmlParser <T>();
                rsp    = parser.Parse(body, charset);
            }
            else
            {
                parser = new AopJsonParser <T>();
                rsp    = parser.Parse(body, charset);
            }

            ResponseParseItem item = ParseRespItem(request, body, parser, this.encyptKey, this.encyptType, charset);

            rsp = parser.Parse(item.RealContent, charset);


            CheckResponseCertSign(request, item.RespContent, rsp.IsError, parser);

            return(rsp);
        }
        public T Execute <T>(IAopRequest <T> request, string accessToken) 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 = Ver;
            }
            // 添加协议级请求参数
            AopDictionary txtParams = new AopDictionary(request.GetParameters());

            // 序列化BizModel
            txtParams = SerializeModel(txtParams, request);
            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(PROD_CODE, request.GetProdCode());
            txtParams.Add(CHARSET, charset);

            if (request.GetNeedEncrypt())
            {
                if (string.IsNullOrEmpty(txtParams[CONTENT_KEY]))
                {
                    throw new AopException("API 请求异常! 来源: 加密内容为空!");
                }

                if (string.IsNullOrEmpty(this.encyptKey) || string.IsNullOrEmpty(this.encyptType))
                {
                    throw new AopException("API 请求异常! 来源: 加密类型或加密Key不能为空");
                }

                if (!"AES".Equals(this.encyptType))
                {
                    throw new AopException("API暂时只支持AES加密");
                }
                string encryptContent = txtParams[CONTENT_KEY];// AopUtils.AesEncrypt(this.encyptKey, txtParams[BIZ_CONTENT], this.charset);
                txtParams.Remove(CONTENT_KEY);
                txtParams.Add(CONTENT_KEY, encryptContent);
                txtParams.Add(ENCRYPT_TYPE, this.encyptType);
            }

            // 添加签名参数AopUtils.SignAopRequest(txtParams, privateKeyPem, charset, this.keyFromFile, signType)
            txtParams.Add(SIGN, string.Empty);
            string body = webUtils.DoPost(this.serverUrl + "?" + CHARSET + "=" + this.charset, txtParams, this.charset);

            T rsp = null;
            IAopParser <T> parser = null;

            if ("xml".Equals(format))
            {
                throw new NotImplementedException("暂时不支持xml进行序列号!");
                //parser = new AopXmlParser<T>();
                //rsp = parser.Parse(body, charset);
            }
            else
            {
                parser = new AopJsonParser <T>();
                rsp    = parser.Parse(body, charset);
            }
            return(rsp);
        }
Exemple #12
0
        public T Execute <T>(IAopRequest <T> request, string accessToken, string appAuthToken) 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());

            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, charset);
            txtParams.Add(APP_AUTH_TOKEN, appAuthToken);

            // 添加签名参数
            txtParams.Add(SIGN, AopUtils.SignAopRequest(txtParams, privateKeyPem, charset));



            // 是否需要上传文件
            string body;
            //计时器
            Stopwatch sw = new Stopwatch();

            sw.Start();

            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
            {
                body = webUtils.DoPost(this.serverUrl + "?" + CHARSET + "=" + this.charset, txtParams, this.charset);
            }
            //停止
            sw.Stop();

            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);
            rsp.RequestUrl     = webUtils.RequestUrl;
            rsp.HttpMethod     = webUtils.HttpMethod;
            rsp.ElapsedTime    = string.Format("{0}ms", sw.ElapsedMilliseconds);//耗费时间
            rsp.RequestContent = webUtils.RequestContent;
            return(rsp);
        }
        public T Execute <T>(IAopRequest <T> request, string accessToken, string appAuthToken) where T : AopResponse
        {
            if (string.IsNullOrEmpty(charset))
            {
                charset = "utf-8";
            }
            string text = null;

            text = (string.IsNullOrEmpty(request.GetApiVersion()) ? Version : request.GetApiVersion());
            AopDictionary requestParams = new AopDictionary(request.GetParameters());

            requestParams = SerializeBizModel(requestParams, request);
            requestParams.Add("method", request.GetApiName());
            requestParams.Add("version", text);
            requestParams.Add("app_id", appId);
            requestParams.Add("format", format);
            requestParams.Add("timestamp", DateTime.Now);
            requestParams.Add("auth_token", accessToken);
            requestParams.Add("sign_type", signType);
            requestParams.Add("terminal_type", request.GetTerminalType());
            requestParams.Add("terminal_info", request.GetTerminalInfo());
            requestParams.Add("prod_code", request.GetProdCode());
            requestParams.Add("charset", charset);
            if (!string.IsNullOrEmpty(request.GetNotifyUrl()))
            {
                requestParams.Add("notify_url", request.GetNotifyUrl());
            }
            if (!string.IsNullOrEmpty(appAuthToken))
            {
                requestParams.Add("app_auth_token", appAuthToken);
            }
            if (request.GetNeedEncrypt())
            {
                if (string.IsNullOrEmpty(requestParams["biz_content"]))
                {
                    throw new AopException("api request Fail ! The reason: encrypt request is not supported!");
                }
                if (string.IsNullOrEmpty(encyptKey) || string.IsNullOrEmpty(encyptType))
                {
                    throw new AopException("encryptType or encryptKey must not null!");
                }
                if (!"AES".Equals(encyptType))
                {
                    throw new AopException("api only support Aes!");
                }
                string value = AopUtils.AesEncrypt(encyptKey, requestParams["biz_content"], charset);
                requestParams.Remove("biz_content");
                requestParams.Add("biz_content", value);
                requestParams.Add("encrypt_type", encyptType);
            }
            requestParams.Add("sign", AopUtils.SignAopRequest(requestParams, privateKeyPem, charset, keyFromFile, signType));
            string text2;

            if (request is IAopUploadRequest <T> )
            {
                IAopUploadRequest <T>          aopUploadRequest = (IAopUploadRequest <T>)request;
                IDictionary <string, FileItem> fileParams       = AopUtils.CleanupDictionary(aopUploadRequest.GetFileParameters());
                text2 = webUtils.DoPost(serverUrl + "?charset=" + charset, requestParams, fileParams, charset);
            }
            else
            {
                text2 = webUtils.DoPost(serverUrl + "?charset=" + charset, requestParams, charset);
            }
            T val = null;
            IAopParser <T> aopParser = null;

            if ("xml".Equals(format))
            {
                aopParser = new AopXmlParser <T>();
                val       = aopParser.Parse(text2, charset);
            }
            else
            {
                aopParser = new AopJsonParser <T>();
                val       = aopParser.Parse(text2, charset);
            }
            ResponseParseItem responseParseItem = parseRespItem(request, text2, aopParser, encyptKey, encyptType, charset);

            val = aopParser.Parse(responseParseItem.realContent, charset);
            CheckResponseSign(request, responseParseItem.respContent, val.IsError, aopParser, alipayPublicKey, charset, signType, keyFromFile);
            return(val);
        }
        public T pageExecute <T>(IAopRequest <T> request, string accessToken, string reqMethod) where T : AopResponse
        {
            if (string.IsNullOrEmpty(charset))
            {
                charset = "utf-8";
            }
            string text = null;

            text = (string.IsNullOrEmpty(request.GetApiVersion()) ? Version : request.GetApiVersion());
            AopDictionary requestParams = new AopDictionary(request.GetParameters());

            requestParams = SerializeBizModel(requestParams, request);
            StringBuilder stringBuilder = new StringBuilder();

            requestParams.Add("method", request.GetApiName());
            requestParams.Add("version", text);
            requestParams.Add("app_id", appId);
            requestParams.Add("format", format);
            requestParams.Add("timestamp", DateTime.Now);
            requestParams.Add("auth_token", accessToken);
            requestParams.Add("sign_type", signType);
            requestParams.Add("terminal_type", request.GetTerminalType());
            requestParams.Add("terminal_info", request.GetTerminalInfo());
            requestParams.Add("prod_code", request.GetProdCode());
            requestParams.Add("notify_url", request.GetNotifyUrl());
            requestParams.Add("charset", charset);
            requestParams.Add("return_url", request.GetReturnUrl());
            IDictionary <string, string> dictionary = new SortedDictionary <string, string>(requestParams);

            requestParams = new AopDictionary(dictionary);
            requestParams.Add("sign", AopUtils.SignAopRequest(dictionary, privateKeyPem, charset, keyFromFile, signType));
            string body;

            if (request is IAopUploadRequest <T> )
            {
                IAopUploadRequest <T>          aopUploadRequest = (IAopUploadRequest <T>)request;
                IDictionary <string, FileItem> fileParams       = AopUtils.CleanupDictionary(aopUploadRequest.GetFileParameters());
                body = webUtils.DoPost(serverUrl + "?charset=" + charset, requestParams, fileParams, charset);
            }
            else if (reqMethod.Equals("GET"))
            {
                string text2 = serverUrl;
                if (requestParams != null && requestParams.Count > 0)
                {
                    text2 = ((!text2.Contains("?")) ? (text2 + "?" + WebUtils.BuildQuery(requestParams, charset)) : (text2 + "&" + WebUtils.BuildQuery(requestParams, charset)));
                }
                body = text2;
            }
            else
            {
                body = BuildHtmlRequest(requestParams, reqMethod, reqMethod);
            }
            T val = null;
            IAopParser <T> aopParser = null;

            if ("xml".Equals(format))
            {
                aopParser = new AopXmlParser <T>();
                return(aopParser.Parse(body, charset));
            }
            aopParser = new AopJsonParser <T>();
            return(aopParser.Parse(body, charset));
        }