1、访问微信登录地址,通过扫码登录微信小程序后台
地址信息:https://mp.weixin.qq.com/cgi-bin/loginpage
2、通过小程序后台数据拿到ID与密钥
打开左侧菜单 开发与服务--->>开发管理--->>开发者ID
如果是第一次登录小程序后台没生成过密钥是没有的,需要生成
3、通过密钥与ID访问接口获取access_token(获取接口调用凭证)
接口地址:https://api.weixin.qq.com/cgi-bin/token
4、获取openid
请求地址
返回的 JSON 数据包
4.1获取临时登录凭证
wx.login({
success: (res) => {
console.log('wx.login success:', res);
let code = res.code;
console.log('Code:', code);
};
});
5、openid获取成功示例
6、发送订阅消息
POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN
1、需带上access_token(参考第三步)
2、配置openid与模板参数
touser字段中需要带上openid
template_id使用小程序后台申请的模板id
如果不出意外的话就会出现以下报错:
7、解决模板报错问题
查看微信开放社区得到的答案是用户没有订阅消息
接下来找到问题了,那就着手来解决
Page({
data: {
userInfo: null,
},
getUserInfo() {
wx.getUserInfo({
success: (res) => {
this.setData({
userInfo: res.userInfo
});
},
fail: (err) => {
console.error('getUserInfo fail:', err);
if (err.errMsg === 'getUserInfo:fail auth deny') {
wx.showModal({
title: '授权提示',
content: '您拒绝了授权,请重新授权以继续使用该功能。',
success: (res) => {
if (res.confirm) {
this.getUserInfo();
} else if (res.cancel) {
wx.showToast({
title: '授权失败',
icon: 'none'
});
}
}
});
}
}
});
},
getOpenid() {
wx.login({
success: (res) => {
console.log('wx.login success:', res);
let code = res.code;
console.log('Code:', code);
const mockResponse = {
data: {
openid: 'mock_openid_123456'
}
};
const openid = mockResponse.data.openid;
wx.setStorageSync('openid', openid);
this.setData({
openid: "获取到的openid:" + openid
});
},
fail: (err) => {
console.error('wx.login fail:', err);
}
});
},
subscribeMessage() {
if (this.data.isSubscribed) {
wx.showToast({
title: '您已订阅消息',
icon: 'success'
});
return;
}
const templateId = '配置小程序后台获取的模板id';
wx.requestSubscribeMessage({
tmplIds: [templateId],
success: (res) => {
console.log('订阅成功:', res);
if (res[templateId] === 'accept') {
wx.showToast({
title: '订阅成功',
icon: 'success'
});
wx.setStorageSync('isSubscribed', true);
this.setData({
isSubscribed: true
});
} else if (res[templateId] === 'reject') {
wx.showToast({
title: '用户拒绝订阅',
icon: 'none'
});
} else if (res[templateId] === 'ban') {
wx.showToast({
title: '因禁用订阅功能无法完成订阅',
icon: 'none'
});
}
},
fail: (err) => {
console.error('订阅失败:', err);
wx.showToast({
title: '订阅失败',
icon: 'none'
});
}
});
}
})
以上代码的作用就是先获取用户信息,然后获到wx.login里面的code后再去订阅消息
这时候再去发请求就没有问题了,因为是一次性模板,必须每次都要手动去订阅才行
微信端