royalrick / weapp

微信小程序服务端 SDK (for Golang)
https://pkg.go.dev/github.com/medivhzhan/weapp/v3
Apache License 2.0
1.47k stars 281 forks source link

解密手机号报错 #46

Closed LOFTERART closed 4 years ago

LOFTERART commented 4 years ago

每次小程序用户提交解密数据后 后台解析报这个错 每次 'x1a'这个地方会有变化. invalid character '\x1a' looking for beginning of value

royalrick commented 4 years ago

可以附上代码吗?

LOFTERART commented 4 years ago

可以附上代码吗?

fmt.Println(item.SessionKey, "-----") fmt.Println(item.EncryptedData) fmt.Println(item.Iv) fmt.Println(item.UserID) //1查找user u := model.User{ BaseInfo: model.BaseInfo{ ID: item.UserID, }, } //2解密用户手机号信息 res, err := weapp.DecryptMobile(item.SessionKey, item.EncryptedData, item.Iv) fmt.Println(res, err, "-----wxinfo---") if err != nil { return &u, err }

启动通过小程序的 code获取的ssk ,也都是有效的 wx.checksession 也是通过的 ;

royalrick commented 4 years ago

好的,空了我核对下。记得一定是先完成登陆流程然后再获取的电话加密数据才有效哦;

LOFTERART commented 4 years ago

好的,空了我核对下。记得一定是先完成登陆流程然后再获取的电话加密数据才有效哦; 是的,是这样操作的,小程序启动通过code 获取ssk 前端存入缓存 获取手机号的时候从缓存读取得ssk

LOFTERART commented 4 years ago

好的,空了我核对下。记得一定是先完成登陆流程然后再获取的电话加密数据才有效哦; // decryptUserData 解密用户数据这个函数先base64编码在base64解码 我那个错误能解决,接下来的cbcDecrypt(CBC解密数据)一直走到这个错if len(ciphertext) % size != 0 { return nil, errors.New("ciphertext is not a multiple of the block size") }

编码 base64.StdEncoding.EncodeToString

LOFTERART commented 4 years ago

每次小程序用户提交解密数据后 后台解析报这个错 每次 'x1a'这个地方会有变化. invalid character '\x1a' looking for beginning of value

换 了个小程序可以获取到手机号信息,很奇怪了 ,能够获取到的是之前正式发布过,新申请的这个小程序获取不到信息 报这个错一直

LOFTERART commented 4 years ago

找到问题了 数据库垃圾数据造成的 清空数据库 都可以获取到数据了 可以close到问题了 谢谢啦

royalrick commented 4 years ago

OK👌