Przeglądaj źródła

优化小程序解密 (#262)

silenceper 6 lat temu
rodzic
commit
0e23fa3fee

+ 0 - 15
miniprogram/basic/basic.go

@@ -1,15 +0,0 @@
-package basic
-
-import "github.com/silenceper/wechat/v2/miniprogram/context"
-
-//Basic struct
-type Basic struct {
-	*context.Context
-}
-
-//NewBasic 实例
-func NewBasic(context *context.Context) *Basic {
-	basic := new(Basic)
-	basic.Context = context
-	return basic
-}

+ 24 - 34
miniprogram/basic/decrypt.go

@@ -1,4 +1,4 @@
-package basic
+package encryptor
 
 import (
 	"crypto/aes"
@@ -6,8 +6,23 @@ import (
 	"encoding/base64"
 	"encoding/json"
 	"errors"
+
+	"github.com/silenceper/wechat/v2/miniprogram/context"
 )
 
+//Encryptor struct
+type Encryptor struct {
+	*context.Context
+}
+
+//NewEncryptor 实例
+func NewEncryptor(context *context.Context) *Encryptor {
+	basic := new(Encryptor)
+	basic.Context = context
+	return basic
+}
+
+
 var (
 	// ErrAppIDNotMatch appid不匹配
 	ErrAppIDNotMatch = errors.New("app id not match")
@@ -19,8 +34,8 @@ var (
 	ErrInvalidPKCS7Padding = errors.New("invalid padding on input")
 )
 
-// UserInfo 用户信
-type UserInfo struct {
+// PlainData 用户信息/手机号信
+type PlainData struct {
 	OpenID    string `json:"openId"`
 	UnionID   string `json:"unionId"`
 	NickName  string `json:"nickName"`
@@ -30,18 +45,10 @@ type UserInfo struct {
 	Country   string `json:"country"`
 	AvatarURL string `json:"avatarUrl"`
 	Language  string `json:"language"`
-	Watermark struct {
-		Timestamp int64  `json:"timestamp"`
-		AppID     string `json:"appid"`
-	} `json:"watermark"`
-}
-
-// PhoneInfo 用户手机号
-type PhoneInfo struct {
 	PhoneNumber     string `json:"phoneNumber"`
 	PurePhoneNumber string `json:"purePhoneNumber"`
 	CountryCode     string `json:"countryCode"`
-	Watermark       struct {
+	Watermark struct {
 		Timestamp int64  `json:"timestamp"`
 		AppID     string `json:"appid"`
 	} `json:"watermark"`
@@ -96,35 +103,18 @@ func getCipherText(sessionKey, encryptedData, iv string) ([]byte, error) {
 }
 
 // Decrypt 解密数据
-func (basic *Basic) Decrypt(sessionKey, encryptedData, iv string) (*UserInfo, error) {
-	cipherText, err := getCipherText(sessionKey, encryptedData, iv)
-	if err != nil {
-		return nil, err
-	}
-	var userInfo UserInfo
-	err = json.Unmarshal(cipherText, &userInfo)
-	if err != nil {
-		return nil, err
-	}
-	if userInfo.Watermark.AppID != basic.AppID {
-		return nil, ErrAppIDNotMatch
-	}
-	return &userInfo, nil
-}
-
-// DecryptPhone 解密数据(手机)
-func (basic *Basic) DecryptPhone(sessionKey, encryptedData, iv string) (*PhoneInfo, error) {
+func (encryptor *Encryptor) Decrypt(sessionKey, encryptedData, iv string) (*PlainData, error) {
 	cipherText, err := getCipherText(sessionKey, encryptedData, iv)
 	if err != nil {
 		return nil, err
 	}
-	var phoneInfo PhoneInfo
-	err = json.Unmarshal(cipherText, &phoneInfo)
+	var plainData PlainData
+	err = json.Unmarshal(cipherText, &plainData)
 	if err != nil {
 		return nil, err
 	}
-	if phoneInfo.Watermark.AppID != basic.AppID {
+	if plainData.Watermark.AppID != encryptor.AppID {
 		return nil, ErrAppIDNotMatch
 	}
-	return &phoneInfo, nil
+	return &plainData, nil
 }

+ 4 - 4
miniprogram/miniprogram.go

@@ -4,7 +4,7 @@ import (
 	"github.com/silenceper/wechat/v2/credential"
 	"github.com/silenceper/wechat/v2/miniprogram/analysis"
 	"github.com/silenceper/wechat/v2/miniprogram/auth"
-	"github.com/silenceper/wechat/v2/miniprogram/basic"
+	"github.com/silenceper/wechat/v2/miniprogram/encryptor"
 	"github.com/silenceper/wechat/v2/miniprogram/config"
 	"github.com/silenceper/wechat/v2/miniprogram/context"
 	"github.com/silenceper/wechat/v2/miniprogram/qrcode"
@@ -36,9 +36,9 @@ func (miniProgram *MiniProgram) GetContext() *context.Context {
 	return miniProgram.ctx
 }
 
-// GetBasic  基础接口(小程序加解密)
-func (miniProgram *MiniProgram) GetBasic() *basic.Basic {
-	return basic.NewBasic(miniProgram.ctx)
+// GetEncryptor  小程序加解密
+func (miniProgram *MiniProgram) GetEncryptor() *encryptor.Encryptor {
+	return encryptor.NewEncryptor(miniProgram.ctx)
 }
 
 //GetAuth 登录/用户信息相关接口

+ 1 - 1
openplatform/miniprogram/basic/basic.go

@@ -48,5 +48,5 @@ func (basic *Basic) GetAccountBasicInfo() (*AccountBasicInfo, error) {
 
 //modify_domain设置服务器域名
 //TODO
-//func (basic *Basic) modifyDomain() {
+//func (encryptor *Basic) modifyDomain() {
 //}