示例#1
0
        /// <summary>
        /// 调用接口
        /// </summary>
        /// <param name="outcoming">请求参数</param>
        /// <param name="stream">正常情况下返回的数据流, 内容是 CSV 格式的数据</param>
        /// <param name="incoming">出错时的返回结果</param>
        /// <returns>正常情况: true, 出错时: false</returns>
        public async Task <bool> Invoke(Outcoming outcoming, AsyncOutParameter <Stream> stream, AsyncOutParameter <Incoming> incoming)
        {
            var url      = Stage.GetApiRootUrl(_sandbox) + "pay/downloadbill";
            var response = await _requester.GetResponse(url, false, outcoming).ConfigureAwait(false);

            var netStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);

            var peekStream = new PeekableStream(netStream, 1);
            var buffer     = new byte[1];
            await peekStream.PeekAsync(buffer, 0, 1).ConfigureAwait(false);

            if (buffer[0] != '<')
            {
                stream.SetValue(peekStream);
                return(true);
            }

            using (var reader = new StreamReader(peekStream, Encoding.UTF8))
            {
                var responseBody = await reader.ReadToEndAsync().ConfigureAwait(false);

                incoming.SetValue(_requester.ParseResponse <Incoming, ErrorCode>(responseBody, _checkSignature));
                return(false);
            }
        }
示例#2
0
        private static async Task <string> FormatUrl(string url, ApiConfig config, AsyncOutParameter <string> token)
        {
            if (url.IndexOf("$acac$", StringComparison.InvariantCulture) < 0)
            {
                return(url);
            }

            var m           = config?.AccessTokenManager ?? _defaultConfig.AccessTokenManager;
            var accessToken = await m.GetToken().ConfigureAwait(false);

            var escapedToken = Uri.EscapeDataString(accessToken);

            token.SetValue(accessToken);

            return(url.Replace("$acac$", "access_token=" + escapedToken));
        }