Ejemplo n.º 1
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(AlipayConstants.METHOD, request.GetApiName());
            result.Add(AlipayConstants.VERSION, apiVersion);
            result.Add(AlipayConstants.ALIPAY_SDK, SDK_VERSION);
            result.Add(AlipayConstants.APP_ID, appId);
            result.Add(AlipayConstants.FORMAT, format);
            result.Add(AlipayConstants.TIMESTAMP, DateTime.Now);
            result.Add(AlipayConstants.ACCESS_TOKEN, accessToken);
            result.Add(AlipayConstants.SIGN_TYPE, signType);
            result.Add(AlipayConstants.TERMINAL_TYPE, request.GetTerminalType());
            result.Add(AlipayConstants.TERMINAL_INFO, request.GetTerminalInfo());
            result.Add(AlipayConstants.PROD_CODE, request.GetProdCode());
            result.Add(AlipayConstants.NOTIFY_URL, request.GetNotifyUrl());
            result.Add(AlipayConstants.CHARSET, charset);
            result.Add(AlipayConstants.RETURN_URL, request.GetReturnUrl());
            result.Add(AlipayConstants.APP_AUTH_TOKEN, appAuthToken);
            if (certEnvironment != null)
            {
                result.Add(AlipayConstants.ALIPAY_ROOT_CERT_SN, certEnvironment.RootCertSN);
                result.Add(AlipayConstants.APP_CERT_SN, certEnvironment.AppCertSN);
            }


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

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

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

            // 获取参数
            var charset    = string.IsNullOrEmpty(this.charset) ? "utf-8" : this.charset;
            var apiVersion = string.IsNullOrEmpty(request.GetApiVersion()) ? 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(encyptKey) || string.IsNullOrEmpty(encyptType))
                {
                    throw new AopException("encryptType or encryptKey must not null!");
                }

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

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

            return(result);
        }
        private static ResponseParseItem parseRespItem <T>(IAopRequest <T> request, string respBody, IAopParser <T> parser, string encryptKey, string encryptType, string charset) where T : AopResponse
        {
            string text = null;

            text = ((!request.GetNeedEncrypt()) ? respBody : parser.EncryptSourceData(request, respBody, encryptType, encryptKey, charset));
            ResponseParseItem responseParseItem = new ResponseParseItem();

            responseParseItem.realContent = text;
            responseParseItem.respContent = respBody;
            return(responseParseItem);
        }
        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.º 5
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.º 6
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.º 7
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);
        }
Ejemplo n.º 8
0
        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);
        }
        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);
        }