Spaces:
Runtime error
Runtime error
远兮
commited on
Commit
·
ff0163b
1
Parent(s):
3dcffd6
修改package,与充值累加逻辑
Browse files- {redis → chatgpt-next-web}/mail.py +0 -0
- chatgpt-next-web/pay_package.py +13 -12
- chatgpt-next-web/service.py +25 -15
{redis → chatgpt-next-web}/mail.py
RENAMED
File without changes
|
chatgpt-next-web/pay_package.py
CHANGED
@@ -1,19 +1,20 @@
|
|
1 |
-
packages = [
|
2 |
-
'title': '基础套餐(推荐)',
|
3 |
-
'package_id': '1',
|
4 |
-
'basic_chat_limit': 10,
|
5 |
-
'advanced_chat_limit': 10,
|
6 |
-
'price': 10,
|
7 |
-
'expiration': -1
|
8 |
-
},
|
9 |
{
|
10 |
-
'
|
11 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
'basic_chat_limit': -1, # -1 表示无限次
|
13 |
'advanced_chat_limit': -1,
|
14 |
'price': 100,
|
15 |
'expiration': -1
|
16 |
-
}
|
17 |
]
|
18 |
|
19 |
|
@@ -74,6 +75,6 @@ test_packages = [{
|
|
74 |
# 根据套餐ID获取套餐信息
|
75 |
def get_package_by_id(package_id):
|
76 |
for package in packages:
|
77 |
-
if package['
|
78 |
return package
|
79 |
return None
|
|
|
1 |
+
packages = [
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
{
|
3 |
+
'id': '1',
|
4 |
+
'title': '基础套餐(推荐)',
|
5 |
+
'basic_chat_limit': 10,
|
6 |
+
'advanced_chat_limit': 10,
|
7 |
+
'price': 10,
|
8 |
+
'expiration': -1
|
9 |
+
},
|
10 |
+
{
|
11 |
+
'id': '2',
|
12 |
+
'title': '高级套餐',
|
13 |
'basic_chat_limit': -1, # -1 表示无限次
|
14 |
'advanced_chat_limit': -1,
|
15 |
'price': 100,
|
16 |
'expiration': -1
|
17 |
+
}
|
18 |
]
|
19 |
|
20 |
|
|
|
75 |
# 根据套餐ID获取套餐信息
|
76 |
def get_package_by_id(package_id):
|
77 |
for package in packages:
|
78 |
+
if package['id'] == package_id:
|
79 |
return package
|
80 |
return None
|
chatgpt-next-web/service.py
CHANGED
@@ -13,6 +13,7 @@ from utils import nowtime
|
|
13 |
import pay_package
|
14 |
from ApiResponse import ApiResponse
|
15 |
from flask_cors import CORS
|
|
|
16 |
|
17 |
SECERT_KEY = "8U2LL1"
|
18 |
MY_OPENAI_API_KEY = os.environ.get('MY_OPENAI_API_KEY')
|
@@ -32,7 +33,13 @@ def generate_verification_code():
|
|
32 |
|
33 |
# 发送验证码到用户邮箱(这里只是模拟发送过程)
|
34 |
def send_verification_code(email, code):
|
35 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
|
37 |
|
38 |
# 用户请求发送验证码
|
@@ -333,7 +340,7 @@ def packageOnSales():
|
|
333 |
response = ApiResponse(
|
334 |
code=0,
|
335 |
message='Login successful',
|
336 |
-
data=pay_package.
|
337 |
return jsonify(response.to_json())
|
338 |
|
339 |
|
@@ -367,15 +374,18 @@ def generate_token(user_id, username):
|
|
367 |
# 验证令牌
|
368 |
def validate_token(token):
|
369 |
try:
|
370 |
-
print(token)
|
371 |
# 使用密钥进行解码
|
372 |
payload = jwt.decode(token, SECERT_KEY, algorithms=['HS256'])
|
373 |
-
print(payload)
|
374 |
|
375 |
# 检查令牌的过期时间
|
376 |
if 'exp' in payload and nowtime() > datetime.datetime.fromtimestamp(payload['exp']):
|
377 |
return False
|
378 |
|
|
|
|
|
|
|
379 |
return True
|
380 |
except (jwt.DecodeError, jwt.InvalidTokenError):
|
381 |
return False
|
@@ -408,20 +418,20 @@ def get_user_id_by_username(username):
|
|
408 |
# 存储用户套餐信息到Redis
|
409 |
def store_user_package(user_id, package):
|
410 |
current_package = get_user_package(user_id)
|
411 |
-
basic_chat_limit =
|
412 |
-
advanced_chat_limit =
|
413 |
-
if
|
414 |
-
basic_chat_limit
|
415 |
-
advanced_chat_limit
|
416 |
|
417 |
user_package_key = f'user:{user_id}:package'
|
418 |
-
redis.hset(user_package_key, '
|
419 |
-
redis.hset(user_package_key, '
|
420 |
redis.hset(user_package_key, 'basic_chat_limit', basic_chat_limit)
|
421 |
redis.hset(user_package_key, 'advanced_chat_limit', advanced_chat_limit)
|
422 |
# 设置套餐过期时间
|
423 |
-
expiration = int(time.time()) + package['expiration']
|
424 |
-
redis.expireat(user_package_key, expiration)
|
425 |
|
426 |
|
427 |
# 获取用户套餐信息
|
@@ -434,14 +444,14 @@ def get_user_package(user_id):
|
|
434 |
# 检查用户是否已经支付过指定套餐
|
435 |
def has_purchased_package(user_id, package_id):
|
436 |
user_package_key = f'user:{user_id}:package'
|
437 |
-
purchased_package_id = redis.hget(user_package_key, '
|
438 |
return purchased_package_id.decode('utf-8') == str(package_id)
|
439 |
|
440 |
|
441 |
# 检查用户是否已经支付了高级套餐
|
442 |
def has_purchased_advanced_package(user_id):
|
443 |
user_package_key = f'user:{user_id}:package'
|
444 |
-
purchased_package_id = redis.hget(user_package_key, '
|
445 |
return purchased_package_id.decode('utf-8') == '2'
|
446 |
|
447 |
|
|
|
13 |
import pay_package
|
14 |
from ApiResponse import ApiResponse
|
15 |
from flask_cors import CORS
|
16 |
+
from mail import MyEmail
|
17 |
|
18 |
SECERT_KEY = "8U2LL1"
|
19 |
MY_OPENAI_API_KEY = os.environ.get('MY_OPENAI_API_KEY')
|
|
|
33 |
|
34 |
# 发送验证码到用户邮箱(这里只是模拟发送过程)
|
35 |
def send_verification_code(email, code):
|
36 |
+
my = MyEmail()
|
37 |
+
my.user = "[email protected]"
|
38 |
+
my.passwd = "todo"
|
39 |
+
my.to_list = [email]
|
40 |
+
my.tag = "Chat注册验证码"
|
41 |
+
my.txt = f"【{code}】Chat邮箱注册验证码,您正在注册Chat账号,请勿泄露。"
|
42 |
+
my.send()
|
43 |
|
44 |
|
45 |
# 用户请求发送验证码
|
|
|
340 |
response = ApiResponse(
|
341 |
code=0,
|
342 |
message='Login successful',
|
343 |
+
data=pay_package.packages)
|
344 |
return jsonify(response.to_json())
|
345 |
|
346 |
|
|
|
374 |
# 验证令牌
|
375 |
def validate_token(token):
|
376 |
try:
|
377 |
+
print("validate_token", "token:", token)
|
378 |
# 使用密钥进行解码
|
379 |
payload = jwt.decode(token, SECERT_KEY, algorithms=['HS256'])
|
380 |
+
print("validate_token", "payload:", payload)
|
381 |
|
382 |
# 检查令牌的过期时间
|
383 |
if 'exp' in payload and nowtime() > datetime.datetime.fromtimestamp(payload['exp']):
|
384 |
return False
|
385 |
|
386 |
+
if 'user_id' not in payload or 'username' not in payload:
|
387 |
+
return False
|
388 |
+
|
389 |
return True
|
390 |
except (jwt.DecodeError, jwt.InvalidTokenError):
|
391 |
return False
|
|
|
418 |
# 存储用户套餐信息到Redis
|
419 |
def store_user_package(user_id, package):
|
420 |
current_package = get_user_package(user_id)
|
421 |
+
basic_chat_limit = package['basic_chat_limit']
|
422 |
+
advanced_chat_limit = package['advanced_chat_limit']
|
423 |
+
if current_package:
|
424 |
+
basic_chat_limit += int(current_package.get(b'basic_chat_limit', 0))
|
425 |
+
advanced_chat_limit += int(current_package.get(b'advanced_chat_limit', 0))
|
426 |
|
427 |
user_package_key = f'user:{user_id}:package'
|
428 |
+
redis.hset(user_package_key, 'id', package['id'])
|
429 |
+
redis.hset(user_package_key, 'title', package['title'])
|
430 |
redis.hset(user_package_key, 'basic_chat_limit', basic_chat_limit)
|
431 |
redis.hset(user_package_key, 'advanced_chat_limit', advanced_chat_limit)
|
432 |
# 设置套餐过期时间
|
433 |
+
# expiration = int(time.time()) + package['expiration']
|
434 |
+
# redis.expireat(user_package_key, expiration)
|
435 |
|
436 |
|
437 |
# 获取用户套餐信息
|
|
|
444 |
# 检查用户是否已经支付过指定套餐
|
445 |
def has_purchased_package(user_id, package_id):
|
446 |
user_package_key = f'user:{user_id}:package'
|
447 |
+
purchased_package_id = redis.hget(user_package_key, 'id')
|
448 |
return purchased_package_id.decode('utf-8') == str(package_id)
|
449 |
|
450 |
|
451 |
# 检查用户是否已经支付了高级套餐
|
452 |
def has_purchased_advanced_package(user_id):
|
453 |
user_package_key = f'user:{user_id}:package'
|
454 |
+
purchased_package_id = redis.hget(user_package_key, 'id')
|
455 |
return purchased_package_id.decode('utf-8') == '2'
|
456 |
|
457 |
|