解决的问题
由于小程序和公众号的统一推送消息接口被微信官方收回, 导致即使用户在开放平台中绑定了公众号和小程序为同一主体也不能通过直接调用小程序用户的openid来给用户发送公众号的消息,而必须将用户的公众号与小程序和unionId同时保存在数据库中才可以进行此操作;
本帖将通过用户手动在小程序中操作绑定公众号来直接将小程序与公众号的openid相关联.
前置条件
使用的小程序与公众号必须相互绑定, 且已经设置好了公众号的[网页授权域名]为当前你的开发后台地址.
本示例再uniapp中完成.
步骤
流程逻辑
已有页面中进行用户的登录操作, 并获取当前用户的小程序openid
此处不赘述(因为小程序的登录操作一般都已经有了)
在已有页面中增加跳转按钮,并将小程序的openid放在跳转参数中
<view class="myfun right-jt1">
<navigator :url="'./bindWechat?openid=' + 用户小程序openid" hover-class="none">
<image src="../../static/img/me10.png"></image>
<text class="txt fs28 color3">绑定公众号</text>
</navigator>
</view>
开发授权页面
<template>
<view>
<web-view :src="src"></web-view>
</view>
</template>
<script>
export default {
data() {
return {
src: '',
};
},
onLoad(options) {
console.log(options.openid);//微信小程序的openid
if(!options.openid){
//跳转登录
uni.navigateTo({
url: './my'
});
}else{
//将小程序的openid拼接上
let redirect_url = 'https://你的后台地址/path/' + options.openid;
this.src = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=微信公众号APPID&redirect_uri=' + encodeURI(redirect_url) + '&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect';
//下方的跳转可以开发这自行修改,加个延时啥的
//我这里是显示了下白页,对用户不太友好,实际上方的跳转地址可以设置为跳转到一个html页面,来告诉用户绑定成功
// uni.navigateTo({
// url: './my'
// });
}
},
}
</script>
<style lang="scss">
</style>
台接收数据
我这里只是示例,正常可以在绑定完成后跳转一个后台的html页面用来展示绑定结果.然后在html增加按钮点击跳转回小程序自己的页面
@RequestMapping("/bindWechatAndMiniprogram/{miniprogramOpenId}")
@ResponseBody
public String bindWechatAndMiniprogram(@PathVariable String miniprogramOpenId, @RequestParam String code){
//通过code获取公众号access_token和公众号openid
//通过code获取access_token再获取用户openid的方法这里就不写了,直接能查到
//通过查询小程序数据库中的openid, 将对应公众号的openid存储到数据库中
return "";
}
需要注意的是,回调跳转的地址必须为https的域名, 本地开发如果不方便可以自行修改下windows的HOSTS文件进行映射