This commit is contained in:
hackrobot
2024-07-21 14:31:44 +08:00
parent 1b6d488688
commit 1bdd3dbc19
4 changed files with 57 additions and 15 deletions

View File

@@ -15,6 +15,8 @@ from fastapi.staticfiles import StaticFiles
# from app import tgMessage # type: ignore #发送tg消息 # from app import tgMessage # type: ignore #发送tg消息
from datetime import datetime from datetime import datetime
import requests import requests
from tentcentSMS import sendSms
import random
# 初始化数据库 # 初始化数据库
models.Base.metadata.create_all(bind=engine) models.Base.metadata.create_all(bind=engine)
@@ -50,6 +52,7 @@ def get_db():
# def root(): # def root():
# return {"message": "Hello World"} # return {"message": "Hello World"}
def sengTgmesage(message): def sengTgmesage(message):
url = "http://192.168.31.38:8521/send_message" url = "http://192.168.31.38:8521/send_message"
data = {"message": message} data = {"message": message}
@@ -138,7 +141,6 @@ def generateqr(url="http://nomad.hackrobot.cn",
if wxid: if wxid:
url += f"?wxid={wxid}" url += f"?wxid={wxid}"
# 创建二维码 # 创建二维码
qr = qrcode.QRCode(version=1, box_size=5, border=2) # 调整二维码大小 qr = qrcode.QRCode(version=1, box_size=5, border=2) # 调整二维码大小
qr.add_data(url) qr.add_data(url)
@@ -220,13 +222,15 @@ def add_user(nickname: Optional[Any] = None,
elif keyword == '活动': elif keyword == '活动':
print("keyword==活动") print("keyword==活动")
response = f"活动正在筹备中" response = f"活动正在筹备中"
combined_image_path = generateqr(url="http://nomad.hackrobot.cn", combined_image_path = generateqr(
url="http://nomad.hackrobot.cn",
wxid=wxid, wxid=wxid,
group_image_path="images/meetupqr.jpg") group_image_path="images/meetupqr.jpg")
return FileResponse(combined_image_path) return FileResponse(combined_image_path)
elif keyword == 'qrcode': elif keyword == 'qrcode':
print("keyword==qrcode") print("keyword==qrcode")
combined_image_path = generateqr(url="http://nomad.hackrobot.cn", combined_image_path = generateqr(
url="http://nomad.hackrobot.cn",
# wxid='qrcode', # wxid='qrcode',
group_image_path="images/nomadqr.jpg") group_image_path="images/nomadqr.jpg")
return FileResponse(combined_image_path) return FileResponse(combined_image_path)
@@ -276,3 +280,37 @@ def update_user(identifier: str,
} }
# 获取手机号=>生成验证码
@app.post("/get_verification_code/")
def get_verification_code(wxid: str,
phone_number: str,
db: Session = Depends(get_db)):
verification_code = '{:04d}'.format(random.randint(0, 9999))
user = db.query(models.User).filter(models.User.wxid == wxid).first()
if not user:
raise HTTPException(status_code=404, detail="User not found")
user.phone_number = phone_number
user.verification_code = verification_code
db.commit()
return {
"message": "Verification code sent",
"verification_code": verification_code
}
# 验证码校验
@app.post("/verify_code/")
def verify_code(phone_number: str, code: str, db: Session = Depends(get_db)):
user = db.query(
models.User).filter(models.User.phone_number == phone_number).first()
if not user:
raise HTTPException(status_code=404, detail="User not found")
if user.verification_code == code:
return {"message": "Verification successful"}
else:
raise HTTPException(status_code=400,
detail="Invalid verification code")

View File

@@ -20,6 +20,8 @@ class User(Base):
ebook = Column(Boolean, default=False) # 新增电子书字段 ebook = Column(Boolean, default=False) # 新增电子书字段
activity_status = Column(String, default="0") # 新增活动报名字段 activity_status = Column(String, default="0") # 新增活动报名字段
vip_member = Column(Boolean, default=False) # 新增VIP会员字段 vip_member = Column(Boolean, default=False) # 新增VIP会员字段
verification_code = Column(String, index=True) # 新增验证码字段
phone_number = Column(String, index=True, unique=True) # 新增手机号字段
def sengTgmesage(message): def sengTgmesage(message):

View File

@@ -12,6 +12,8 @@ class UserBase(BaseModel):
ebook: Optional[bool] = None # 新增电子书字段 ebook: Optional[bool] = None # 新增电子书字段
activity_status: Optional[str] = None # 新增活动报名字段 activity_status: Optional[str] = None # 新增活动报名字段
vip_member: Optional[bool] = None # 新增VIP会员字段 vip_member: Optional[bool] = None # 新增VIP会员字段
verification_code: Optional[bool] = None #新增验证码字段
class UserCreate(UserBase): class UserCreate(UserBase):
pass pass

View File

@@ -16,7 +16,7 @@ import random
# phoneNum="+8613243889782" # phoneNum="+8613243889782"
def sendSms(phoneNum): def sendSms(phoneNum,verification_code=None):
try: try:
# 必要步骤: # 必要步骤:
# 实例化一个认证对象入参需要传入腾讯云账户密钥对secretIdsecretKey。 # 实例化一个认证对象入参需要传入腾讯云账户密钥对secretIdsecretKey。
@@ -77,7 +77,7 @@ def sendSms(phoneNum):
# 模板参数: 模板参数的个数需要与 TemplateId 对应模板的变量个数保持一致,,若无模板参数,则设置为空 # 模板参数: 模板参数的个数需要与 TemplateId 对应模板的变量个数保持一致,,若无模板参数,则设置为空
# 随机4位数字 # 随机4位数字
verification_code = '{:04d}'.format(random.randint(0, 9999)) # verification_code = '{:04d}'.format(random.randint(0, 9999))
req.TemplateParamSet = [verification_code] req.TemplateParamSet = [verification_code]
# 下发手机号码,采用 E.164 标准,+[国家或地区码][手机号] # 下发手机号码,采用 E.164 标准,+[国家或地区码][手机号]
# 示例如:+8613711112222 其中前面有一个+号 86为国家码13711112222为手机号最多不要超过200个手机号 # 示例如:+8613711112222 其中前面有一个+号 86为国家码13711112222为手机号最多不要超过200个手机号