Ejemplo n.º 1
0
        public SignItem GetSignItem(IAopRequest <T> request, string reponseBody)
        {
            if (string.IsNullOrEmpty(reponseBody))
            {
                return(null);
            }
            SignItem signItem = new SignItem();
            string   text     = signItem.Sign = GetSign(reponseBody);
            string   text2    = signItem.SignSourceDate = GetSignSourceData(request, reponseBody);

            return(signItem);
        }
Ejemplo n.º 2
0
        private AopDictionary buildRequestParams <T>(IAopRequest <T> request, String accessToken, String appAuthToken) where T : AopResponse
        {
            // 默认参数
            AopDictionary oriParams = new AopDictionary(request.GetParameters());

            // 序列化BizModel
            AopDictionary result = SerializeBizModel(oriParams, request);

            // 获取参数
            String charset    = String.IsNullOrEmpty(this.charset) ? "utf-8" : this.charset;
            String apiVersion = String.IsNullOrEmpty(request.GetApiVersion()) ? this.Version : request.GetApiVersion();

            // 添加协议级请求参数,为空的参数后面会自动过滤,这里不做处理。
            result.Add(METHOD, request.GetApiName());
            result.Add(VERSION, apiVersion);
            result.Add(APP_ID, appId);
            result.Add(FORMAT, format);
            result.Add(TIMESTAMP, DateTime.Now);
            result.Add(ACCESS_TOKEN, accessToken);
            result.Add(SIGN_TYPE, signType);
            result.Add(TERMINAL_TYPE, request.GetTerminalType());
            result.Add(TERMINAL_INFO, request.GetTerminalInfo());
            result.Add(PROD_CODE, request.GetProdCode());
            result.Add(NOTIFY_URL, request.GetNotifyUrl());
            result.Add(CHARSET, charset);
            result.Add(RETURN_URL, request.GetReturnUrl());
            result.Add(APP_AUTH_TOKEN, appAuthToken);

            if (request.GetNeedEncrypt())
            {
                if (String.IsNullOrEmpty(result[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, result[BIZ_CONTENT], this.charset);
                result.Remove(BIZ_CONTENT);
                result.Add(BIZ_CONTENT, encryptContent);
                result.Add(ENCRYPT_TYPE, this.encyptType);
            }

            return(result);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        public string EncryptSourceData(IAopRequest <T> request, string body, string encryptType, string encryptKey, string charset)
        {
            if (!"AES".Equals(encryptType))
            {
                throw new AopException("API only support AES!");
            }
            EncryptParseItem encryptParseItem = parseEncryptData(request, body);
            string           str  = body.Substring(0, encryptParseItem.startIndex);
            string           str2 = body.Substring(encryptParseItem.endIndex);
            string           str3 = AlipayEncrypt.AesDencrypt(encryptKey, encryptParseItem.encryptContent, charset);

            return(str + str3 + str2);
        }
Ejemplo n.º 5
0
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="requestParams"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        private AopDictionary SerializeBizModel <T>(AopDictionary requestParams, IAopRequest <T> request) where T : AopResponse
        {
            AopDictionary result            = requestParams;
            Boolean       isBizContentEmpty = !requestParams.ContainsKey(BIZ_CONTENT) || String.IsNullOrEmpty(requestParams[BIZ_CONTENT]);

            if (isBizContentEmpty && request.GetBizModel() != null)
            {
                AopObject bizModel = request.GetBizModel();
                String    content  = Serialize(bizModel);
                result.Add(BIZ_CONTENT, content);
            }
            return(result);
        }
        public T SdkExecute <T>(IAopRequest <T> request) where T : AopResponse
        {
            AopDictionary dictionary = buildRequestParams(request, null, null);
            IDictionary <string, string> dictionary2 = new SortedDictionary <string, string>(dictionary);
            AopDictionary aopDictionary = new AopDictionary(dictionary2);
            string        text          = string.IsNullOrEmpty(charset) ? "utf-8" : charset;
            string        value         = AopUtils.SignAopRequest(aopDictionary, privateKeyPem, text, keyFromFile, signType);

            aopDictionary.Add("sign", value);
            string body = WebUtils.BuildQuery(aopDictionary, text);
            T      val  = (T)Activator.CreateInstance(typeof(T));

            val.Body = body;
            return(val);
        }
Ejemplo n.º 7
0
        public string EncryptSourceData(IAopRequest <T> request, string body, string encryptType, string encryptKey, string charset)
        {
            if (!"AES".Equals(encryptType))
            {
                throw new AopException("API only support AES!");
            }

            EncryptParseItem item = parseEncryptData(request, body);

            string bodyIndexContent = body.Substring(0, item.startIndex);
            string bodyEndexContent = body.Substring(item.endIndex);

            //TODO 解密逻辑
            string bizContent = AlipayEncrypt.AesDencrypt(encryptKey, item.encryptContent, charset);

            return(bodyIndexContent + bizContent + bodyEndexContent);
        }
Ejemplo n.º 8
0
        public SignItem GetSignItem(IAopRequest <T> request, string responseBody)
        {
            if (string.IsNullOrEmpty(responseBody))
            {
                return(null);
            }

            var signItem = new SignItem();
            var sign     = GetSign(responseBody);

            signItem.Sign = sign;

            var signSourceData = GetSignSourceData(request, responseBody);

            signItem.SignSourceDate = signSourceData;

            return(signItem);
        }
Ejemplo n.º 9
0
        private static string GetSignSourceData(IAopRequest <T> request, string body)
        {
            string text   = request.GetApiName().Replace(".", "_") + "_response";
            string text2  = "error_response";
            int    num    = body.IndexOf(text);
            int    num2   = body.IndexOf(text2);
            string result = null;

            if (num > 0)
            {
                result = ParseSignSourceData(body, text, num);
            }
            else if (num2 > 0)
            {
                result = ParseSignSourceData(body, text2, num2);
            }
            return(result);
        }
Ejemplo n.º 10
0
        private static EncryptParseItem ParseEncryptData(IAopRequest <T> request, string body)
        {
            string           text   = request.GetApiName().Replace(".", "_") + "_response";
            string           text2  = "error_response";
            int              num    = body.IndexOf(text);
            int              num2   = body.IndexOf(text2);
            EncryptParseItem result = null;

            if (num > 0)
            {
                result = ParseEncryptItem(body, text, num);
            }
            else if (num2 > 0)
            {
                result = ParseEncryptItem(body, text2, num2);
            }
            return(result);
        }
Ejemplo n.º 11
0
        public static void CheckResponseSign <T>(IAopRequest <T> request, string responseBody, bool isError, IAopParser <T> parser, string alipayPublicKey, string charset, string signType, bool keyFromFile) where T : AopResponse
        {
            if (string.IsNullOrEmpty(alipayPublicKey) || string.IsNullOrEmpty(charset))
            {
                return;
            }

            SignItem signItem = parser.GetSignItem(request, responseBody);

            if (signItem == null)
            {
                throw new AopException("sign check fail: Body is Empty!");
            }

            if (!isError ||
                (isError && !string.IsNullOrEmpty(signItem.Sign)))
            {
                bool rsaCheckContent = AlipaySignature.RSACheckContent(signItem.SignSourceDate, signItem.Sign, alipayPublicKey, charset, signType, keyFromFile);
                if (!rsaCheckContent)
                {
                    if (!string.IsNullOrEmpty(signItem.SignSourceDate))
                    {
                        string srouceData = signItem.SignSourceDate;
                        if (signItem.SignSourceDate.Contains("\\/"))
                        {
                            srouceData = srouceData.Replace("\\/", "/");
                        }
                        bool jsonCheck = AlipaySignature.RSACheckContent(srouceData, signItem.Sign, alipayPublicKey, charset, signType, keyFromFile);
                        if (!jsonCheck)
                        {
                            throw new AopException(
                                      "sign check fail: check Sign and Data Fail JSON also!" + signItem.Sign);
                        }
                    }
                    else
                    {
                        throw new AopException(
                                  "sign check fail: check Sign and Data Fail!" + signItem.Sign);
                    }
                }
            }
        }
        private AopDictionary buildRequestParams <T>(IAopRequest <T> request, string accessToken, string appAuthToken) where T : AopResponse
        {
            AopDictionary requestParams = new AopDictionary(request.GetParameters());
            AopDictionary aopDictionary = SerializeBizModel(requestParams, request);
            string        value         = string.IsNullOrEmpty(charset) ? "utf-8" : charset;
            string        value2        = string.IsNullOrEmpty(request.GetApiVersion()) ? Version : request.GetApiVersion();

            aopDictionary.Add("method", request.GetApiName());
            aopDictionary.Add("version", value2);
            aopDictionary.Add("app_id", appId);
            aopDictionary.Add("format", format);
            aopDictionary.Add("timestamp", DateTime.Now);
            aopDictionary.Add("auth_token", accessToken);
            aopDictionary.Add("sign_type", signType);
            aopDictionary.Add("terminal_type", request.GetTerminalType());
            aopDictionary.Add("terminal_info", request.GetTerminalInfo());
            aopDictionary.Add("prod_code", request.GetProdCode());
            aopDictionary.Add("notify_url", request.GetNotifyUrl());
            aopDictionary.Add("charset", value);
            aopDictionary.Add("return_url", request.GetReturnUrl());
            aopDictionary.Add("app_auth_token", appAuthToken);
            if (request.GetNeedEncrypt())
            {
                if (string.IsNullOrEmpty(aopDictionary["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 value3 = AopUtils.AesEncrypt(encyptKey, aopDictionary["biz_content"], charset);
                aopDictionary.Remove("biz_content");
                aopDictionary.Add("biz_content", value3);
                aopDictionary.Add("encrypt_type", encyptType);
            }
            return(aopDictionary);
        }
Ejemplo n.º 13
0
        public SignItem GetSignItem(IAopRequest <T> request, T response)
        {
            string body = response.Body;

            if (string.IsNullOrEmpty(body))
            {
                return(null);
            }

            SignItem signItem = new SignItem();
            string   sign     = GetSign(body);

            signItem.Sign = sign;

            string signSourceData = GetSignSourceData(request, body);

            signItem.SignSourceDate = signSourceData;

            return(signItem);
        }
Ejemplo n.º 14
0
        private static ResponseParseItem parseRespItem <T>(IAopRequest <T> request, string respBody, IAopParser <T> parser, string encryptKey, string encryptType, string charset) where T : AopResponse
        {
            string realContent = null;

            if (request.GetNeedEncrypt())
            {
                realContent = parser.EncryptSourceData(request, respBody, encryptType, encryptKey, charset);
            }
            else
            {
                realContent = respBody;
            }

            ResponseParseItem item = new ResponseParseItem();

            item.realContent = realContent;
            item.respContent = respBody;

            return(item);
        }
Ejemplo n.º 15
0
        private static string GetSignSourceData(IAopRequest <T> request, string body)
        {
            string rootNode      = request.GetApiName().Replace(".", "_") + AlipayConstants.RESPONSE_SUFFIX;
            string errorRootNode = AlipayConstants.ERROR_RESPONSE;

            int indexOfRootNode  = body.IndexOf(rootNode, StringComparison.Ordinal);
            int indexOfErrorRoot = body.IndexOf(errorRootNode, StringComparison.Ordinal);

            string result = null;

            if (indexOfRootNode > 0)
            {
                result = ParseSignSourceData(body, rootNode, indexOfRootNode);
            }
            else if (indexOfErrorRoot > 0)
            {
                result = ParseSignSourceData(body, errorRootNode, indexOfErrorRoot);
            }

            return(result);
        }
Ejemplo n.º 16
0
        /// <summary>
        ///     解析加密节点
        /// </summary>
        /// <param name="request"></param>
        /// <param name="body"></param>
        /// <returns></returns>
        private static EncryptParseItem parseEncryptData(IAopRequest <T> request, string body)
        {
            var rootNode      = request.GetApiName().Replace(".", "_") + AlipayConstants.RESPONSE_SUFFIX;
            var errorRootNode = AlipayConstants.ERROR_RESPONSE;

            var indexOfRootNode  = body.IndexOf(rootNode);
            var indexOfErrorRoot = body.IndexOf(errorRootNode);

            EncryptParseItem result = null;

            if (indexOfRootNode > 0)
            {
                result = ParseEncryptItem(body, rootNode, indexOfRootNode);
            }
            else if (indexOfErrorRoot > 0)
            {
                result = ParseEncryptItem(body, errorRootNode, indexOfErrorRoot);
            }

            return(result);
        }
Ejemplo n.º 17
0
        public CertItem GetCertItem(IAopRequest <T> request, string reponseBody)
        {
            if (string.IsNullOrEmpty(reponseBody))
            {
                return(null);
            }

            CertItem certItem = new CertItem();
            string   sign     = GetSign(reponseBody);

            certItem.Sign = sign;

            string signSourceData = GetSignSourceData(request, reponseBody);

            certItem.SignSourceDate = signSourceData;

            string certSN = GetCertSN(reponseBody);

            certItem.CertSN = certSN;

            return(certItem);
        }
Ejemplo n.º 18
0
        private void CheckResponseCertSign <T>(IAopRequest <T> request, string responseBody, bool isError, IAopParser <T> parser) where T : AopResponse
        {
            if (request.GetApiName().Equals("alipay.open.app.alipaycert.download"))
            {
                return;
            }

            CertItem certItem = parser.GetCertItem(request, responseBody);

            if (certItem == null)
            {
                throw new AopException("sign check fail: Body is Empty!");
            }

            if (!isError || (isError && !string.IsNullOrEmpty(certItem.Sign)))
            {
                String currentAlipayPublicKey = LoadAlipayPublicKey(certItem);

                bool rsaCheckContent = AlipaySignature.RSACheckContent(certItem.SignSourceDate, certItem.Sign, currentAlipayPublicKey, charset, signType, false);
                if (!rsaCheckContent)
                {
                    if (!string.IsNullOrEmpty(certItem.SignSourceDate) && certItem.SignSourceDate.Contains("\\/"))
                    {
                        string sourceData = certItem.SignSourceDate.Replace("\\/", "/");
                        bool   jsonCheck  = AlipaySignature.RSACheckContent(sourceData, certItem.Sign, currentAlipayPublicKey, charset, signType, false);
                        if (!jsonCheck)
                        {
                            throw new AopException("sign check fail: check Sign and Data Fail JSON also");
                        }
                    }
                    else
                    {
                        throw new AopException("sign check fail: check Sign and Data Fail!");
                    }
                }
            }
        }
 public async Task <T> PageExecuteAsync <T>(IAopRequest <T> request, string session, string reqMethod) where T : AopResponse
 {
     return(await _aopClient.PageExecuteAsync(request, session, reqMethod));
 }
Ejemplo n.º 20
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);
        }
Ejemplo n.º 21
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);
        }
Ejemplo n.º 22
0
 public T pageExecute <T>(IAopRequest <T> request) where T : AopResponse
 {
     return(pageExecute <T>(request, null, "POST"));
 }
Ejemplo n.º 23
0
 public T Execute <T>(IAopRequest <T> request, string accessToken) where T : AopResponse
 {
     return(Execute <T>(request, accessToken, null));
 }
Ejemplo n.º 24
0
 public T Execute <T>(IAopRequest <T> request) where T : AopResponse
 {
     return(Execute <T>(request, null));
 }
Ejemplo n.º 25
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);
        }
 public T Execute <T>(IAopRequest <T> request, string session, string appAuthToken) where T : AopResponse
 {
     return(_aopClient.Execute(request, session, appAuthToken));
 }
 public async Task <T> ExecuteAsync <T>(IAopRequest <T> request, string session, string appAuthToken) where T : AopResponse
 {
     return(await _aopClient.ExecuteAsync(request, session, appAuthToken));
 }
 public async Task <T> PageExecuteAsync <T>(IAopRequest <T> request) where T : AopResponse
 {
     return(await _aopClient.PageExecuteAsync(request));
 }
 public T PageExecute <T>(IAopRequest <T> request, string session, string reqMethod) where T : AopResponse
 {
     return(_aopClient.PageExecute(request, session, reqMethod));
 }
 public T SdkExecute <T>(IAopRequest <T> request) where T : AopResponse
 {
     return(_aopClient.SdkExecute(request));
 }