在 C# 中使用 ExtraParams 从 Stripe 的 API 中提取特定事件

Posted

技术标签:

【中文标题】在 C# 中使用 ExtraParams 从 Stripe 的 API 中提取特定事件【英文标题】:Using ExtraParams in C# to pull specific events from Stripe's API 【发布时间】:2021-02-27 08:47:57 【问题描述】:

所以,我觉得我忽略了一些非常简单的事情。鉴于 Stripe 的卡指纹,我目前正在尝试提取单张卡的所有收费事件。但是,在不提供客户 ID 的情况下如何做到这一点,我很迷茫,尽管我认为我已经很接近了。我不想提供客户 ID,因为这样做的目的是查看谁一直在尝试使用该卡。请指出我的方式的错误,因为我在任何地方都找不到任何表明我做错了什么的文档。这是很多支付处理示例,没有像我试图做的过滤,API 文档也没有解释如何“更深”地过滤。

这是我目前正在使用的功能:

private StripeList<Charge> GetCardCharges(string card_id)
        
            Dictionary<string, object> dict = new Dictionary<string, object>   "source.fingerprint", card_id  ;
            ChargeListOptions options = new ChargeListOptions  Limit = 100, ExtraParams = dict, ;
            var service = new ChargeService();
            var charges = service.List(options);
            return charges;
        

我也试过了

Dictionary<string, object> dict = new Dictionary<string, object>   "source", new Dictionary<string, object>   "fingerprint", card_id    ;

并改用了 IDictionary,但我仍然不断收到未知参数消息。如果没有额外的参数,它可以正常工作,因为它会提取 100 个充电事件,但这对我来说不是很有用,并且编写一个查看每个充电事件的函数似乎效率低下。我当然能够成功地从 JSON 对象中的“初始级别”参数中过滤出来,例如:

Dictionary<string, object> dict = new Dictionary<string, object>   "amount_refunded", 0  ;

感谢您至少阅读此内容,如果需要更多信息,请告诉我!下面是一个来自测试数据的充电事件供参考:

