这是使用API在Python中创建Braintree订阅的正确方法吗

这是使用API在Python中创建Braintree订阅的正确方法吗,python,django,django-views,braintree,braintree-sandbox,Python,Django,Django Views,Braintree,Braintree Sandbox,为了让大家更清楚,我在这里提出这个问题,并分享我迄今为止学到的知识 首先,如果您想要一个简单、易于开发的交易系统,Braintree就是它。非常简单,和Django玩得很好 然而,订阅方面的事情还没有那么清楚。所以,我正在分享一些代码,以获得反馈并帮助简化 首先。。一些假设 工作流程 使用API创建订阅的过程如下所示: (请不要在“控制面板”中向我发送有关如何执行此操作的文档。可以在此处找到订阅工作流的广泛描述:) 使用braintree.ClientToken.generate()创建客户端令

为了让大家更清楚,我在这里提出这个问题,并分享我迄今为止学到的知识

首先,如果您想要一个简单、易于开发的交易系统,Braintree就是它。非常简单,和Django玩得很好

然而,订阅方面的事情还没有那么清楚。所以,我正在分享一些代码,以获得反馈并帮助简化

首先。。一些假设

工作流程 使用API创建订阅的过程如下所示:

(请不要在“控制面板”中向我发送有关如何执行此操作的文档。可以在此处找到订阅工作流的广泛描述:)

  • 使用
    braintree.ClientToken.generate()创建客户端令牌
  • 使用添加付款方法的
    braintree.customer.Create()
    创建客户
  • customer.create()响应中获取客户id
  • 使用
    braintree.subscription.Create()
    传递新客户和名为
    payment\u method\u token的新客户令牌创建订阅
  • 如果你想知道,这是Django,我试图在一个视图中完成这一切

    示例代码
    custy\u result=braintree.Customer.create({
    “名字”:self.request.POST.get(“名字”),
    “姓氏”:self.request.POST.get('last_name'),
    “公司”:self.request.POST.get('company_name'),
    “电子邮件”:self.request.POST.get(“办公室电子邮件”),
    “电话”:self.request.POST.get(“办公室电话”),
    “付款方式”为“假有效时间”,用于测试
    “信用卡”:{
    “账单地址”:{
    “街道地址”:self.request.POST.get(“地址”),
    “Location”:self.request.POST.get('city'),
    “区域”:self.request.POST.get('state'),
    “邮政编码”:self.request.POST.get('postal'),
    }
    }
    })
    如果custy_result.is_success:
    打印(“客户成功!”)
    其他:
    对于custy_result.errors.deep_错误中的错误:
    打印(错误代码)
    打印(错误消息)
    #在braintree中创建订阅
    sub_result=braintree.Subscription.create({
    
    “支付方法令牌”:“支付令牌”,您的
    custy\u结果
    应具有
    payment\u方法
    属性:

    result = braintree.Subscription.create({
        "payment_method_token": custy_result.payment_methods[0].token,
        "plan_id": "planID"
    })
    

    很好!非常接近。只是,它是
    custy\u result.customer.payment\u methods[0]。token
    result = braintree.Subscription.create({
        "payment_method_token": custy_result.payment_methods[0].token,
        "plan_id": "planID"
    })