同一个微信号,不同小程序的openid,又获取不到unionid?
发布于 6 年前 作者 lizeng 14184 次浏览 来自 问答

同一个微信号,用不同的邮箱申请了两个小程序,现在想让这两个小程序的云数据库互通

1.但是同一用户访问这两个小程序的openid不一样,查了一通,说这种情况下的unionid是一样的,但用"login"返回的unionid是空的

  1. event:
  2. userInfo: {appId"xxx"openId"xxx"}
  3. __proto__: Object
  4. openid:"xxx"
  5. unionid""

请问改如何获取unionid,或者这种情况下有没办法让同一用户的两个小程序openid相同或者互相绑定

2.用如下代码实现了两个小程序的数据库互通,但由于openid不同,却无法实现数据互通

1. A端(资源方)操作

创建一个云函数,名为 cloudbase_auth,将以下代码写入,同步

const cloud = require('wx-server-sdk')

cloud.init({

env: cloud.DYNAMIC_CURRENT_ENV 4

})

//云函数入口函数

exports.main = async (event, context) => {

const wxContext = cloud.getWXContext()

console.log(event)

console.log(wxContext)   // 跨账号调用时,由此拿到来源方小程序/公众号 AppID

console.log(wxContext.FROM_APPID)   // 跨账号调用时,由此拿到来源方小程序/公众号的用户 OpenID

console.log(wxContext.FROM_OPENID)   // 跨账号调用、且满足 unionid 获取条件时,由此拿到同主体下的用户 UnionID

console.log(wxContext.FROM_UNIONID)

return {

errCode: 0,

errMsg: '',

auth: JSON.stringify({

// 自定义安全规则

// 在前端访问资源方数据库、云函数等资源时,资源方可以通过

// 安全规则的 `auth.custom` 字段获取此对象的内容做校验,

// 像这个示例就是资源方可以在安全规则中通过 `auth.custom.x` 获取

})

}

}

2. B端(需求方)操作

创建一个云函数,用于请求A方资源,例如叫GetADB

将以下代码写入GetADB保存后同步,注意修改自己的配置信息

// 云函数入口文件

const cloud = require('wx-server-sdk')

// 云函数入口函数

exports.main = async (event, context) => { 

// 声明新的 cloud 实例

var c1 = new cloud.Cloud({

resourceAppid: '修改为A的AppID',     // 资源方环境 ID

resourceEnv: '修改为A的环境ID',

})

// 跨账号调用,必须等待 init 完成

// init 过程中,资源方小程序对应环境下的 cloudbase_auth 函数会被调用,并需返回协议字段(见下)来确认允许访问、并可自定义安全规则

await c1.init()

// 完成后正常使用资源方的已授权的云资源

return new Promise(async (resolve, reject) => {

//多数报错504002什么的,都是没写下面这段代码,或者查询的数据库不存在导致

const db = c1.database()

await db.collection('数据库名称').limit(1000).field({

id: true29

}).get()

.then(res => {

console.log('获取-A数据库-成功',res)

resolve(res.data)

}).catch(err => {

console.log('获取-A数据库-失败',err)

reject(err)

})

})

}

2 回复

同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。

俩小程序需要绑定到同一个开放平台

回到顶部