远兮 commited on
Commit
1532712
·
1 Parent(s): ff0163b

添加支付订单、订单中心api

Browse files
Files changed (1) hide show
  1. chatgpt-next-web/service.py +118 -3
chatgpt-next-web/service.py CHANGED
@@ -171,6 +171,123 @@ def logout():
171
  return jsonify({'code': 0, 'message': 'Logout successful'})
172
 
173
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
174
  # 购买支付套餐
175
  @app.route('/purchase', methods=['POST'])
176
  def purchase():
@@ -374,10 +491,8 @@ def generate_token(user_id, username):
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']):
@@ -385,7 +500,7 @@ def validate_token(token):
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
 
171
  return jsonify({'code': 0, 'message': 'Logout successful'})
172
 
173
 
174
+ @app.route('/create_order', methods=['POST'])
175
+ def create_order():
176
+ # 从请求中获取套餐ID和用户令牌
177
+ package_id = request.json.get('package_id')
178
+ token = parse_token(request)
179
+
180
+ # 验证令牌
181
+ if not validate_token(token):
182
+ return jsonify({'code': 401, 'message': 'Invalid token'})
183
+
184
+ # 根据套餐ID获取套餐信息
185
+ package = pay_package.get_package_by_id(package_id)
186
+ if not package:
187
+ return jsonify({'code': 400, 'message': 'Invalid package ID'})
188
+
189
+ # 获取用户ID
190
+ user_id = get_user_id_from_token(token)
191
+ if not user_id:
192
+ return jsonify({'code': 400, 'message': 'User not found'})
193
+ # 创建订单
194
+ order_id = str(uuid.uuid4())
195
+ order_data = {
196
+ 'order_id': order_id,
197
+ 'user_id': user_id,
198
+ 'package_id': package_id,
199
+ 'amount': package['price'],
200
+ 'status': 'pending', # 订单状态设置为待支付
201
+ 'created_at': nowtime().strftime('%Y-%m-%d %H:%M:%S') # 将时间转换为字符串格式保存
202
+ }
203
+ # 将订单信息存储到Redis,并设置过期时间为2小时
204
+ order_key = f'order:{user_id}:{order_id}'
205
+ redis.hmset(order_key, order_data)
206
+ redis.expire(order_key, datetime.timedelta(hours=2))
207
+
208
+ return jsonify({
209
+ 'code': 0,
210
+ 'message': 'Order created',
211
+ 'data': {
212
+ 'order_id': order_id,
213
+ 'amount': package['price']
214
+ }
215
+ })
216
+
217
+
218
+ @app.route('/order_center', methods=['POST'])
219
+ def order_center():
220
+ token = parse_token(request)
221
+
222
+ # 验证令牌
223
+ if not validate_token(token):
224
+ return jsonify({'code': 401, 'message': 'Invalid token'})
225
+
226
+ # 获取用户ID
227
+ user_id = get_user_id_from_token(token)
228
+ if not user_id:
229
+ return jsonify({'code': 400, 'message': 'User not found'})
230
+
231
+ # 获取用户的所有订单
232
+ user_orders = get_user_orders(user_id)
233
+
234
+ print(user_orders)
235
+
236
+ # 获取该用户的有效订单列表
237
+ valid_orders = [
238
+ order for order in user_orders
239
+ if not is_order_expired(order)
240
+ ]
241
+
242
+ print(valid_orders)
243
+ return jsonify({
244
+ 'code': 0,
245
+ 'message': 'Order center',
246
+ 'data': {
247
+ 'user_orders': valid_orders
248
+ }
249
+ })
250
+
251
+
252
+ def get_user_orders(user_id):
253
+ # 从Redis中获取该用户的所有订单数据
254
+ user_orders = []
255
+ for key in redis.scan_iter(f'order:{user_id}:*'): # 修改获取键的方式
256
+ order_data = redis.hgetall(key)
257
+ # 将bytes类型的键和值转换为str类型
258
+ order_data_str = {
259
+ k.decode('utf-8'): v.decode('utf-8') for k, v in order_data.items()
260
+ }
261
+ user_orders.append(order_data_str)
262
+ return user_orders
263
+
264
+
265
+ def is_order_expired(order_data):
266
+ print("is_order_expired", order_data)
267
+ # 获取订单创建时间
268
+ created_at_str = order_data.get('created_at')
269
+ if not created_at_str:
270
+ print("created_at_str is None")
271
+ return True
272
+
273
+ # 将订单创建时间转换为datetime对象
274
+ created_at = datetime.datetime.strptime(
275
+ created_at_str,
276
+ '%Y-%m-%d %H:%M:%S'
277
+ )
278
+
279
+ # 订单有效期为2小时
280
+ expiration_time = datetime.timedelta(hours=2)
281
+
282
+ # 获取当前时间
283
+ current_time = nowtime()
284
+
285
+ print(current_time, created_at, expiration_time)
286
+
287
+ # 检查时间差是否超过订单有效期
288
+ return (current_time - created_at) >= expiration_time
289
+
290
+
291
  # 购买支付套餐
292
  @app.route('/purchase', methods=['POST'])
293
  def purchase():
 
491
  # 验证令牌
492
  def validate_token(token):
493
  try:
 
494
  # 使用密钥进行解码
495
  payload = jwt.decode(token, SECERT_KEY, algorithms=['HS256'])
 
496
 
497
  # 检查令牌的过期时间
498
  if 'exp' in payload and nowtime() > datetime.datetime.fromtimestamp(payload['exp']):
 
500
 
501
  if 'user_id' not in payload or 'username' not in payload:
502
  return False
503
+
504
  return True
505
  except (jwt.DecodeError, jwt.InvalidTokenError):
506
  return False