前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >无需unionId实现公众号和小程序用户互通

无需unionId实现公众号和小程序用户互通

作者头像
KEN DO EVERTHING
发布2021-09-02 15:27:18
3.9K3
发布2021-09-02 15:27:18
举报
文章被收录于专栏:KEN DO EVERTHINGKEN DO EVERTHING

点击上方“KEN DO EVERTHING”,设为星标

每天进步一丢丢,连接梦与想

前话

Hi~ o( ̄▽ ̄)ブ, 我偷偷回来了,你还在吗?最近在搞公众号和小程序的开发,需要进行公众号和小程序的用户互通。网上搜、问人,都说需要公众平台绑定公众号和小程序,拿到unionId才能互通,但根据我自己的实践(瞎搞),发现无需unionId就能实现互通。

代码语言/框架: 小程序用的uniapp,后端java(Wxjava公众号框架)

前提条件

公众号和小程序相互绑定(两个端的后台需要做对应的绑定操作)

技术思路

1.使用小程序web-view组件拉起公众号授权页面进行授权(静默授权,无需用户同意) 2.授权页跳转获取openId的页面(公众号后端页面,自己写的),获取到后作为url参数跳回小程序 3.跳回来小程序,可以从参数中获到该用户公众号openId了 4.小程序中通过登录接口,获取该用户小程序的openId 5.都获取到了,你可以传回后端,进行绑定操作,用其中一个openId作为唯一key或者自定义唯一key都可以

解决方案步骤

1.新建一个web-view页面(小程序端)

使用web-view组件跳转公众号授权页面(所以需要相互绑定,否则无法打开)

代码语言:javascript
复制
<template>
<web-view src="https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxxx&redirect_uri=https://你的公众号后端域名/获取openid的页面&response_type=code&scope=snsapi_base&state=123#wechat_redirect"></web-view>
</template>
代码语言:javascript
复制

2.用accessToken获取openId(公众号后端)

这里用的WxJava微信开放框架https://github.com/Wechat-Group/WxJava 通过获取openid的页面传回来code,获取accessToken。用accessToken获取openId

代码语言:javascript
复制
  @RequestMapping("/getOpenId")
    public String getOpenId(@PathVariable String appid, @RequestParam String code, ModelMap map) {
        String openId= "";
        try {
            WxOAuth2AccessToken accessToken = wxService.getOAuth2Service().getAccessToken(code);
            openId = accessToken.getOpenId();
            log.info("小程序网页授权公众号,获取openId:{}", openId);
        } catch (WxErrorException e) {
            e.printStackTrace();
        }

        return openId;
    }
代码语言:javascript
复制


3.获取openId的页面(公众号后端)

这里单纯用了html和js,引入weixin的js,用于跳回小程序

代码语言:javascript
复制
代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

</body>
</html>
<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>
<script>
    //获取url上的参数
    function getParameterByName(name, url) {
        if(!url) url = window.location.href;
        name = name.replace(/[\[\]]/g, "\\$&");
        //匹配所有符合条件的,并取最后一个
        var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)",'g');
        var results = url.match(regex);
        var tempResults= results!=null && results[results.length-1]!=undefined?results[results.length-1]:'';

        var finalResults=regex.exec(tempResults);
        if(!finalResults) return "";
        if(!finalResults[2]) return '';
        return decodeURIComponent(finalResults[2].replace(/\+/g, " "));
    }

    //获取openId
    function getOpenId(){
        var code = getParameterByName("code")
        console.log("wx public code{}",code)
        var httpRequest =new XMLHttpRequest();
        var url = "https://你的公众号后端域名/wx/redirect/你的公众号appid/getOpenId?code="+code;
      httpRequest.open('GET',url,true);name=test&nameone=testone"
        httpRequest.send();

        var res;
        httpRequest.onreadystatechange =function () {
            if (httpRequest.readyState == 4 && httpRequest.status == 200) {
                var openId = httpRequest.responseText;
                if(openId){
                    console.log("openId{}",openId)
        //跳回小程序首页,把公众号的openId带过去
                    wx.miniProgram.redirectTo({url: "/pages/index/index?mpOpenid="+openId})
                }else {
                    /**公众号授权方法*/
                    var uri = window.location.href;
                    window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=你的公众号appid&redirect_uri="+获取openId的后端页面+"&response_type=code&scope=snsapi_base&state=123#wechat_redirect";
                }
            }
        };
    }

   getOpenId();
</script>
代码语言:javascript
复制

4.小程序中获取跳转参数中openId(小程序端)

首页加载是获取openId

代码语言:javascript
复制
onLoad(e) {
  if (e.mpOpenid) {
         
            uni.setStorageSync('mpOpenid', e.mpOpenid)
            //下面就是自己的小程序获取openid和传到后端存储了
         }
}

需要注意的点

公众号
  • 后台小程序管理,关联小程序
  • 网页授权跳转页(获取openId页面)的域名需要设置一下
  • 设置IP白名单(获取openId页面服务器公网IP)
小程序
  • 正式环境需要https域名(ssl证书可以在华为云申请到免费的,测试环境可以用http)
  • 后台关联设置,关联公众号

THANDKS

- End -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 KEN DO EVERTHING 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前提条件
  • 技术思路
  • 解决方案步骤
    • 1.新建一个web-view页面(小程序端)
      • 2.用accessToken获取openId(公众号后端)
        • 3.获取openId的页面(公众号后端)
        • 需要注意的点
          • 公众号
            • 小程序
            相关产品与服务
            访问管理
            访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档