1
This commit is contained in:
@@ -7,17 +7,10 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
|
||||||
"git.rosy.net.cn/jx-print/dao"
|
|
||||||
"git.rosy.net.cn/jx-print/globals"
|
|
||||||
"git.rosy.net.cn/jx-print/model"
|
"git.rosy.net.cn/jx-print/model"
|
||||||
wxLogin "git.rosy.net.cn/jx-print/model/app_model"
|
wxLogin "git.rosy.net.cn/jx-print/model/app_model"
|
||||||
"git.rosy.net.cn/jx-print/services/api"
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
xaes "github.com/go-pay/gopay/pkg/aes"
|
|
||||||
"github.com/go-pay/gopay/wechat"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type UserLogin struct {
|
type UserLogin struct {
|
||||||
@@ -25,98 +18,100 @@ type UserLogin struct {
|
|||||||
|
|
||||||
// WxLogin 授权登录
|
// WxLogin 授权登录
|
||||||
func (u *UserLogin) WxLogin(ctx *gin.Context, code, phone string) (*model.User, error) {
|
func (u *UserLogin) WxLogin(ctx *gin.Context, code, phone string) (*model.User, error) {
|
||||||
// 生成openId
|
//// 生成openId
|
||||||
openObj, err := wechat.GetOauth2AccessToken(ctx, wxLogin.WeChatAPPID, wxLogin.WeChatAPPSecret, code)
|
//openObj, err := wechat.GetOauth2AccessToken(ctx, wxLogin.WeChatAPPID, wxLogin.WeChatAPPSecret, code)
|
||||||
if err != nil {
|
//if err != nil {
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
if openObj.Errcode != 0 {
|
//if openObj.Errcode != 0 {
|
||||||
return nil, errors.New(openObj.Errmsg)
|
// return nil, errors.New(openObj.Errmsg)
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
// 检查用户是否存在
|
//// 检查用户是否存在
|
||||||
users, err := dao.GetUsers(globals.GetDB(), "", "", phone, "")
|
//users, err := dao.GetUsers(globals.GetDB(), "", "", phone, "")
|
||||||
if err != nil {
|
//if err != nil {
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
//}
|
||||||
if len(users) > 1 {
|
//if len(users) > 1 {
|
||||||
return nil, errors.New("数据异常,用户电话不唯一,联系管理员")
|
// return nil, errors.New("数据异常,用户电话不唯一,联系管理员")
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
// 获取用户信息,是否注册
|
//// 获取用户信息,是否注册
|
||||||
userInfo, err := wechat.GetOauth2UserInfo(ctx, openObj.AccessToken, openObj.Openid)
|
//userInfo, err := wechat.GetOauth2UserInfo(ctx, openObj.AccessToken, openObj.Openid)
|
||||||
if err != nil {
|
//if err != nil {
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
var userObj *model.User
|
//var userObj *model.User
|
||||||
timeNow := time.Now()
|
//timeNow := time.Now()
|
||||||
switch len(users) {
|
//switch len(users) {
|
||||||
case 0:
|
//case 0:
|
||||||
// 用户不存在,创建并返回用户
|
// // 用户不存在,创建并返回用户
|
||||||
userBase := &model.User{
|
// userBase := &model.User{
|
||||||
CreatedAt: &timeNow,
|
// CreatedAt: &timeNow,
|
||||||
UpdatedAt: &timeNow,
|
// UpdatedAt: &timeNow,
|
||||||
LastOperator: "系统新增",
|
// LastOperator: "系统新增",
|
||||||
DeletedAt: &utils.DefaultTimeValue,
|
// DeletedAt: &utils.DefaultTimeValue,
|
||||||
UserID: utils.GetUUID(),
|
// UserID: utils.GetUUID(),
|
||||||
Password: "",
|
// Password: "",
|
||||||
Name: userInfo.Nickname,
|
// Name: userInfo.Nickname,
|
||||||
Mobile: phone,
|
// Mobile: phone,
|
||||||
Email: "",
|
// Email: "",
|
||||||
Avatar: userInfo.Headimgurl,
|
// Avatar: userInfo.Headimgurl,
|
||||||
Status: 1,
|
// Status: 1,
|
||||||
Type: 1,
|
// Type: 1,
|
||||||
Company: "",
|
// Company: "",
|
||||||
CityCode: 0,
|
// CityCode: 0,
|
||||||
DistrictCode: 0,
|
// DistrictCode: 0,
|
||||||
Address: "",
|
// Address: "",
|
||||||
IDCardNo: "",
|
// IDCardNo: "",
|
||||||
Remark: "",
|
// Remark: "",
|
||||||
LastLoginAt: &timeNow,
|
// LastLoginAt: &timeNow,
|
||||||
LastLoginIP: ctx.ClientIP(),
|
// LastLoginIP: ctx.ClientIP(),
|
||||||
LastLoginType: model.OrderOriginWxMini,
|
// LastLoginType: model.OrderOriginWxMini,
|
||||||
OpenId: userInfo.Openid,
|
// OpenId: userInfo.Openid,
|
||||||
UnionId: userInfo.Unionid,
|
// UnionId: userInfo.Unionid,
|
||||||
}
|
// }
|
||||||
if err := dao.CreateUserWx(userBase); err != nil {
|
// if err := dao.CreateUserWx(userBase); err != nil {
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
// }
|
||||||
userObj = userBase
|
// userObj = userBase
|
||||||
case 1:
|
//case 1:
|
||||||
// 用户使用电话号码登录,未使用微信登录
|
// // 用户使用电话号码登录,未使用微信登录
|
||||||
if users[0].OpenId == "" {
|
// if users[0].OpenId == "" {
|
||||||
users[0].Name = userInfo.Nickname
|
// users[0].Name = userInfo.Nickname
|
||||||
users[0].Avatar = userInfo.Headimgurl
|
// users[0].Avatar = userInfo.Headimgurl
|
||||||
users[0].OpenId = userInfo.Openid
|
// users[0].OpenId = userInfo.Openid
|
||||||
users[0].UnionId = userInfo.Unionid
|
// users[0].UnionId = userInfo.Unionid
|
||||||
}
|
// }
|
||||||
// 用户存在,判断用户
|
// // 用户存在,判断用户
|
||||||
users[0].UpdatedAt = &timeNow
|
// users[0].UpdatedAt = &timeNow
|
||||||
users[0].LastOperator = users[0].Name
|
// users[0].LastOperator = users[0].Name
|
||||||
users[0].LastLoginIP = ctx.ClientIP()
|
// users[0].LastLoginIP = ctx.ClientIP()
|
||||||
if err := dao.UpdateUserWx(users[0], []string{"updated_at", "last_operator", "last_login_ip", "name", "avatar", "open_id", "union_id"}); err != nil {
|
// if err := dao.UpdateUserWx(users[0], []string{"updated_at", "last_operator", "last_login_ip", "name", "avatar", "open_id", "union_id"}); err != nil {
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
// }
|
||||||
userObj = users[0]
|
// userObj = users[0]
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
return userObj, err
|
//return userObj, err
|
||||||
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetUserPhoneNum 解密用户手机号
|
// GetUserPhoneNum 解密用户手机号
|
||||||
func (u *UserLogin) GetUserPhoneNum(param *wxLogin.WeChatPhoneNumberParam) (string, error) {
|
func (u *UserLogin) GetUserPhoneNum(param *wxLogin.WeChatPhoneNumberParam) (string, error) {
|
||||||
sessionInfo, err := api.WeixinMiniAPI.SNSCode2Session(param.Code)
|
//sessionInfo, err := api.WeixinMiniAPI.SNSCode2Session(param.Code)
|
||||||
if err != nil {
|
//if err != nil {
|
||||||
return "", err
|
// return "", err
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
weChatLogin := new(wechat.UserPhone)
|
//weChatLogin := new(wechat.UserPhone)
|
||||||
if err := DecryptOpenDataToStruct(param.EncryptedData, param.IV, sessionInfo.SessionKey, weChatLogin); err != nil {
|
//if err := DecryptOpenDataToStruct(param.EncryptedData, param.IV, sessionInfo.SessionKey, weChatLogin); err != nil {
|
||||||
return "", err
|
// return "", err
|
||||||
}
|
//}
|
||||||
return weChatLogin.PhoneNumber, nil
|
//return weChatLogin.PhoneNumber, nil
|
||||||
|
return "", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// DecryptOpenDataToStruct 解密开放数据到结构体
|
// DecryptOpenDataToStruct 解密开放数据到结构体
|
||||||
@@ -153,9 +148,9 @@ func DecryptOpenDataToStruct(encryptedData, iv, sessionKey string, beanPtr inter
|
|||||||
blockMode = cipher.NewCBCDecrypter(block, ivKey)
|
blockMode = cipher.NewCBCDecrypter(block, ivKey)
|
||||||
plainText = make([]byte, len(cipherText))
|
plainText = make([]byte, len(cipherText))
|
||||||
blockMode.CryptBlocks(plainText, cipherText)
|
blockMode.CryptBlocks(plainText, cipherText)
|
||||||
if len(plainText) > 0 {
|
//if len(plainText) > 0 {
|
||||||
plainText = xaes.PKCS7UnPadding(plainText)
|
// plainText = xaes.PKCS7UnPadding(plainText)
|
||||||
}
|
//}
|
||||||
if err = json.Unmarshal(plainText, beanPtr); err != nil {
|
if err = json.Unmarshal(plainText, beanPtr); err != nil {
|
||||||
return fmt.Errorf("json.Marshal(%s):%w", string(plainText), err)
|
return fmt.Errorf("json.Marshal(%s):%w", string(plainText), err)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user