基于Django paypalrestsdk设置每月1日扣款的PayPal订阅计划
完善PayPal每月月初订阅计划的配置
嘿,我来帮你把这个每月订阅计划的代码补全并解释清楚!你要实现的是每月月初自动向买家收取100美元的订阅,用PayPal官方Python SDK在Django里配置对吧?下面是完整的可运行代码片段,我会逐个关键部分给你说明:
首先,确保你已经正确初始化了PayPal SDK(可以在Django的settings文件或者初始化代码里配置好你的Client ID和Secret):
import paypalrestsdk paypalrestsdk.configure({ "mode": "sandbox", # 生产环境记得改成"live" "client_id": "你的Client ID", "client_secret": "你的Client Secret" })
接下来是完整的计费计划创建代码,重点补全了你没写完的merchant_preferences和核心的billing_definitions(这部分直接定义了订阅的计费规则):
billing_plan = paypalrestsdk.BillingPlan({ "name": "Monthly Billing Plan", "description": "每月月初自动收取100美元订阅费", "type": "INFINITE", # 设为无限期订阅,也可以选"FIXED"指定订阅时长 "billing_definitions": [ { "name": "Monthly Subscription", "type": "REGULAR", "frequency": "Month", "frequency_interval": "1", # 每1个月计费一次 "amount": { "value": "100.00", "currency": "USD" }, "cycles": "0", # 0对应INFINITE类型,无限循环扣费 "charge_models": [], # 无额外手续费,有需要可以添加比如手续费规则 "payment_type": "INSTANT", # 指定每月1号(月初)扣费 "specific_date": "1", "frequency_type": "REGULAR" } ], "merchant_preferences": { "auto_bill_amount": "yes", # 开启自动扣费 "cancel_url": "http://localhost:8000/payment_billing_agreement_cancel", "return_url": "http://localhost:8000/payment_billing_agreement_success", "initial_fail_amount_action": "CONTINUE", # 首次扣费失败时继续尝试 "max_fail_attempts": "3", # 最多尝试3次扣费 "setup_fee": { "value": "0.00", "currency": "USD" } } }) # 创建计划并激活(PayPal计划默认是草稿状态,必须激活才能让用户订阅) if billing_plan.create(): activate_request = paypalrestsdk.BillingPlan.find(billing_plan.id) if activate_request.update({"state": "ACTIVE"}): print("计费计划创建并激活成功,ID:", billing_plan.id) else: print("激活计划失败:", activate_request.error) else: print("创建计划失败:", billing_plan.error)
关键参数说明:
billing_definitions:这是订阅规则的核心,frequency: "Month"+frequency_interval: "1"定义了每月计费周期,specific_date: "1"直接指定每月1号(月初)扣费,amount设置了100美元的扣费金额。merchant_preferences:auto_bill_amount: "yes"开启自动扣费逻辑,cancel_url和return_url分别是用户取消和同意订阅后的跳转地址,记得替换成你Django项目的真实生产环境URL。- 计划激活:PayPal创建的计费计划默认是
CREATED草稿状态,必须手动更新为ACTIVE状态,才能生成可供用户订阅的协议。
后续提示:
创建并激活计划后,你需要基于这个计划创建BillingAgreement,引导用户跳转到PayPal页面完成订阅授权,授权成功后每月1号就会自动执行扣费啦。
内容的提问来源于stack exchange,提问作者Axil




