每月第一天的贝宝每月订阅计划设置并每月定期付款 - django python

Posted

技术标签:

【中文标题】每月第一天的贝宝每月订阅计划设置并每月定期付款 - django python【英文标题】:paypal monthly subscription plan settings for first day of the month and making monthly recurring payment - django python 【发布时间】:2018-10-02 02:11:11 【问题描述】:

我正在为 PayPal 使用 Django paypalrestsdk https://github.com/paypal/PayPal-Python-SDK

我想设置一个每月订阅计划。 每个月初,将向买家收取 100 美元的费用。

这是我制作的计费计划代码:

billing_plan = paypalrestsdk.BillingPlan(
    "name": "Monthly Billing Plan",
    "description": "Monthly Plan",
    "merchant_preferences": 
        "auto_bill_amount": "yes",
        "cancel_url": "http://localhost:8000/payment_billing_agreement_cancel",
        "initial_fail_amount_action": "continue",
        "max_fail_attempts": "0",
        "return_url": "http://localhost:8000/payment_billing_agreement_execute",
        "setup_fee": 
            "currency": "USD",
            "value": "100"
        
    ,
    "payment_definitions": [
        
            "amount": 
                "currency": "USD",
                "value": "100"
            ,
            "cycles": "0",
            "frequency": "MONTH",
            "frequency_interval": "1",
            "name": "Monthly Payment",
            "type": "REGULAR"
        
    ],
    "type": "INFINITE"
)

不清楚是在月初还是最后一天收费?我应该进行设置以便立即收费吗?我的意图是在每月的第一天完成收费。

我在买方的沙盒中看到了这一点: 预批付款 100 美元 这是什么意思,他是已经收取了 100 美元,还是在每月的最后一天预先批准并收取了费用?

基于此,它似乎立即充电。这意味着它应该显示 200 美元对吗? (设置 + 每月,但仅显示 100 美元) https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/subscription_billing_cycles/

到目前为止,我已经使用过这个流程:

create billing plan
activate billing plan
create billing agreement 
execute billing agreement

(这是正确的吗?它显示的是预先批准的,但是这是否真的收费,如果不是,应该采取什么其他步骤来正确收费)

澄清一下,主要问题是如何使用 PayPal 设置按月计费(以及设置收费周期,无论是月初还是月底)? (在这个例子中,它使用 django python)

更新:

根据@john-moutafis 的建议,我现在设置了 100 美元,并且定期开始日期设置为 1 个月后为 111 美元

    billing_agreement = paypalrestsdk.BillingAgreement(
        "name": "Monthly Billing Agreement",
        "description": "Monthly Payment Agreement",
        "start_date": arrow.utcnow().shift(months=+1).datetime.strftime('%Y-%m-%dT%H:%M:%SZ'),
        "plan": 
            "id": billing_plan.id
        ,
        "payer": 
            "payment_method": "paypal"
        
    )

这里是paypal截图,为什么没有金额信息,为什么预批没有重复信息? https://imgur.com/a/Sp7JdVC

【问题讨论】:

【参考方案1】:

Paypal 将自动尝试使每个月的结算日期保持不变(如果适用,as stated in the linked resource)。

您可以通过指定start_date字段来说明this example 中所述的计费协议的开始日期。 这里我使用arrow模块,方便计算下个月的第一天:

import arrow

billing_plan = paypalrestsdk.BillingPlan(
    "name": "Monthly Billing Plan",
    "description": "Monthly Plan",
    "start_date": arrow.utcnow().shift(months=+1).replace(day=1).isoformat(),
    "merchant_preferences": 
        ...
        "setup_fee": 
            "currency": "USD",
            "value": "100"
        
    
    ...
)

初始订阅费用应由setup_fee字段处理!


问题更新后编辑:

在计划的merchant_preferences 字段中,您将auto_bill_amount 设置为yes。 通过查看documentation on merchant_preferences,我们可以看到:

auto_bill_amount枚举

指示 PayPal 是否在下一个结算周期自动结算未结余额。未结余额是任何先前失败的预定付款的总金额。值为:

NO。 PayPal 不会自动向客户收取未结余额的账单。YES。 PayPal 会自动向客户收取未结余额。

可能的值:YESNO

默认值:NO

【讨论】:

SO @Axil,这是如何作为解决方案推出的? 有一些拼写错误:"start_date": arrow.utcnow().shift(months=+1).replace(day=1), 我收到此错误:TypeError:“箭头”类型的对象不是 JSON 可序列化的,需要将箭头对象转换为 ISO 日期 用这个“start_date”修复:arrow.utcnow().shift(months=+1).replace(day=1).isoformat(), 然而,它失败了 'name': 'MALFORMED_REQUEST', 'message': 'Incoming JSON request does not map to API request', 'information_link': 'developer.paypal.com/webapps/developer/docs/api/…', 'debug_id' :'155e9f4dce2ff'

以上是关于每月第一天的贝宝每月订阅计划设置并每月定期付款 - django python的主要内容,如果未能解决你的问题,请参考以下文章

一次性付款的贝宝定期付款

用于定期付款的贝宝保险库

贝宝订阅,立即第一笔付款

贝宝每月定期

条带订阅现在和每月的第一天付款

Paypal 自动支付每月订阅