我的微信服务号有菜单项点击后跳转到关联的小程序的指定页面,下面服务号后台创建菜单的代码
我想要在用户点击 “新用户注册” 菜单项时获取用户的 openId 并作为参数传递给小程序页面可以实现吗?
是不是需要先跳转到H5页面,获取到 openId 后再跳转到小程序页面才能行得通?我不想要这个过程,想要用户点击菜单项后直接跳转到小程序页面可以实现吗?
我的微信服务号有菜单项点击后跳转到关联的小程序的指定页面,下面服务号后台创建菜单的代码
我想要在用户点击 “新用户注册” 菜单项时获取用户的 openId 并作为参数传递给小程序页面可以实现吗?
是不是需要先跳转到H5页面,获取到 openId 后再跳转到小程序页面才能行得通?我不想要这个过程,想要用户点击菜单项后直接跳转到小程序页面可以实现吗?
其实也可以在小程序的webview中获取公众号的openid
h5在webview中获取到公众号openid后
使用wx.miniProgram.postMessage发送给小程序
之后使用wx.miniProgram.navigateTo跳转的页面即可接收到
服务号菜单的点击之后是直接跳的,微信不会在这个过程自动给用户的 openId,要么用中间页或者小程序里处理
中间页: 服务号菜单 -> H5页面(获取openId) -> 小程序页面(带参数)
先去服务号注册:
new ViewButtonMini(
name: "新用户注册",
DevMaterial.VISITOR_MINI.APPID,
pagepath: "pages/register/register"
);
小程序(pages/register/register)
Page({
data: {
openId: '',
userInfo: null,
loading: true
},
onLoad: function() {
this.getUserOpenId();
},
getUserOpenId: function() {
wx.showLoading({
title: '加载中...',
});
wx.login({
success: (res) => {
if (res.code) {
// 发送 res.code 到后台换取 openId
wx.request({
url: 'https://your-api-domain/api/wx/getOpenId',
method: 'POST',
data: {
code: res.code
},
success: (response) => {
const { openId } = response.data;
this.setData({
openId,
loading: false
});
this.checkUserRegistration(openId);
},
fail: (err) => {
console.error('获取openId失败:', err);
wx.showToast({
title: '网络错误,请重试',
icon: 'none'
});
},
complete: () => {
wx.hideLoading();
}
});
}
},
fail: (err) => {
console.error('wx.login 失败:', err);
wx.showToast({
title: '登录失败,请重试',
icon: 'none'
});
}
});
},
checkUserRegistration: function(openId) {
wx.request({
url: 'https://your-api-domain/api/user/check',
method: 'POST',
data: { openId },
success: (res) => {
if (res.data.isRegistered) {
// 已注册用户跳转到首页
wx.switchTab({
url: '/pages/index/index'
});
}
// 未注册则停留在注册页面
}
});
}
});
WXML :
<view class="register-container">
<block wx:if="{{loading}}">
<view class="loading">加载中...</view>
</block>
<block wx:else>
<form bindsubmit="handleSubmit">
<view class="form-item">
<text class="label">手机号码</text>
<input
type="number"
name="phone"
placeholder="请输入手机号码"
maxlength="11"
/>
</view>
<view class="form-item">
<text class="label">姓名</text>
<input
type="text"
name="name"
placeholder="请输入姓名"
/>
</view>
<button
class="submit-btn"
type="primary"
form-type="submit"
>提交注册</button>
</form>
</block>
</view>
1 回答4.8k 阅读✓ 已解决
7 回答924 阅读
2 回答3.8k 阅读
2 回答2.9k 阅读
2 回答2.1k 阅读
2 回答902 阅读✓ 已解决
1 回答1.7k 阅读
所以为啥不直接在小程序页面里面直接获取用户的
OpenID
。要通过微信公众号的H5页面去获取,然后再跳转到小程序。直接点击菜单跳转到小程序,然后小程序直接获取用户的
OpenID
不就行了吗??另外,公众号的
OpenId
和小程序的OpenId
也不通用啊。