Files
孟宁 0557a744c0 !52 通过场景码SceneStr区分用户登录不同的部署版本,优化了代码
* 修改了微信公众号关注事件和文本消息的响应
* 通过场景码SceneStr区分用户登录不同的部署版本,优化了代码
* 兼容线上/api/wechat/official-account相关API
* 对第三方依赖中的PowerWeChat和officialAccount等字符串进行了本地化抽象,以Wechat和wechat_sdk命名可读性更好
* Merge branch 'dev' into refactoring-wechat-qr-code
* 梳理了routers到auth_service的代码,wechat_service还需要进一步整理
* 对代码文件目录结构进行了重构,内在逻辑还没有重构
* wechat相关路径中删掉了无意义的official-account字符串
2025-02-14 10:41:45 +00:00

49 lines
1.5 KiB
Go

package setting
import (
wechat_model "code.gitea.io/gitea/models/wechat"
"code.gitea.io/gitea/modules/log"
context "code.gitea.io/gitea/services/context"
wechat_service "code.gitea.io/gitea/services/wechat"
)
// BindWechatQR 将二维码扫描人 OpenID 关联到数据库用户中
func BindWechatQR(ctx *context.Context) {
// 1. 取出 微信公众号二维码 ticket
ticket := ctx.Base.Req.URL.Query().Get("ticket")
// 2. 取出用户openid并清空对应的ticket
qrStatus, err := wechat_service.GetWechatQrStatusByTicket(ticket)
if err != nil {
log.Error("绑定微信失败: " + err.Error())
ctx.Flash.Error("绑定微信失败:" + err.Error())
ctx.Redirect("/user/settings/account")
return
}
defer wechat_service.DeleteWechatQrByTicket(ticket)
// 3. 从 Gitea Web Context 中获取用户信息
user := ctx.Doer
// 4. 更新数据库 `user_wechat_official_account_openid`
err = wechat_model.UpdateOrCreateWechatUser(ctx, user, qrStatus.OpenId)
if err != nil {
log.Error("绑定微信失败: " + err.Error())
ctx.Flash.Error("绑定微信失败: " + err.Error())
ctx.Redirect("/user/settings/account")
return
}
// 5. 携带扫码成功信息,重定向回用户修改信息页面
ctx.Data["wechatQRScanSuccess"] = true
Account(ctx)
}
// UnbindWechatQR 解绑微信
func UnbindWechatQR(ctx *context.Context) {
_ = wechat_model.DeleteWechatUser(ctx, ctx.Doer)
ctx.Flash.Success(ctx.Tr("settings.wechat_unbind_success"))
ctx.Redirect("/user/settings/account")
}