<Stripe.Charge@26602077 id=ch_1Hnzaj2eZvKYlo2CYBG4aWb4> JSON: 
  "id": "ch_1Hnzaj2eZvKYlo2CYBG4aWb4",
  "object": "charge",
  "amount": 100,
  "amount_captured": 0,
  "amount_refunded": 0,
  "application": null,
  "application_fee": null,
  "application_fee_amount": null,
  "authorization_code": null,
  "balance_transaction": null,
  "billing_details": 
    "address": 
      "city": null,
      "country": null,
      "line1": null,
      "line2": null,
      "postal_code": null,
      "state": null
    ,
    "email": null,
    "name": null,
    "phone": null
  ,
  "calculated_statement_descriptor": null,
  "captured": false,
  "created": 1605501925,
  "currency": "usd",
  "customer": null,
  "description": "My First Test Charge (created for API docs)",
  "destination": null,
  "dispute": null,
  "disputed": false,
  "failure_code": null,
  "failure_message": null,
  "fraud_details": 
    "stripe_report": null,
    "user_report": null
  ,
  "invoice": null,
  "level3": null,
  "livemode": false,
  "metadata": ,
  "on_behalf_of": null,
  "order": null,
  "outcome": null,
  "paid": true,
  "payment_intent": null,
  "payment_method": "pm_1Hnzae2eZvKYlo2CZvrXwBjh",
  "payment_method_details": 
    "ach_credit_transfer": null,
    "ach_debit": null,
    "acss_debit": null,
    "alipay": null,
    "au_becs_debit": null,
    "bacs_debit": null,
    "bancontact": null,
    "card": 
      "brand": "visa",
      "checks": 
        "address_line1_check": null,
        "address_postal_code_check": null,
        "cvc_check": "pass"
      ,
      "country": "US",
      "description": null,
      "exp_month": 8,
      "exp_year": 2021,
      "fingerprint": "Xt5EWLLDS7FJjR1c",
      "funding": "credit",
      "iin": null,
      "installments": null,
      "issuer": null,
      "last4": "4242",
      "moto": null,
      "network": "visa",
      "three_d_secure": null,
      "wallet": null
    ,
    "card_present": null,
    "eps": null,
    "fpx": null,
    "giropay": null,
    "ideal": null,
    "interac_present": null,
    "klarna": null,
    "multibanco": null,
    "oxxo": null,
    "p24": null,
    "sepa_debit": null,
    "stripe_account": null,
    "type": "card",
    "wechat": null
  ,
  "receipt_email": null,
  "receipt_number": null,
  "receipt_url": "https://pay.stripe.com/receipts/acct_1032D82eZvKYlo2C/ch_1Hnzaj2eZvKYlo2CYBG4aWb4/rcpt_IOnBY5JhICLngxEzCsH1wb609egY5bR",
  "refunded": false,
  "refunds": 
    "object": "list",
    "data": [],
    "has_more": false,
    "url": "/v1/charges/ch_1Hnzaj2eZvKYlo2CYBG4aWb4/refunds"
  ,
  "review": null,
  "shipping": null,
  "source": 
    "id": "card_1Hnzae2eZvKYlo2CYAmFdjYF",
    "object": "card",
    "account": null,
    "address_city": null,
    "address_country": null,
    "address_line1": null,
    "address_line1_check": null,
    "address_line2": null,
    "address_state": null,
    "address_zip": null,
    "address_zip_check": null,
    "available_payout_methods": null,
    "brand": "Visa",
    "country": "US",
    "currency": null,
    "customer": null,
    "cvc_check": "pass",
    "default_for_currency": null,
    "description": null,
    "dynamic_last4": null,
    "exp_month": 8,
    "exp_year": 2021,
    "fingerprint": "Xt5EWLLDS7FJjR1c",
    "funding": "credit",
    "iin": null,
    "issuer": null,
    "last4": "4242",
    "metadata": ,
    "name": null,
    "tokenization_method": null
  ,
  "source_transfer": null,
  "statement_descriptor": null,
  "statement_descriptor_suffix": null,
  "status": "succeeded",
  "transfer": null,
  "transfer_data": null,
  "transfer_group": null

【问题讨论】:

【参考方案1】:

ExtraParams 用于传入 SDK 原生不可用的参数。主要用例是尚未进入 SDK 的测试版功能。

您不能使用 ExtraParams 过滤列表端点中的特定参数,您唯一的选择是 API 参考中记录的内容:https://stripe.com/docs/api/charges/list

在您的情况下,您必须列出所有费用并通过查看 charge.payment_method_details.card.fingerprint 自行过滤它们

【讨论】:

谢谢!只是为了确保我理解,我需要收集所有事件然后过滤?可能在充分转换后使用Linq?我不希望连续调用所有内容,然后梳理所有内容。解析 JSON 不是问题,如果是这种情况,每次调用函数时,我都需要对数百万个事件进行排序。如果不可能,那么公平,但我想确定一下。我了解仪表板搜索功能的操作方式与 C# API 不同。 取决于你真正想要做什么。如果您想获取使用特定卡指纹进行的所有费用,那么您必须从 API 中提取整个费用列表,然后遍历结果,检查我之前链接到的参数。另一种方法是使用 Stripe Sigma:stripe.com/sigma

以上是关于在 C# 中使用 ExtraParams 从 Stripe 的 API 中提取特定事件的主要内容,如果未能解决你的问题,请参考以下文章

EXTJS 5.0:无限网格滚动不适用于商店中的 extraParams

extraParams ,

在网格 sortchange 事件之前更改存储 extraParams

Extjs PROXY查询params无法传参,改用extraParams

C# 在 INSERT 查询中调用 ST_GeomfromText 函数

如何在 C# 中使用全局变量?