Tejinder Singh
Tejinder Singh

Reputation: 89

creating stripe connect account for seller(creating stripe account)

I am working on a project where i have 2 user type one is buyer and another is seller, Now i am trying the create stripe connect account for that seller so that he/she will be able to receive money

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 - Is this the right way to do this 2 - I want that when seller input this personal bank details he should get a stripe account 3 - right now i am getting this error Invalid Request Error: Request req_zH5gZbH3UCGmaK: Invalid object

at once i was able to connect the customer to the stripe and at that time i was getting the error, account has been restricted as you have not provided complete details to the stripe

Upvotes: 0

Views: 64

Answers (1)

soma
soma

Reputation: 2219

I see at least one error. You set "dob": login_user.birth_date.strftime("%Y-%m-%d"), which doesn't match the Stripe documentation.

Instead it should be something like this:

"dob"= {
  "day": 01,
  "month": 01,
  "year": 1970,
}

Upvotes: 1

Related Questions