71 lines
2.1 KiB
Go
71 lines
2.1 KiB
Go
|
package utils
|
||
|
|
||
|
import (
|
||
|
"github.com/medivhzhan/weapp/v3"
|
||
|
"github.com/medivhzhan/weapp/v3/auth"
|
||
|
"github.com/medivhzhan/weapp/v3/phonenumber"
|
||
|
"go.uber.org/zap"
|
||
|
"miniapp/global"
|
||
|
"miniapp/model/app/request"
|
||
|
)
|
||
|
|
||
|
type wechat struct{}
|
||
|
|
||
|
func WeChatUtils() *wechat {
|
||
|
return &wechat{}
|
||
|
}
|
||
|
|
||
|
// GetWechatUnionId 获取微信用户基础信息
|
||
|
func (w wechat) GetWechatUnionId(code string) (unionId, openId, sessionKey string, err error) {
|
||
|
sdk := weapp.NewClient(global.GVA_CONFIG.MiniApp.AppId, global.GVA_CONFIG.MiniApp.AppSecret, weapp.WithLogger(nil))
|
||
|
cli := sdk.NewAuth()
|
||
|
|
||
|
p := auth.Code2SessionRequest{
|
||
|
Appid: global.GVA_CONFIG.MiniApp.AppId,
|
||
|
Secret: global.GVA_CONFIG.MiniApp.AppSecret,
|
||
|
JsCode: code,
|
||
|
GrantType: "authorization_code",
|
||
|
}
|
||
|
|
||
|
session, err := cli.Code2Session(&p)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
if session.GetResponseError() != nil {
|
||
|
global.GVA_LOG.Error("Code解析失败: %v", zap.Error(session.GetResponseError()))
|
||
|
err = session.GetResponseError()
|
||
|
return
|
||
|
}
|
||
|
// 设置UnionId值
|
||
|
unionId = session.Unionid
|
||
|
openId = session.Openid
|
||
|
sessionKey = session.SessionKey
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// GetWechatPhone 根据Code获取小程序用户手机号
|
||
|
// return 不带区号的手机号
|
||
|
func (w wechat) GetWechatPhone(param request.DecryptMobile) (string, error) {
|
||
|
sdk := weapp.NewClient(global.GVA_CONFIG.MiniApp.AppId, global.GVA_CONFIG.MiniApp.AppSecret)
|
||
|
mobile, err := sdk.DecryptMobile(param.SessionKey, param.EncryptedData, param.Iv)
|
||
|
if err != nil {
|
||
|
global.GVA_LOG.Error("解密手机号失败: %v", zap.Error(err))
|
||
|
return "", err
|
||
|
}
|
||
|
global.GVA_LOG.Debug("解密后的手机号: %+v", zap.String("mobile", mobile.PurePhoneNumber))
|
||
|
return mobile.PurePhoneNumber, nil
|
||
|
}
|
||
|
|
||
|
// GetPhoneNumber 获取手机号
|
||
|
func (w wechat) GetPhoneNumber(code string) (phone string, err error) {
|
||
|
sdk := weapp.NewClient(global.GVA_CONFIG.MiniApp.AppId, global.GVA_CONFIG.MiniApp.AppSecret)
|
||
|
resp, err := sdk.NewPhonenumber().GetPhoneNumber(&phonenumber.GetPhoneNumberRequest{Code: code})
|
||
|
if err != nil {
|
||
|
global.GVA_LOG.Error("获取手机号失败: %v", zap.Error(err))
|
||
|
return
|
||
|
}
|
||
|
// 获取手机号
|
||
|
phone = resp.Data.PurePhoneNumber
|
||
|
return
|
||
|
}
|