public async Task <T> ExecuteAsync <T>(HttpRequest request) where T : LianLianPayNotifyResponse
        {
            if (request.HasFormContentType)
            {
                var parameters = await GetParametersAsync(request);

                var query = LianLianPayUtility.BuildQuery(parameters);
                Logger?.LogTrace(0, "Request:{query}", query);

                var parser = new LianLianPayDictionaryParser <T>();
                var rsp    = parser.Parse(parameters);
                CheckNotifySign(parameters);
                return(rsp);
            }
            else if (request.HasTextJsonContentType())
            {
                var body = await new StreamReader(request.Body).ReadToEndAsync();
                Logger?.LogTrace(0, "Request:{body}", body);

                var parser = new LianLianPayJsonParser <T>();
                var rsp    = parser.Parse(body);
                CheckNotifySign(rsp.Parameters);
                return(rsp);
            }
            else
            {
                throw new Exception("content type is not supported");
            }
        }
Esempio n. 2
0
        public async Task <T> ExecuteAsync <T>(HttpRequest request, string optionsName) where T : LianLianPayNotify
        {
            var options = _optionsSnapshotAccessor.Get(optionsName);

            if (request.HasFormContentType)
            {
                var parameters = await GetParametersAsync(request);

                var query = LianLianPayUtility.BuildQuery(parameters);
                _logger.Log(options.LogLevel, "Request:{query}", query);

                var parser = new LianLianPayDictionaryParser <T>();
                var rsp    = parser.Parse(parameters);
                CheckNotifySign(parameters, options);
                return(rsp);
            }

            if (request.HasTextJsonContentType())
            {
                var body = await new StreamReader(request.Body).ReadToEndAsync();
                _logger.Log(options.LogLevel, "Request:{body}", body);

                var parser = new LianLianPayJsonParser <T>();
                var rsp    = parser.Parse(body);
                CheckNotifySign(rsp.Parameters, options);
                return(rsp);
            }

            throw new LianLianPayException("content type is not supported");
        }
        public Task <T> PageExecuteAsync <T>(ILianLianPayRequest <T> request, string reqMethod) where T : LianLianPayResponse
        {
            var txtParams = new LianLianPayDictionary(request.GetParameters())
            {
                { OID_PARTNER, Options.OidPartner },
                { SIGN_TYPE, Options.SignType },
                { BUSI_PARTNER, Options.BusiPartner },
                { TIMESTAMP, DateTime.Now },
            };

            // 添加签名
            var signContent = LianLianPaySecurity.GetSignContent(txtParams);

            txtParams.Add(SIGN, MD5WithRSA.SignData(signContent, Options.PrivateKey));

            var body = string.Empty;

            if (reqMethod.ToUpper() == "GET")
            {
                //拼接get请求的url
                var tmpUrl = request.GetRequestUrl();
                if (txtParams != null && txtParams.Count > 0)
                {
                    if (tmpUrl.Contains("?"))
                    {
                        tmpUrl = tmpUrl + "&" + LianLianPayUtility.BuildQuery(txtParams);
                    }
                    else
                    {
                        tmpUrl = tmpUrl + "?" + LianLianPayUtility.BuildQuery(txtParams);
                    }
                }
                body = tmpUrl;
                Logger?.LogTrace(0, "Request Url:{body}", body);
            }
            else
            {
                //输出post表单
                body = BuildHtmlRequest(request.GetRequestUrl(), txtParams);
                Logger?.LogTrace(0, "Request Html:{body}", body);
            }

            var parser = new LianLianPayJsonParser <T>();
            var rsp    = parser.Parse(body);

            return(Task.FromResult(rsp));
        }