
本教程详细指导如何在stripe checkout session中正确集成自定义税率和折扣。我们将探讨stripe tax rate和coupon对象的创建与应用方式,纠正常见的api参数错误,并提供完整的python代码示例,帮助开发者高效、准确地为支付会话添加税费和优惠。
Stripe Checkout Session是Stripe提供的一种快速、安全地收集付款信息的方式。通过创建Checkout Session,您可以将用户重定向到一个由Stripe托管的支付页面,从而简化了支付流程,并自动处理了许多支付合规性问题。在创建Checkout Session时,我们经常需要集成额外的业务逻辑,例如应用自定义税率和折扣。
在Stripe中,税率和折扣分别通过特定的API对象进行管理和应用:
正确地创建和引用这些对象是成功集成税率和折扣的关键。
将自定义税率应用于Stripe Checkout Session需要以下步骤:
Stripe的TaxRate对象定义了税率的详细信息。您可以选择预先在Stripe管理后台创建税率,或者通过API动态创建。对于动态税率,示例如下:
import stripe
# ... 其他代码 ...
def create_tax_rate(name, percentage, description=None, jurisdiction="US", inclusive=False):
"""
创建或获取一个Stripe TaxRate对象。
为了避免重复创建,实际应用中可以考虑缓存或查询现有税率。
"""
try:
tax_rate = stripe.TaxRate.create(
display_name=name,
description=description if description else name,
percentage=percentage,
jurisdiction=jurisdiction,
inclusive=inclusive,
)
return tax_rate.id
except stripe.error.StripeError as e:
print(f"创建TaxRate失败: {e}")
return None
# 示例:从订单中获取税率信息并创建
# tax_rates_ids = []
# for tax in order.tax.all(): # 假设order.tax是一个包含税率信息的集合
# tax_rate_id = create_tax_rate(tax.name, tax.rate, jurisdiction="RU", inclusive=False)
# if tax_rate_id:
# tax_rates_ids.append(tax_rate_id)创建TaxRate对象后,您需要将其ID列表传递给stripe.checkout.Session.create方法的tax_rates参数。
# ... 假设 tax_rates_ids 已经包含了一个或多个 TaxRate ID ...
session = stripe.checkout.Session.create(
payment_method_types=['card'],
line_items=[
{
'price_data': {
'currency': 'usd',
'unit_amount': order.get_total_cost() * 100,
'product_data': {
'name': order.__str__(),
},
},
'quantity': 1,
},
],
# ... 其他参数 ...
tax_rates=tax_rates_ids, # 正确传递税率ID列表
mode='payment',
success_url=DOMAIN + '/success/',
cancel_url=DOMAIN + '/cancel/',
)应用折扣同样需要创建相应的对象,并以正确的格式传递给Checkout Session。
与TaxRate类似,Coupon也可以预先创建或动态创建。
Magician
Figma插件,AI生成图标、图片和UX文案
412
查看详情
import stripe
# ... 其他代码 ...
def create_coupon(amount_off=None, percent_off=None, duration='once', currency='usd', name=None):
"""
创建或获取一个Stripe Coupon对象。
"""
if not (amount_off or percent_off):
raise ValueError("必须提供 amount_off 或 percent_off")
coupon_params = {
'duration': duration,
'currency': currency,
'name': name,
}
if amount_off:
coupon_params['amount_off'] = amount_off
elif percent_off:
coupon_params['percent_off'] = percent_off
try:
coupon = stripe.Coupon.create(**coupon_params)
return coupon.id
except stripe.error.StripeError as e:
print(f"创建Coupon失败: {e}")
return None
# 示例:从订单中获取折扣信息并创建
# discount_ids = []
# for discount in order.discount.all(): # 假设order.discount是一个包含折扣信息的集合
# coupon_id = create_coupon(amount_off=discount.amount, duration='once', currency='usd', name=discount.name)
# if coupon_id:
# discount_ids.append(coupon_id)这是原代码中出现错误的地方。Stripe Checkout Session的discounts参数期望一个包含字典的列表,每个字典应使用'coupon'或'promotion_code'键来引用对应的ID。
错误示例(导致 InvalidRequestError):
discounts=[{"discounts": '{{COUPON_ID}}'}] # 错误:嵌套了 'discounts' 键这个错误是由于参数结构不正确导致的。Stripe API期望直接使用'coupon'或'promotion_code'作为键。
正确用法:
# ... 假设 coupon_ids 已经包含了一个或多个 Coupon ID ...
# 如果只有一个优惠券ID
discounts=[{'coupon': 'coupon_id_from_stripe'}]
# 如果有多个优惠券ID
discounts_list = [{'coupon': coupon_id} for coupon_id in coupon_ids]
session = stripe.checkout.Session.create(
# ... 其他参数 ...
discounts=discounts_list, # 正确传递折扣信息
mode='payment',
success_url=DOMAIN + '/success/',
cancel_url=DOMAIN + '/cancel/',
)下面是一个完整的Python Django视图示例,演示了如何在一个Stripe Checkout Session中同时集成动态创建的税率和折扣:
import stripe
from django.views import View
from django.http import JsonResponse
from .models import Order, Tax, Discount # 假设您有这些模型
# 配置Stripe API密钥
# stripe.api_key = 'YOUR_STRIPE_SECRET_KEY' # 或者从settings中加载
class CreateCheckoutSessionOrderView(View):
def get(self, request, *args, **kwargs):
order_id = self.kwargs["order_id"]
DOMAIN: str = 'http://127.0.0.1:8000' # 您的域名
try:
order = Order.objects.get(id=order_id)
except Order.DoesNotExist:
return JsonResponse({'error': 'Order not found'}, status=404)
# 1. 处理税率
tax_rates_ids = []
for tax in order.tax.all(): # 假设Order关联了Tax模型
try:
# 实际应用中,可以先查询Stripe是否存在同名/同百分比的TaxRate,避免重复创建
tax_rate = stripe.TaxRate.create(
display_name=tax.name,
description=tax.name,
percentage=tax.rate,
jurisdiction="RU", # 根据您的业务逻辑设置
inclusive=False, # 税率是否包含在价格中
)
tax_rates_ids.append(tax_rate.id)
except stripe.error.StripeError as e:
print(f"创建Stripe TaxRate失败: {e}")
# 可以在此处添加错误处理逻辑,如记录日志或返回错误响应
# 2. 处理折扣
discounts_list = []
for discount in order.discount.all(): # 假设Order关联了Discount模型
try:
# 实际应用中,可以先查询Stripe是否存在同名Coupon
coupon = stripe.Coupon.create(
amount_off=discount.amount * 100, # amount_off 期望以分(cents)为单位
duration='once', # once, forever, or repeating
currency='usd',
name=discount.name,
)
discounts_list.append({'coupon': coupon.id}) # 正确的折扣参数格式
except stripe.error.StripeError as e:
print(f"创建Stripe Coupon失败: {e}")
# 可以在此处添加错误处理逻辑
# 3. 创建Stripe Checkout Session
try:
session = stripe.checkout.Session.create(
payment_method_types=['card'],
line_items=[
{
'price_data': {
'currency': 'usd',
'unit_amount': order.get_total_cost() * 100, # 确保金额以分(cents)为单位
'product_data': {
'name': order.__str__(),
},
},
'quantity': 1,
},
],
payment_intent_data={
'metadata': {
'order_id': order.id,
},
},
mode='payment',
success_url=DOMAIN + '/success/',
cancel_url=DOMAIN + '/cancel/',
tax_rates=tax_rates_ids, # 传递税率ID列表
discounts=discounts_list, # 传递折扣对象列表
)
return JsonResponse({'id': session.id})
except stripe.error.StripeError as e:
print(f"创建Stripe Checkout Session失败: {e}")
return JsonResponse({'error': str(e)}, status=500)
通过遵循Stripe API的正确参数结构和最佳实践,您可以高效且准确地在Stripe Checkout Session中集成自定义税率和折扣。理解TaxRate和Coupon对象的创建与应用方式,并特别注意discounts参数的正确格式,将帮助您避免常见的API错误,从而构建健壮的支付解决方案。
以上就是Stripe Checkout Session中集成自定义税率与折扣的教程的详细内容,更多请关注其它相关文章!
# 香港全网营销推广
# 多个
# 应用于
# 实际应用
# 浮点
# 中文网
# 几种
# 徐汇区推广营销策划
# 易尔灵seo排名
# 您可以
# 无锡推广网站有哪些
# 延庆区定制网站建设指导
# 苏州seo排名正规公司
# seo学习交流qq群
# 广西SEO优化营商
# 推广营销方案表怎么做的
# 常州网站怎样推广
# python
# 您的
# 是一个
# 自定义
# eli
# 币
# cos
# api调用
# 地理位置
# django
# ai
# session
# app
# go
# json
# js
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
word文档中的分隔符有哪些不同类型和用途_Word分隔符类型与用途方法
冬季去哪个城市旅游更有可能观测到极光
《优志愿》修改手机号方法
C++ bind函数使用教程_C++参数绑定与函数适配器的应用
汽水音乐车机版 汽水音乐车机版官方入口
macosmonterey系统外接显示器驱动怎么安装_macosmonterey外接显示器驱动与分辨率调整
TikTok笔记文字无法编辑如何解决 TikTok笔记文字编辑优化方法
海棠阅读登录教程_详细讲解海棠登录操作
如何在Golang中处理表单文件上传_Golang 表单文件上传示例
J*aScript调试技巧_性能分析与内存快照
《饿了么》拼好饭点外卖教程2025
优化 React onClick 事件处理:函数引用与箭头函数的对比
荣耀盒子应用管理技巧
Python自动化抓取GBGB赛狗比赛结果:日期范围与赛道筛选教程
QQ网页版官方账号登录入口 QQ网页版网页版入口快速导航
c++如何链接Boost库_c++准标准库的集成与使用
实现二叉树的层序插入:基于树大小的路径导航
喜茶GO更换登录账号方法
智慧职教mooc平台登录网址 智慧职教mooc官网直达
b站网页版入口 哔哩哔哩官方网站直接进入
多闪电脑版下载_多闪PC端模拟器使用
AngularJS动态内容中DOM元素查找的时序问题及$timeout解决方案
漫蛙官网(首页入口)_漫蛙漫画稳定访问教程分享
《大周列国志》皇帝律令功能介绍
《海贝音乐》均衡器设置方法
Composer reinstall命令重装损坏的包
在Django中动态检查模型关联:一种灵活的解决方案
AO3中文入口稳定分享_AO3官网HTTPS看文详解
VS Code快捷键when上下文子句的妙用
windows10怎么开启卓越性能_windows10电源选项代码激活
C++怎么解决数值计算中的精度问题_C++浮点数误差与数值稳定性分析
如何查询国外邮政编码_国外邮政编码查询的多种有效途径
C++如何将字符串转换为大写或小写_C++ transform函数的使用技巧
微信注销后银行卡解绑了吗_微信注销后银行卡解绑状态
顺丰快递在线查询系统 顺丰快递官方查单入口
Sublime怎么快速复制文件路径_Sublime右键菜单增强技巧
《宝可梦大集结》S4冠军之路开始时间介绍
三星M34录音变声问题_Samsung M34麦克风调整
win11怎么启用或禁用休眠 Win11 powercfg命令管理休眠文件【技巧】
C++ static关键字作用_C++静态成员变量与静态函数
睡觉时心跳快是什么原因 夜间心悸如何应对
如何使用CSS Grid实现“大方块左侧,小方块右侧垂直堆叠”的水平布局
MongoDB聚合管道:高效统计列表中各项的文档数量
Sublime怎么配置YAML文件格式化_Sublime YAML Formatter插件教程
雨课堂官网在线登录 网页版雨课堂登录链接
抖音网页版地址直接进入_抖音网页版在线观看入口
iPhone14开启Apple TV遥控设置
秋风萧瑟洪波涌起中的萧瑟指的是什么
Firefox OS应用开发:解决XMLHttpRequest跨域请求阻塞问题
《广发易淘金》国债逆回购操作教程
2025-12-07
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。