每月第一天的贝宝每月订阅计划设置并每月定期付款 - 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 会自动向客户收取未结余额。可能的值:
YES
、NO
。默认值:
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的主要内容,如果未能解决你的问题,请参考以下文章