/// <summary>
        /// 消息接收处理
        /// </summary>
        /// <param name="authSignature"></param>
        /// <returns></returns>
        public override IActionResult Post(AuthSignature authSignature)
        {
            this.AuthSignature = authSignature;
            var       stream   = HttpContext.Request.Body;
            XDocument document = XmlHelper.Convert(stream);

            this.ConvertEntity(document.ToString());
            string result = this.ExecuteResult();

            return(Content(result));
        }
Пример #2
0
        protected async Task <string> GetResponseAsync(string url)
        {
            using (var request = new HttpRequestMessage(HttpMethod.Get, url))
            {
                AuthSignature signature = new AuthSignature(this.wykopAccess.Secret, request.RequestUri);
                var           hash      = signature.FetchSignature();
                request.Headers.Add("apisign", hash);

                HttpResponseMessage httpResponseMessage = await this.httpClient.SendAsync(request);

                httpResponseMessage.EnsureSuccessStatusCode();
                return(await httpResponseMessage.Content.ReadAsStringAsync());
            }
        }
Пример #3
0
        public Uri Connect(Uri redirectUrl, string appSecret)
        {
            var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(redirectUrl.AbsoluteUri);
            var base64         = Convert.ToBase64String(plainTextBytes);

            var redirect = Uri.EscapeDataString(base64);
            var secure   = AuthSignature.ComputeMD5(appSecret + redirectUrl.AbsoluteUri);

            var parameters = new HashSet <ApiParameter>
            {
                new ApiParameter("redirect", redirect),
                new ApiParameter("secure", secure)
            };

            return(Client.GetApiMethodUrl(new ApiMethod(ApiV1Constants.UserConnect, HttpMethod.Post, parameters)));
        }
Пример #4
0
 public abstract IActionResult Post([FromBody] AuthSignature authSignature);
Пример #5
0
        public async Task <TResult> CallApiMethod <TResult>(ApiMethod method, IEnumerable <JsonConverter> converters = null)
            where TResult : class
        {
            if (_disposed)
            {
                throw new ObjectDisposedException("WykopClient");
            }
            if (method == null)
            {
                throw new ArgumentNullException(nameof(method));
            }

            var apiRequestUrl = BuildApiRequestUrl(method);

            using (var request = new HttpRequestMessage(method.HttpMethod, apiRequestUrl.ToString()))
            {
                AuthSignature signature;
                AddRequestHeader(request);

                if (method.HttpMethod == HttpMethod.Get)
                {
                    signature = new AuthSignature(_appSecret, request.RequestUri);
                }
                else if (method.HttpMethod == HttpMethod.Post)
                {
                    signature       = new AuthSignature(_appSecret, request.RequestUri, method.PostParameters);
                    request.Content = BuilPostContent(method);
                }
                else
                {
                    throw new UnsupportedHttpMethodException("Http method {method.HttpMethod} is not supported");
                }

                var hash = signature.FetchSignature();
                request.Headers.Add("apisign", hash);

                using (var response = await _client.SendAsync(request, CancellationToken.None).ConfigureAwait(false))
                {
                    if (!response.IsSuccessStatusCode)
                    {
                        throw new InvalidResponseException("Response is not success. ", 0);
                    }

                    var stringResponse = response.Content.ReadAsStringAsync().Result;
                    var responseType   = CheckResponseType(stringResponse, response);
                    ValidateErrors(stringResponse);

                    switch (responseType)
                    {
                    case ResponseType.Unsupported:
                    case ResponseType.Json:
                        break;

                    case ResponseType.Html:
                        return((dynamic) new HtmlResponse()
                        {
                            Html = stringResponse
                        });

                    case ResponseType.ValueArray:
                        // API is incosistent - return array with boolean,
                        // but i don't know is that the only one behaviour
                        var booleanResult = new BooleanModel();
                        booleanResult.Success = stringResponse.Contains("true") ? true : false;
                        return((dynamic)booleanResult);
                    }

                    using (var reader = new JsonTextReader(new StringReader(stringResponse)))
                    {
                        var serializer = CreateSerializer(converters);
                        var result     = serializer.Deserialize <TResult>(reader);

                        return(result);
                    }
                }
            }
        }
Пример #6
0
 /// <summary>
 /// 构造器
 /// </summary>
 /// <param name="xml">微信端传入的XML字符串</param>
 /// <param name="authSignature">签名认证实体信息</param>
 public HandlerMsgCenter(string xml, AuthSignature authSignature)
 {
     //转换成实体类型
     CurrentRootMsg = RequestMsgFactory.ConvertEntity(xml);
 }