为卖家创建Stripe Connect账户(创建Stripe账户)

问题描述 投票:0回答:1

我正在开发一个项目,其中有 2 个用户类型,一个是买家,另一个是卖家,现在我正在尝试为该卖家创建 stripe 连接帐户,以便他/她能够收到钱

view.py

def encrypt_data(data):
    encrypted_data = cipher_suite.encrypt(data.encode())
    return encrypted_data.decode()

def decrypt_data(encrypted_data):
    print("Encrypted data:", encrypted_data)
    if encrypted_data is None:
        return None
    decrypted_data = cipher_suite.decrypt(encrypted_data.encode())
    return decrypted_data.decode()

def bank_details(request):
    login_user = request.user
    try:
        bank_details_obj = BankDetails.objects.get(user=login_user)
    except BankDetails.DoesNotExist:
        bank_details_obj = None
    if request.method == 'POST':
        bank_name = request.POST.get("bank_name")
        account_number = request.POST.get("account_number")
        name = request.POST.get('User_name')
        routing_number = request.POST.get('routing_number')
        encrypted_account_number = encrypt_data(account_number)
        encrypted_name = encrypt_data(name)
        encrypted_routing_number = encrypt_data(routing_number)
        if bank_details_obj:
            bank_details_obj.bank_name = bank_name
            bank_details_obj.account_number = encrypted_account_number
            bank_details_obj.username = encrypted_name
            bank_details_obj.routing_number = encrypted_routing_number
            bank_details_obj.save()
            messages.success(request, "Bank Details updated successfully")
        else:
            bank_details_obj = BankDetails.objects.create(
                bank_name=bank_name,
                account_number=encrypted_account_number,
                username=encrypted_name,
                routing_number=encrypted_routing_number,
                user=login_user,
            )
            messages.success(request, "Bank Details added successfully")
            try:
                stripe.api_key = "test key here"
                user_address = Address.objects.filter(user=login_user).first()
                stripe_account = stripe.Account.create(
                    type="express",
                    country="US",
                    individual={
                        "email": login_user.email,
                        "first_name": login_user.first_name,
                        "last_name": login_user.last_name,
                        "dob": login_user.birth_date.strftime("%Y-%m-%d"),
                        "address": {
                            "line1": user_address.line1,
                            "line2": user_address.line2,
                            "city": user_address.city,
                            "state": user_address.state,
                            "postal_code": user_address.postal_code,
                            "country": user_address.country,
                        },
                        "phone": "+12013514000",
                    },
                    business_type='individual',
                    external_account={
                        "object": "bank_account",
                        "country": "US",
                        "currency": "usd",
                        "routing_number": routing_number,
                        "account_number": account_number,
                    },
                    capabilities={
                        "card_payments": {"requested": True},
                        "transfers": {"requested": True},
                        "legacy_payments": {"requested": True},
                    },
                    settings={
                        "payments": {
                            "statement_descriptor": "NailSent"
                        }
                    },
                    tos_acceptance={
                        "date": datetime.now(),
                        "ip": request.META.get('REMOTE_ADDR'),
                        "user_agent": request.META.get('HTTP_USER_AGENT'),
                    }
                )
                login_user.stripe_connect_id = stripe_account.id
                login_user.save()
                print("Stripe Connect ID:", stripe_account.id)

            except stripe.error.InvalidRequestError as e:
                print("Invalid Request Error:", str(e))
                messages.error(request, "Invalid request to Stripe. Please check your data and try again.")
            except stripe.error.AuthenticationError as e:
                print("Authentication Error:", str(e))
                messages.error(request, "Authentication error with Stripe. Please check your API key.")
            except stripe.error.StripeError as e:
                print("Stripe Error:", str(e))
                messages.error(request, "An error occurred with Stripe. Please try again later.")
            except Exception as e:
                print("An unexpected error occurred:", str(e))
                messages.error(request, "An unexpected error occurred. Please try again later.")

    decrypted_details = {}
    if bank_details_obj:
        decrypted_details['username'] = decrypt_data(bank_details_obj.username)
        decrypted_details['accountNumber'] = decrypt_data(bank_details_obj.account_number)
        decrypted_details['routingnumber'] = decrypt_data(bank_details_obj.routing_number)
        decrypted_details['bankName'] = bank_details_obj.bank_name
    return render(request, 'all_pages/bank_account.html', {'bank_details': decrypted_details})

1 - 这是正确的方法吗 2 - 我希望当卖家输入此个人银行详细信息时,他应该获得一个条纹帐户 3 - 现在我收到此错误 无效请求错误:请求req_zH5gZbH3UCGmaK:无效对象

我立即能够将客户连接到条纹,当时我收到错误,帐户已被限制,因为您没有向条纹提供完整的详细信息

python django stripe-payments payment-gateway
1个回答
0
投票

我至少看到一个错误。您设置了

"dob": login_user.birth_date.strftime("%Y-%m-%d")
,与 Stripe 文档不匹配。

它应该是这样的:

"dob"= {
  "day": 01,
  "month": 01,
  "year": 1970,
}
© www.soinside.com 2019 - 2024. All rights reserved.