收藏
回答

nodejs版本解密手机号报错?查阅不少资料已经按照不少答案改了一下午还是不对。

刚刚受一位大哥指导,重新修改了代码,但是还是解密的时候报错。以下是更新后的代码

在登录页面中的onLoad中:

onLoad() {
			let _this = this
			uni.login({
				success(res) {
					if (res.code) {
						uniCloud.callFunction({
							name: 'sys_getSessionKey',
							data: {js_code: res.code},
							success(res) {
								this.session_key = res.result.session_key
							}
						})
					}
				}
			})
		},

在云函数sys_getSessionKey通过js_code、appId、appSecret已经获取到了sessionKey。(这里就不展示代码了,会提示泄露隐私)

然后在获取手机号的时候button上@getphonenumber="toGetPhone"

 在toGetPhone方法中:

toGetPhone(e) {
				let _this = this
				if (e.detail.errMsg == "getPhoneNumber:fail user deny") {
					return uni.$u.toast('您已经取消授权')
				} else {
					uniCloud.callFunction({
						name: 'gr_quickLogin',
						data: {
							code: e.detail.code,
							encryptedData: e.detail.encryptedData,
							iv: e.detail.iv,
							sessionKey: _this.session_key
						},
						success(res) {
							console.log(res)
						}
					})
				}
			},

在gr_quickLogin云函数中:

'use strict';
exports.main = async (event, context) => {
	const WXBizDataCrypt = require('./WXBizDataCrypt.js')
	var appId = "wx**************54"
	var sessionKey = event.sessionKey
	var encryptedData = event.encryptedData
	var iv = event.iv
	var pc = new WXBizDataCrypt(appId, sessionKey)
	var data = pc.decryptData(encryptedData , iv)
	console.log('解密后 data: ', data)
	//返回数据给客户端
	return data
};

其中WXBizDataCrypt.js使用的是官方提供的js

最后还是报错:

17:00:34.307 [本地调试]Error: Illegal Buffer
17:00:34.308 [本地调试]    at global.__tempModuleExports.WXBizDataCrypt.decryptData (/Users/mengxiandong/Documents/HBuilderProjects/gr_ski/uniCloud-alipay/cloudfunctions/gr_quickLogin/WXBizDataCrypt.js:25:11)
17:00:34.308 [本地调试]    at global.__tempModuleExports.exports.main (/Users/mengxiandong/Documents/HBuilderProjects/gr_ski/uniCloud-alipay/cloudfunctions/gr_quickLogin/index.js:9:16)
17:00:34.308 [本地调试]    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

实在不知道为啥了,已经翻页了一下午的文档,看了各种案例。(前提是之前用java的后端没问题,最近想做迁移到uniapp云开发上,这块一直报错不知道为啥)

最后一次编辑于  09-27
回答关注问题邀请回答
收藏

1 个回答

  • จุ๊บ
    จุ๊บ
    09-27
    放弃吧,正式版 前端不能请求 api.weixin.qq.com 域名,只能服务端请求
    


    09-27
    有用
    回复 5
    • 东东是个小菜鸡
      东东是个小菜鸡
      09-27
      沃日。。。那这个uniapp的架构没法一键获取手机号了么.. 应该有解决方法吧  我实在懵逼
      09-27
      回复
    • จุ๊บ
      จุ๊บ
      09-27回复东东是个小菜鸡
      可以啊,uniapp 获取手机号返回code,你把code 通过 wx.Request 传给服务端就行了啊
      09-27
      回复
    • 东东是个小菜鸡
      东东是个小菜鸡
      09-27回复จุ๊บ
      哦哦哦 我这块放在云函数里么?
      09-27
      回复
    • จุ๊บ
      จุ๊บ
      09-27回复东东是个小菜鸡
      你用云开发的话,需要有获取手机号的云函数。不能用api的方式
      09-27
      回复
    • 东东是个小菜鸡
      东东是个小菜鸡
      09-27回复จุ๊บ
      我刚刚已经把onload的方式改成了云函数的方式并调用成功了。目前已经收到了密文,解密目前也在云函数里,但是还是调用的时候报错
      09-27
      回复
登录 后发表内容