package dingding import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/auth2" "git.rosy.net.cn/jx-callback/business/auth2/authprovider" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" ) type QRCodeAuther struct { authprovider.DefAuther } var ( AutherObjQRCode *QRCodeAuther ) func init() { AutherObjQRCode = new(QRCodeAuther) auth2.RegisterAuther(AuthTypeQRCode, AutherObjQRCode) } func (a *QRCodeAuther) VerifySecret(dummy, code string) (authBindEx *auth2.AuthBindEx, err error) { globals.SugarLogger.Debugf("dingding qrcode VerifySecret code:%s", code) userQRInfo, err := api.DingDingQRCodeAPI.GetUserInfoByCode(code) if err == nil { globals.SugarLogger.Debugf("dingding qrcode VerifySecret code:%s, userQRInfo:%s", code, utils.Format4Output(userQRInfo, false)) db := dao.GetDB() var authBind *model.AuthBind if authBind, err = dao.GetAuthBind(db, "", AuthTypeQRCode, userQRInfo.OpenID); dao.IsNoRowsError(err) { userHint := &auth2.UserBasic{ Name: userQRInfo.Nickname, } if userQRInfo.UnionID != "" { var authBindList []*model.AuthBind if authBindList, err = dao.GetAuthBindsByAuthID2(db, userQRInfo.UnionID, []string{AuthTypeDingDing, AuthTypeStaff, AuthTypeQRCode}); err == nil && len(authBindList) > 0 { authBind = authBindList[0] authBind.Type = AuthTypeQRCode authBind.AuthID = userQRInfo.OpenID authBind.DetailData = string(utils.MustMarshal(userQRInfo)) authBindEx = &auth2.AuthBindEx{ AuthBind: *authBind, UserHint: userHint, } err = a.AddAuthBind(authBindEx, "admin") } else if dao.IsNoRowsError(err) { err = nil } } if err == nil && authBindEx == nil { authBindEx = &auth2.AuthBindEx{ AuthBind: model.AuthBind{ Type: AuthTypeQRCode, AuthID: userQRInfo.OpenID, AuthID2: userQRInfo.UnionID, DetailData: string(utils.MustMarshal(userQRInfo)), }, UserHint: userHint, } } } } return authBindEx, err }