/// <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()); }
/// <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)); }
/// <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)); }