Django Stripe Webhook json数据如何在admin中查看该数据

时间:2018-08-24 17:45:13

标签: django django-views django-admin stripe-payments

我现在可以发送Webhook并接收它,并向Stripe返回200状态,但是我不明白如何在json中获取信息。

{
  "object": {
    "id": "ch_1D2mVJEiQxrCiRvRgbqdtpbI",
    "object": "charge",
    "amount": 5000,
    "amount_refunded": 0,
    "application": null,
    "application_fee": null,
    "balance_transaction": "txn_1D2mVKEiQxrCiRvRAQ61MjSt",
    "captured": true,
    "created": 1535144857,
    "currency": "usd",
    "customer": null,
    "description": "A Django charge",
    "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_1D2mVJEiQxrCiRvRgbqdtpbI/refunds"
    },
    "review": null,
    "shipping": null,
    "source": {
      "id": "card_1D2mVEEiQxrCiRvRTa2poVVT",
      "object": "card",
      "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,
      "brand": "Visa",
      "country": "US",
      "customer": null,
      "cvc_check": null,
      "dynamic_last4": null,
      "exp_month": 9,
      "exp_year": 2021,
      "fingerprint": "p6BWjMSv83IqjoCg",
      "funding": "credit",
      "last4": "4242",
      "metadata": {
      },
      "name": "marie.pier.cm@gmail.com",
      "tokenization_method": null
    },
    "source_transfer": null,
    "statement_descriptor": null,
    "status": "succeeded",
    "transfer_group": null
  },
  "previous_attributes": null
}

我想撤消创建的日期(作为日期),object.id,object.amount和object.paid,以便能够在django admin中看到。

views.py中的代码是

@require_POST
@csrf_exempt
def webhook(request):
    # Retrieve the request's body and parse it as JSON:
    jsondata = request.body
    data = json.loads(jsondata)

    return HttpResponse(status=200)

我要填充的模型就是这样

class StripePayment(models.Model):
    paymentId = models.CharField(max_length=200)
    paymentAmount = models.CharField(max_length=10)
    paid =  models.BooleanField()
    created = models.DateTimeField()

    def __str__(self):
        return self.paymentId

我知道那会是

@require_POST
@csrf_exempt
def webhook(request):
jsondata = request.body
    data = json.loads(jsondata)
    meta = copy.copy(request.META)
    for k, v in meta.items():
        if not isinstance(v, basestring):
            del meta[k]

    modelname.objects.create(
        .......)

但我无法弄清楚,请帮助:)


如果任何人都需要一分钱,此方法将固定为: views.py

  @require_POST
@csrf_exempt
def webhook(request):
    payload = request.body
    sig_header = request.META['HTTP_STRIPE_SIGNATURE']
    event = None

    try:
        event = stripe.Webhook.construct_event(
        payload, sig_header, endpoint_secret
        )
    except ValueError as e:
        # Invalid payload
        return HttpResponse(status=400)
    except stripe.error.SignatureVerificationError as e:
        # Invalid signature
        return HttpResponse(status=400)

    # Do something with event

    return HttpResponse(status=200)

    paymentId = payload['object:id']
    amount = payload['object:amount']
    paid = payload['paid']

    StripePayment.objects.create(
        paymentId=paymentId,
        amount=amount,
        paid=paid,
    )

和models.py

class StripePayment(models.Model):
paymentId = models.CharField(max_length=150)
amount = models.CharField(max_length=150)
paid = models.BooleanField()

1 个答案:

答案 0 :(得分:0)

您无法通过payload['object:id']之类的方法获取嵌套数据。您需要将每个级别视为一个单独的字典,它是:

payment_id = payload['object']['id']
amount = payload['object']['amount']
paid = payload['object']['paid']

还要注意,您的return就在此代码之前,因此其余代码将永远不会执行。您应该将返回值移到函数末尾。