You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于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_preferencesauto_bill_amount: "yes"开启自动扣费逻辑,cancel_urlreturn_url分别是用户取消和同意订阅后的跳转地址,记得替换成你Django项目的真实生产环境URL。
  • 计划激活:PayPal创建的计费计划默认是CREATED草稿状态,必须手动更新为ACTIVE状态,才能生成可供用户订阅的协议。

后续提示:

创建并激活计划后,你需要基于这个计划创建BillingAgreement,引导用户跳转到PayPal页面完成订阅授权,授权成功后每月1号就会自动执行扣费啦。

内容的提问来源于stack exchange,提问作者Axil

火山引擎 最新活动