WalteE
WalteE
  • 发布:2022-11-09 16:01
  • 更新:2022-11-09 16:23
  • 阅读:253

【报Bug】一键登录调用云函数报错SYS_ERR

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 13.0 (22A380)

HBuilderX类型: 正式

HBuilderX版本号: 3.6.4

手机系统: iOS

手机系统版本号: iOS 15

手机厂商: 苹果

手机机型: iphone 12

页面类型: nvue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

app端调用

const univerifyManager = uni.getUniverifyManager()  
				univerifyManager.preLogin()  
				univerifyManager.login({  
					univerifyStyle: {  
						"fullScreen": false,  
					},  
					success(res) {  
						console.log('login success', res)  
						uniCloud.callFunction({  
							name: 'getPhoneNumber', // 你的云函数名称  
							data: {  
								access_token: res.authResult.access_token, // 客户端一键登录接口返回的access_token  
								openid: res.authResult.openid // 客户端一键登录接口返回的openid  
							}  
						}).then(res => {  
							console.log(res, 'phone')  
							uni.showToast({  
								title: '成功' + JSON.stringify(res),  
								icon: 'none'  
							})  
							uni.closeAuthView()  
							// 登录成功,可以关闭一键登录授权界面了  
						}).catch(err => {  
							uni.closeAuthView()  
							uni.showToast({  
								title: JSON.stringify(err) || '错误',  
								icon: 'none'  
							})  
							console.log(err, 'error')  
							// 处理错误  
						})  
					},  
					fail(res) { // 登录失败  
						uni.closeAuthView()  
						console.log(res.errCode, 'errCode')  
						console.log(res.errMsg, 'errMsg')  
					}  
				})

云函数
index.js

'use strict';  
exports.main = async (event, context) => {  
	// event里包含着客户端提交的参数  
	try {  
		const res = await uniCloud.getPhoneNumber({  
			appid: '__UNI__5058F31', // 替换成自己开通一键登录的应用的DCloud appid  
			provider: 'univerify',  
			apiKey: 'xxx', // 在开发者中心开通服务并获取apiKey  
			apiSecret: 'xxx', // 在开发者中心开通服务并获取apiSecret  
			access_token: event.access_token,  
			openid: event.openid  
		})  
  
		console.log(res); // res里包含手机号  
		// 执行用户信息入库等操作,正常情况下不要把完整手机号返回给前端  
		// 如果数据库在uniCloud上,可以直接入库  
		// 如果数据库不在uniCloud上,可以通过 uniCloud.httpclient API,将手机号通过http方式传递给其他服务器的接口,详见:https://uniapp.dcloud.net.cn/uniCloud/cf-functions?id=httpclient  
		return {  
			code: 0,  
			message: '获取手机号成功',  
			data: res  
		}  
	} catch(err){  
		return {  
			code: -1,  
			message: 'uniCloud.getPhoneNumber错误',  
			err  
		}  
	}  
  
}  

package.json

{  
  "name": "getPhoneNumber",  
  "dependencies": {},  
  "extensions": {  
    "uni-cloud-verify": {}  
  }  
}

操作步骤:

和代码示例一致即可重现。

预期结果:

预期结果应该能获取到手机号。

实际结果:

无法获取在app端就抛出了错误。没有调用到云端函数。

zip和安装包无法上传。安装包蒲公英连接。
安卓包:
https://www.pgyer.com/99da3511068d962548cbb0a90e80b7ee
ios包:
https://www.pgyer.com/2dfc61a27f6fbfe47ea18b9fdb48557c

bug描述:

app端调用uni.login,参数provider为univerify。能成功获取到access_token和openid。
在调用uniCloud.callFunction代码进入了catch。报错如下:

B: [getPhoneNumber]: request:ok    
    at Function.complete (http://172.20.10.8:8091/source/file:///var/mobile/Containers/Data/Application/B846AD79-B989-4A33-BE12-039B918D24AD/Documents/Pandora/apps/__UNI__5058F31/www/pages/login/index.js:1079:21)    
    at     
    at Object.So._e [as callback] ()    
    at $o ()    
    at Ji ()    
    at resolve ()    
    at ln ()    
    at of.consume ()    
    at Lc.callback ()    
    at eN ()

一、云端函数以及上传并且部署。点击上传并运行可以调用成功。
二、一键登录添加了应用并且审核通过。
三、调试时HBuilderX选择的是云端云函数。通过云打包后把安装包安装到手机也是一样的错误。
四、云函数管理后台没有产生日志。只有手动上传并运行的日志。

图1是本地连接手机通过自定义底座调试。图二为云打包后的app安装到手机alert的报错,也是进入到了uniCloud.callFunction的catch

2022-11-09 16:01 负责人:无 分享
已邀请:

要回复问题请先登录注册