diff --git a/business/auth2/authprovider/weixin/weixin_mini.go b/business/auth2/authprovider/weixin/weixin_mini.go index d99e19e15..28201e0f6 100644 --- a/business/auth2/authprovider/weixin/weixin_mini.go +++ b/business/auth2/authprovider/weixin/weixin_mini.go @@ -4,6 +4,7 @@ import ( "encoding/base64" "errors" + "git.rosy.net.cn/baseapi/platformapi/weixinapi" "git.rosy.net.cn/jx-callback/business/auth2" "git.rosy.net.cn/jx-callback/business/auth2/authprovider" "git.rosy.net.cn/jx-callback/globals" @@ -30,7 +31,7 @@ func init() { func (a *MiniAuther) VerifySecret(dummy, jsCode string) (authBindEx *auth2.AuthBindEx, err error) { globals.SugarLogger.Debugf("weixin mini VerifySecret jsCode:%s", jsCode) - sessionInfo, err := api.WeixinMiniAPI.SNSCode2Session(jsCode) + sessionInfo, err := ProxySNSCode2Session(jsCode) if err == nil { sessionKey := sessionInfo.SessionKey sessionInfo.SessionKey = "" @@ -48,9 +49,25 @@ func (a *MiniAuther) DecryptData(authInfo *auth2.AuthInfo, encryptedData, iv str return "", ErrAuthTypeShouldBeMini } sessionKey := authInfo.AuthBindInfo.UserData.(string) - decryptedData, err := api.WeixinMiniAPI.SNSDecodeMiniProgramData(encryptedData, sessionKey, iv) + decryptedData, err := ProxySNSDecodeMiniProgramData(encryptedData, sessionKey, iv) if err != nil { return "", err } return base64.StdEncoding.EncodeToString(decryptedData), nil } + +func ProxySNSCode2Session(jsCode string) (sessionInfo *weixinapi.SessionInfo, err error) { + sessionInfo, err = api.WeixinMiniAPI.SNSCode2Session(jsCode) + if err != nil && api.WeixinMiniAPI2 != nil { + sessionInfo, err = api.WeixinMiniAPI2.SNSCode2Session(jsCode) + } + return sessionInfo, err +} + +func ProxySNSDecodeMiniProgramData(encryptedData, sessionKey, iv string) (decryptedData []byte, err error) { + decryptedData, err = api.WeixinMiniAPI.SNSDecodeMiniProgramData(encryptedData, sessionKey, iv) + if err != nil && api.WeixinMiniAPI2 != nil { + decryptedData, err = api.WeixinMiniAPI2.SNSDecodeMiniProgramData(encryptedData, sessionKey, iv) + } + return decryptedData, err +} diff --git a/business/jxcallback/auth/weixin/weixin.go b/business/jxcallback/auth/weixin/weixin.go index d33fafba5..30e2db587 100644 --- a/business/jxcallback/auth/weixin/weixin.go +++ b/business/jxcallback/auth/weixin/weixin.go @@ -8,6 +8,7 @@ import ( "git.rosy.net.cn/baseapi/platformapi/weixinapi" "git.rosy.net.cn/baseapi/utils" + weixin2 "git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin" "git.rosy.net.cn/jx-callback/business/jxcallback/auth" "git.rosy.net.cn/jx-callback/business/jxcallback/auth/mobile" "git.rosy.net.cn/jx-callback/business/jxutils" @@ -185,7 +186,7 @@ func (a *AutherMiniProgram) BindWeiXin(ctx *jxcontext.Context, code, nickName st if loginInfo == nil || loginInfo.GetAuthType() != mobile.LoginType { return fmt.Errorf("调用AutherMiniProgram BindWeiXin时,必须以手机验证方式登录") } - sessionInfo, err := api.WeixinMiniAPI.SNSCode2Session(code) + sessionInfo, err := weixin2.ProxySNSCode2Session(code) if err != nil { return err } @@ -199,7 +200,7 @@ func (a *AutherMiniProgram) BindMiniProgram(ctx *jxcontext.Context, code string) if ctx.GetLoginType() != mobile.LoginType { return errors.New("登录方式应该为手机") } - sessionInfo, err := api.WeixinMiniAPI.SNSCode2Session(code) + sessionInfo, err := weixin2.ProxySNSCode2Session(code) if err != nil { return err } @@ -217,7 +218,7 @@ func (a *AutherMiniProgram) BindMiniProgram(ctx *jxcontext.Context, code string) func (a *AutherMiniProgram) Login(mobileNum, code string) (userID, LoginType string, err error) { globals.SugarLogger.Debugf("AutherMiniProgram Login mobileNum:%s, code:%s", mobileNum, code) - sessionInfo, err := api.WeixinMiniAPI.SNSCode2Session(code) + sessionInfo, err := weixin2.ProxySNSCode2Session(code) if err != nil { return "", "", err } @@ -246,7 +247,7 @@ func (a *AutherMiniProgram) DecryptData(ctx *jxcontext.Context, encryptedData, i if err = api.Cacher.GetAs(composeSessionKeyCacheKey(ctx.GetLoginInfo().GetAuthID()), &sessionKey); err != nil { return "", err } - decryptedData, err := api.WeixinMiniAPI.SNSDecodeMiniProgramData(encryptedData, sessionKey, iv) + decryptedData, err := weixin2.ProxySNSDecodeMiniProgramData(encryptedData, sessionKey, iv) if err != nil { return "", err } diff --git a/conf/app.conf b/conf/app.conf index c7c11db1f..7733c3985 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -140,6 +140,8 @@ dadaSourceID = "6660" weixinAppID = "wx2bb99eb5d2c9b82c" weixinSecret = "6bbbed1443cc062c20a015a64c07a531" +weixinMiniAppID2 = "wx08a5c2a8581414ff" +weixinMiniSecret2 = "e7ec67c86cbd4dfa531af7af7533cdc9" dbConnectStr = "root:WebServer@1@tcp(db1.int.jxc4.com:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true" @@ -302,6 +304,9 @@ dadaSourceID = "6660" weixinAppID = "wx2bb99eb5d2c9b82c" weixinSecret = "6bbbed1443cc062c20a015a64c07a531" +weixinMiniAppID2 = "wx08a5c2a8581414ff" +weixinMiniSecret2 = "e7ec67c86cbd4dfa531af7af7533cdc9" + getWeixinTokenURL = "http://www.jxc4.com/v2/sys/GetWXToken" dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true" diff --git a/globals/api/api.go b/globals/api/api.go index 2e87791b7..ccc235a44 100644 --- a/globals/api/api.go +++ b/globals/api/api.go @@ -27,15 +27,16 @@ import ( ) var ( - JdAPI *jdapi.API - ElmAPI *elmapi.API - EbaiAPI *ebaiapi.API - MtpsAPI *mtpsapi.API - DadaAPI *dadaapi.API - MtwmAPI *mtwmapi.API - WeixinAPI *weixinapi.API // 微信公众号 - WeixinMiniAPI *weixinapi.API // 小程序 - WeixinPageAPI *weixinapi.API // 用户微信扫码登录 + JdAPI *jdapi.API + ElmAPI *elmapi.API + EbaiAPI *ebaiapi.API + MtpsAPI *mtpsapi.API + DadaAPI *dadaapi.API + MtwmAPI *mtwmapi.API + WeixinAPI *weixinapi.API // 微信公众号 + WeixinMiniAPI *weixinapi.API // 小程序 + WeixinMiniAPI2 *weixinapi.API // 小程序2 + WeixinPageAPI *weixinapi.API // 用户微信扫码登录 AutonaviAPI *autonavi.API QiniuAPI *qbox.Mac @@ -124,6 +125,9 @@ func Init() { WeimobAPI = nil } WeixinMiniAPI = weixinapi.New(beego.AppConfig.String("weixinMiniAppID"), beego.AppConfig.String("weixinMiniSecret")) + if weixinMiniAppID2 := beego.AppConfig.String("weixinMiniAppID2"); weixinMiniAppID2 != "" { + WeixinMiniAPI2 = weixinapi.New(weixinMiniAppID2, beego.AppConfig.String("weixinMiniSecret2")) + } WeixinPageAPI = weixinapi.New(beego.AppConfig.String("weixinPageAppID"), beego.AppConfig.String("weixinPageSecret")) AutonaviAPI = autonavi.New(beego.AppConfig.String("autonaviKey"))