コード例 #1
0
        /// <summary>
        /// Создать строку для запроса списка чеков
        /// </summary>
        /// <param name="filter"><see cref="GetReceiptsFilter"/></param>
        /// <param name="cursor">Указатель на следующий фрагмент списка</param>
        public static string CreateRequestUrl(this GetReceiptsFilter filter, string cursor)
        {
            var url = new StringBuilder();

            url.Append("receipts?");

            void AppendParam(string value, string name)
            {
                if (!string.IsNullOrEmpty(value))
                {
                    url.Append($"{name}={value}&");
                }
            }

            void AppendDate(DateTimeOffset?date, string name) =>
            AppendParam(date?.UtcDateTime.ToString("s") + "Z", name);

            AppendDate(filter?.CreatedAtGte, "created_at.gte");
            AppendDate(filter?.CreatedAtGt, "created_at.gt");
            AppendDate(filter?.CreatedAtLte, "created_at.lte");
            AppendDate(filter?.CreatedAtLt, "created_at.lt");
            AppendParam(filter?.Status?.ToText(), "status");
            AppendParam(filter?.PaymentId, "payment_id");
            AppendParam(filter?.RefundId, "refund_id");
            AppendParam(filter?.Limit?.ToString(), "limit");
            AppendParam(cursor, "cursor");

            url.Length--; // remove last ? or &

            return(url.ToString());
        }
コード例 #2
0
        /// <summary>
        /// Query receipts
        /// </summary>
        /// <param name="filter">Request filter parameters</param>
        /// <param name="cancellationToken"><see cref="CancellationToken"/></param>
        /// <returns><see cref="ReceiptInformation"/></returns>
        public async IAsyncEnumerable <ReceiptInformation> GetReceiptsAsync(GetReceiptsFilter filter = null,
                                                                            [EnumeratorCancellation] CancellationToken cancellationToken = default)
        {
            string cursor = null;

            do
            {
                var batch = await QueryAsync <ReceiptInformationResponse>(HttpMethod.Get, null, filter.CreateRequestUrl(cursor), null, cancellationToken);

                foreach (var item in batch.Items)
                {
                    cancellationToken.ThrowIfCancellationRequested();
                    yield return(item);
                }

                cursor = batch.NextCursor;
            } while (!string.IsNullOrEmpty(cursor));
        }
コード例 #3
0
ファイル: Client.cs プロジェクト: iXab3r/Yandex.Checkout.V3
        /// <summary>
        /// Query receipts
        /// </summary>
        /// <param name="filter">Request filter parameters</param>
        /// <param name="cancellationToken"><see cref="CancellationToken"/></param>
        /// <returns><see cref="ReceiptInformation"/></returns>
        public IEnumerable <ReceiptInformation> GetReceipts(GetReceiptsFilter filter            = null,
                                                            CancellationToken cancellationToken = default)
        {
            string cursor = null;

            do
            {
                cancellationToken.ThrowIfCancellationRequested();
                var batch = Query <ReceiptInformationResponse>("GET", null, filter.CreateRequestUrl(cursor), null);

                foreach (var item in batch.Items)
                {
                    cancellationToken.ThrowIfCancellationRequested();
                    yield return(item);
                }

                cursor = batch.NextCursor;
            } while (!string.IsNullOrEmpty(cursor));
        }