Django: Должен ли я сохранять ответы Stripe как JSON в моих моделях? - PullRequest
0 голосов
/ 04 июля 2018

В настоящее время я настраиваю учетную запись Stripe (Standard Connect). Я знаю, у меня есть общий вопрос о наилучшей практике.

Один пример: создавая «заряд», 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
} 

Поскольку я сейчас решаю вопрос о модели базы данных и полях, передо мной встает вопрос: какие поля мне сохранить? (Все они, или только один (идентификатор транзакции), который мне нужен для извлечения этого объекта начисления на более позднем этапе.

Мой текущий подход: на данный момент я решил для этого подхода, что моя модель базы данных для «сборов» будет содержать только поле pk и JSON , где я буду сохранять все информация и, следовательно, я мог бы получить доступ к чему угодно, когда угодно, из моей собственной базы данных. Этот полевой подход JSON я бы также использовал для своей модели с объектом учетной записи Stripe и т. Д.

Но сначала, мой вопрос: это хороший подход, или вы бы порекомендовали мне сохранять каждое поле отдельно?

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Объем хранимых вами данных больше связан с вашим вариантом использования, чем с обычной практикой. Возможно, вы захотите сохранить идентификатор клиента лица, создавшего комиссию, сумму списания, дату транзакции, источник, использованный для оплаты (какая карта).

Если вы разрешаете возмещение по этой плате, вы также можете сохранить поля, связанные с возмещениями: amount_refunded, refunded и т. Д.

Надеюсь, это поможет. :)

0 голосов
/ 04 июля 2018

Любой подход действителен. Вы можете либо сохранить только идентификатор Stripe ID, а затем получить объект из API по мере необходимости, либо сохранить его в своей локальной базе данных. Есть пара вещей, о которых вы, возможно, захотите знать, если будете подходить к базе данных:

  • Формат ответа Stripe может измениться в будущих выпусках API, поэтому, если вы обновляете свою интеграцию до новой версии API, вам может потребоваться выполнить миграцию на моделях базы данных.
  • Многие объекты в Stripe не являются неизменяемыми, поэтому возможно, что ваше «локальное» представление в базе данных устарело. В качестве простого примера, плата может быть возвращена или помечена как мошенничество после его создания. Вам нужно будет использовать webhooks , чтобы обновлять локальные модели. Если вы используете Connect, настоятельно рекомендуется использовать веб-зацепки.

Наилучшим подходом может быть гибридное решение, в котором вместо простого сохранения идентификатора или точного JSON от Stripe вы можете определить свою собственную модель с информацией, которая имеет отношение к вам, вместе с идентификатором. Таким образом, вы получаете преимущество, связанное с тем, что вам не нужно ежедневно вызывать API для взаимодействия с вашей моделью, но у вас есть возможность не слишком тесно связываться с точным форматом конкретной версии Stripe.

...