从webhook事件发票解析Stripe数据.payment_succeeded

时间:2018-09-27 22:26:53

标签: python json parsing stripe-payments zapier

我正在从Stripe抓取一个网上挂钩,以获得成功的发票,

<iframe src="https://docs.google.com/spreadsheets/d/e/2PACX-1vRAQLoHO6TOpu7Sh5M3DwUoHt_eh-dWb-fHAB6Jn5rRtbxJSGsKbXuw3C6nmC_FTqzSiSmLWStRrrDT/pubhtml?gid=0&range=a1:l28&widget=false&headers=false&chrome=false" width="1000" height="600"></iframe>

我想从“计划”中提取数据并将其解析以用于Zapier流程。我使用以下代码缩小了我需要的确切数据

amount: 7500
currency: usd
description: None
discountable: True
id: sub_DfLYbarfoo
livemode: True
metadata: {}
object: line_item
period: {u'start': 1537694450, u'end': 1569930450}
plan: {u'active': True, u'product': u'prod_Bzxbarfoo', u'transform_usage': None, u'name': u'Agent - Yearly', u'aggregate_usage': None, u'created': 1513986904, u'tiers_mode': None, u'interval': u'year', u'tiers': None, u'object': u'plan', u'id': u'ra-yearly', u'currency': u'usd', u'amount': 7500, u'interval_count': 1, u'trial_period_days': 2, u'livemode': True, u'usage_type': u'licensed', u'metadata': {u'qb_product': u'71'}, u'nickname': u'Agent - Yearly', u'statement_descriptor': u'foobar.com/charge', u'billing_scheme': u'per_unit'}
proration: False
quantity: 1
subscription: None
subscription_item: si_DfLYfoo
type: subscription

为我提供了

data = input['data']
begin_index = data.find('plan:') + 6
end_index = data.rfind('}') + 1

plan = data[begin_index:end_index]

我不确定前导'u'字符在每个键和值上的作用,但这使我无法将其解析为可用的json。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用ast.literal_val来返回python dict。例如,在您的代码中:

import ast
import json

data = input['data']
begin_index = data.find('plan:') + 6
end_index = data.rfind('}') + 1

plan = ast.literal_eval(data[begin_index:end_index])
json_plan = json.dumps(plan)

ast.literal_eval只是将字符串解析为文字(它不执行任何代码,因此与eval不同,因此可以安全使用)。此字符串是有效的python dict对象。 “ u”前缀在python pre python3中标记为unicode类型。