【问题标题】:Show object.amount in USD rather than cents on webhook responce在 webhook 响应中以美元而不是美分显示 object.amount
【发布时间】:2019-09-01 00:31:29
【问题描述】:

我正在使用条带 webhook 来更新我的数据库。在 webhook 中,金额以最小货币返回,例如。 1000 美元 10.00 美元。

我想以 $10.00 的形式存入数据库,但找不到方法。

         # Retrieve the request's body and parse it as JSON:
event_json = json.loads(request.data)
event = stripe.Event.retrieve(event_json['id'], stripe_account=(event_json["account"]))
#event = event_json.json().get('id')
 # Do something with event_json
if event.type == 'charge.succeeded':
    date = event.created
    donor = event.data.object.customer
    amount = event.data.object.amount
    payment_date=datetime.datetime.fromtimestamp(date).strftime('%m-%d-%Y')
    # donor_ID to query db
    donor_paid = db1.Donor.query.filter_by(donor_ID=donor).first()

    # update db
    donor_paid.donation_date=payment_date
    donor_paid.donation_amount=amount

    db.session.commit()

这是模型:

class Donor(db.Model):
__tablename__="donor"
donor_ID=db.Column(db.String, primary_key=True)
rep_ID=db.Column(db.String, db.ForeignKey('rep.rep_ID'))
office_ID=db.Column(db.String)
donor_name=db.Column(db.String)
donor_email=db.Column(db.String)
donor_phone=db.Column(db.String)
donor_address=db.Column(db.String)
donation_amount=db.Column(db.String)
donation_date=db.Column(db.DateTime)
monthly_start_date=db.Column(db.DateTime)
monthly_stop_date=db.Column(db.DateTime)
donor_status=db.Column(db.Boolean)

def __init__(self,donor_ID,rep_ID,office_ID,donor_name,donor_email,donor_phone,donor_address,donation_amount,donation_date,monthly_start_date,monthly_stop_date,donor_status):
    self.donor_ID=donor_ID
    self.rep_ID=rep_ID
    self.office_ID=office_ID
    self.donor_name=donor_name
    self.donor_email=donor_email
    self.donor_phone=donor_phone
    self.donor_address=donor_address
    self.donation_amount=donation_amount
    self.donation_date=donation_date
    self.monthly_start_date=monthly_start_date
    self.monthly_stop_date=monthly_stop_date
    self.donor_status=donor_status

    def __repr__(self):
        return '<Donor %r>' % self.donor_name

【问题讨论】:

  • 向我们展示模型。
  • 把金额除以100?它以美分返回,这样您就可以对其进行数学运算,而不必担心浮点数。
  • @Rocket Hazmat 除以 100 将删除小数点后的第二个 0,它没有变化。例如 1000 / 100 返回 10.0
  • 好的,它基于@Rocket Hazmat 而这个stackoverflow.com/a/14540172/9878121 运行良好。谢谢
  • 您的数据库架构使用字符串来表示金额,因此您可以将金额存储为字符串,但如果您的数据库支持,我会推荐更适合货币表示的类型

标签: python stripe-payments


【解决方案1】:

@Rocket Hazmat 除以 100 将删除小数点后的第二个 0,它没有变化。例如 1000 / 100 返回 10.0 – jesseCampeez 4 月 10 日 15:32

将您的号码转换为可以跟踪美分的表示形式。我建议你使用小数:

from decimal import Decimal

value_in_cents = 1000
amount = Decimal('0.01') * value_in_cents

那么到了将其保存到数据库中的时候,你必须将其格式化为保留小数的字符串:

string_value = "$ %.2f" % amount

如果你更喜欢 string.format,你可以这样做:

string_value = "$ {:.2f}".format(amount)

这应该以这种格式输出您的金额:

10.00 美元

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多