Reputation: 89
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
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