何时创建stripe订阅对象并分配给user语言 - Django



Tech Stack - Django, Angular我一直在执行条纹订阅模式,但陷入了一些荒谬的场景。我得到的订阅没有被django发现。请阅读完整的场景。

首先,我成功创建了条带会话。代码

session = stripe.checkout.Session.create(
metadata={'price_id':request.data.get('price_id'),'product_id':request.data.get('product_id'),'product_name':request.data.get('product_name')},
client_reference_id=request.user.id,
customer=customer.stripe_customer_id,
success_url='http://localhost:4200/success?session_id={CHECKOUT_SESSION_ID}',
cancel_url='http://localhost:4200/canceled.html',
mode='subscription',
line_items=[{
'price': request.data['price_id'],
# For metered billing, do not pass quantity
'quantity': 1,
}],
)

人实现:

  1. checkout.session.completed我正在创建客户和订阅模型在我的数据库。
print(user)
customer = RecruiterUserProfile.objects.get(user = user)
print(customer)
customer.customer_id = session.customer
customer.save()
stripecustomer = Customer.objects.get(recruiter = customer, checkout_session_id = stripe_session_id)
print(stripecustomer)
stripecustomer.stripe_customer_id = stripe_customer_id
stripecustomer.save()
subscription,created = Subscriptions.objects.get_or_create(recruiter = customer,    
sub_id=stripe_subscription_id,customer_id = stripecustomer,stripe_customer_id = stripe_customer_id,
payment_status=stripe_payment_status, amount = stripe_amount,
status = stripe_status, product_id = stripe_metadata['product_id'], price_id = stripe_metadata['price_id'], product_name = stripe_metadata['product_name'])
  • invoice.paid然后它触发Invoice。付费,其中我获得订阅模式,并更新其中的其他值。但是由于webhooks不等待我们的调用,有时,它找不到订阅。
  • 现在,如果我在发票中创建订阅和客户。付费webhook使用ger_or_create,我该如何将其链接到用户。

    下面是我的模型:

    class Customer(models.Model):
    recruiter = models.OneToOneField(RecruiterUserProfile, on_delete=models.PROTECT)
    stripe_customer_id = models.CharField(max_length=80, blank=True, null=True)
    checkout_session_id = models.CharField(max_length=100,blank=True,null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    def __str__(self):
    return f"{self.recruiter.user.email} has a stripe customer id {self.stripe_customer_id}"
    
    def expiration():
    return now() + timedelta(days=30)
    class Subscriptions(models.Model):
    STATUS_CHOICES =(
    ('utilised','Utilised'),
    ('accessible','Accessible'),
    ('notaccessible','Notaccessible')
    )
    recruiter = models.ForeignKey(RecruiterUserProfile, on_delete=models.PROTECT)
    customer_id = models.ForeignKey(Customer, on_delete=models.PROTECT)
    stripe_customer_id = models.CharField(max_length=80, blank=True, null=True)
    sub_id = models.CharField(max_length=80, blank=True, null=True)
    product_id = models.CharField(max_length=80, blank=True, null=True)
    product_name = models.CharField(max_length=80, null=True, blank=True)
    price_id = models.CharField(max_length=80, blank=True, null=True)
    offer_id = models.CharField(max_length=80, blank=True, null=True)
    notes = models.JSONField(default=list,blank=True)
    status = models.CharField(max_length=100, default="Initial")
    payment_status = models.CharField(max_length = 100, default='')
    amount = models.CharField(max_length=20,blank=True, null=True)
    start_date = models.DateTimeField(null=True, blank=True)
    expiration_date = models.DateTimeField(
    default=expiration,
    verbose_name='Expirate in'
    )
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    client_validity = models.CharField(max_length=20,choices= STATUS_CHOICES, default='accessible')
    product_job_credits = models.IntegerField(default=0)
    active_job_credits = models.IntegerField(default=0)
    is_cancelled = models.BooleanField(default=False)
    

    我设法通过简单的工作流程更改来解决这个问题。不要直接调用订阅API。首先自己创建一个条带客户,并将值存储在本地数据库中。因此,在创建订阅时,您将能够获得客户,并且可以轻松地将订阅与客户联系起来。

    如果需要,我可以共享代码。

    最新更新