Django:我应该在模型中将Stripe响应另存为JSON吗?

时间:2018-07-04 06:49:43

标签: django stripe-payments

我当前正在设置一个Stripe(标准连接)帐户。我知道有一个一般的最佳做法问题。

一个例子:创建一个“收费”,Stripe给了我一个JSON回答,如下所示:

<Charge charge id=ch_1CizRmABvPzR13WAhFXBkrYf at 0x00000a> JSON: {
  "id": "XXX",
  "object": "charge",
  "amount": 900,
  "amount_refunded": 0,
  "application": "ASDF",
  "application_fee": null,
  "balance_transaction": "XXX",
  "captured": true,
  "created": 1530428050,
  "currency": "eur",
  "customer": null,
  "description": null,
  "destination": null,
  "dispute": null,
  "failure_code": null,
  "failure_message": null,
  "fraud_details": {
  },
  "invoice": null,
  "livemode": false,
  "metadata": {
  },
  "on_behalf_of": null,
  "order": null,
  "outcome": {
    "network_status": "approved_by_network",
    "reason": null,
    "risk_level": "normal",
    "seller_message": "Payment complete.",
    "type": "authorized"
  },
  "paid": true,
  "receipt_email": null,
  "receipt_number": null,
  "refunded": false,
  "refunds": {
    "object": "list",
    "data": [

    ],
    "has_more": false,
    "total_count": 0,
    "url": "/v1/charges/ch_1CizRmABvPzR13WAhFXBkrYf/refunds"
  },
  "review": null,
  "shipping": null,
  "source": {
    "id": "XXX",
    "object": "card",
    "address_city": null,
    "address_country": null,
    "address_line1": null,
    "address_line1_check": null,
    "address_line2": null,
    "address_state": null,
    "address_zip": "42424",
    "address_zip_check": "pass",
    "brand": "Visa",
    "country": "US",
    "customer": null,
    "cvc_check": "pass",
    "dynamic_last4": null,
    "exp_month": 4,
    "exp_year": 2024,
    "fingerprint": "whM4LE8uZm9vdxIa",
    "funding": "credit",
    "last4": "4242",
    "metadata": {
    },
    "name": null,
    "tokenization_method": null
  },
  "source_transfer": null,
  "statement_descriptor": null,
  "status": "succeeded",
  "transfer_group": null
} 

当我现在决定数据库模型和字段时,我现在面临的问题是:我要保存哪些字段? (所有这些,或者只是一个(交易ID),我需要在以后再次检索该收费对象。

我目前的方法:到目前为止,我决定采用这种方法,我的“费用”数据库模型将仅包含一个pk和一个 JSON字段,我将在其中保存所有 Stripe的帐户对象等中将这种JSON字段方法用于我的模型。

但是首先,我的问题是:这是一种好方法,还是您宁愿建议我单独保存每个字段?

2 个答案:

答案 0 :(得分:0)

这两种方法均有效。您可以只保存Stripe ID,然后根据需要从API中检索对象,也可以保存到本地数据库中。如果采用数据库方法,可能需要注意以下几点:

  • Stripe响应的格式在将来的API版本中可能会发生变化,因此,如果要将集成升级到新的API版本,则可能必须在数据库模型上进行迁移。
  • Stripe中的许多对象不是不可变的,因此数据库中的“本地”视图可能已过时。举一个简单的例子,收费可以在创建后退还或标记为欺诈。您需要使用webhooks来保持本地模型最新。如果您使用的是Connect,则强烈建议使用webhooks。

最好的方法可能是混合解决方案,您可以使用与您相关的信息以及ID定义自己的模型,而不仅仅是保存ID或Stripe中的确切JSON。这样一来,您无需调用API即可与模型进行日常交互,但您可以灵活地将其与特定Stripe版本的确切格式紧密耦合。

答案 1 :(得分:0)

您存储的数据量与用例有关,而不是标准做法。您可能要存储创建费用的人的客户ID,费用金额,交易日期,费用来源(哪张卡)。

如果您允许退款,那么您可能还想存储与退款有关的字段:amount_refundedrefunded等。

希望这会有所帮助。 :)