1.很多人都觉得小程序用起来比较方便,并且小程序项目的运行速度要比嵌在公众号中的项目运行速度更快,刚好大家有这个需求,微信也有这个解决办法,大家都知道不管小程序还是公众号用户都有自己的唯一标识,那就是openID,但是其实用户还有一个标识就是unionId,这个标识的作用就是做关联的,小程序和公众号的用户是可以通过unionId来同步一些用户数据的,所以呢,具体做法如下:
2.要申请自己的一个微信开放平台,并且公众号和小程序要关联起来,这个关联很好配置,在微信公众平台进行配置就好了,同一个开放平台下的用户unionId都是相同的,一个开放平台下面可以添加多个微信的产品,比如我们公司一个微信开放平台下放了两个公众号两个小程序,就是说我们这四个产品相同用户的unionId是相同的。原理大概就是这样的,下面我就上代码了,怎么获取小程序用户和公众号用户的unionId,由于工作原因,公众号我是用java获取的,小程序我就用go语言获取的,但是只要原理懂了就简单了很多
@GetMapping(value"/current/unionId")publicResultunionId(){Useruser(User)HttpContextUtils.getAttribute(SessionConstant.USER);if(StringUtils.isBlank(user.getUnionId())){AccessTokenaccessTokenaccessTokenService.currentToken();RestTemplaterestTemplatenewRestTemplate();StringhttpUnionIDUrl"https://api.weixin.qq.com/cgi-bin/user/info?access_token"+accessToken.getAccessToken()+"openid"+user.getWeixinOpenId();ResponseEntityStringresponse1restTemplate.getForEntity(httpUnionIDUrl,String.class);if(200!response1.getStatusCodeValue()){LOGGER.error("请求失败,获取UnionId失败");returnResult.fail("请求失败,获取UnionId失败");}Stringsresponse1.getBody();JSONObjectbodyJSONObject.fromObject(s);if((Integer)body.get("errcode")!null){LOGGER.error("请求成功,但是获取UnionId失败,错误码:"+body.get("errcode"));returnResult.fail("请求成功,但是获取UnionId失败,错误码:"+body.get("errcode"));}StringunionID(String)body.get("unionid");IntegernumuserService.saveUnionId(user.getId(),unionID);}returnResult.success();}3.获取公众号的unionId需要两样东西,accessToken和用户的openId。
4.我的代码里面已经把用户的数据存在了session中,我直接拿出来就用了,token的话是封装了一个获取数据库中token的service,直接调就好了。
funcUserWXOpenId(whttp.ResponseWriter,r*http.Request){//配置请求头w.Header().Set("Access-Control-Allow-Origin","*")//连接数据库db,err:sql.Open(common.StoreType,common.DataSourceName)methods.CheckErr(err)deferdb.Close();//获取code值r.ParseForm()//用户访问时的codecode:r.Form.Get("code")glog.Infof("code:",code)//调用方法获取openID,unionIdifopenID,err:methods.WxOpenId(code);err!nil{fmt.Println(err)os.Exit(1)}elseifopenID.OpenId""{glog.Infof("无效的openid,openid为空")}else{glog.Infof("openID可用,存库并返回给前端session_key")open_id:openID.OpenIdsession_key:openID.Session_keyunion_id:openID.UnionIdfmt.Println(open_id)fmt.Println(session_key)fmt.Println(union_id)}}funcWxOpenId(codestring)(openId*model.OpenID,errerror){//获取openID的URLvarURLcommon.BaseURL+"/sns/jscode2session?grant_typeauthorization_codeappid"+common.AppId+"secret"+common.AppSecret+"js_code"+codevar_b[]byteifresponse,err:http.Get(URL);err!nil{returnopenId,err}else{if_b,errioutil.ReadAll(response.Body);err!nil{returnopenId,err}}openIdmodel.OpenID{}errjson.Unmarshal(_b,openId)//JSONtoStructglog.Infof("openID",openId.OpenId)glog.Infof("Session_key",openId.Session_key)glog.Infof("union_id",openId.UnionId)returnopenId,err}5.这里就是go语言获取小程序unionId的代码了,用小程序的appId和秘钥还有前端传来的code做参数,调取微信的接口,事实上这就是获取微信小程序openId的代码,微信小程序只要放在开放平台上,小程序和对应的公众号进行关联,并且用户关注了相对应的公众号,符合这三点就可以获取到用户的unionId,如果有任何一点不符合,都获取不到。
6.如果不能达到以上三点,获取小程序的unionId还有一种方式,就是通过AES解密,另外一种方式相对来说就比较复杂了,所以我没有采用另外的一种方式。
公众号和小程序用户关联-怎么把公众号和小程序绑定-微信公众号如何绑定小程序
浏览量:5122
时间:
来源:Cc__xac__xac
版权声明
即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。
最新资讯
-

即速应用,赋能企业玩转微信小程序智慧经营
作为国内领军的智慧商业经营服务商,即速应用始终秉承“让每个企业都拥有自己的智慧店铺”的愿景,持续赋能更多企业玩转智慧经营。即速应用旗下拥有“小程序搭建工具-即速应用”、“私域流量专家-即客云”等产品,帮助商家打通互联网全生态营销闭环。 -

即客云2.0重磅更新,让微信小程序运营更简单!
即客云作为一款基于企业微信的第三方工具,现从多维度提供超过30种功能,自上线以来,已服务多家企业,受到一致好评。近期,我们根据客户反馈和市场调研正式推出升级版 即客云2.0!更新了私域运营SOP,群日历功能,批量拓客,客户雷达,消息推送,个人欢迎语,帮助企业更好运用企业微信;同时提升了社群运营工作标准化,提升运营效率,帮助企业实现客户增长,玩转私域流量。 -

零代码 + AI 双轮驱动|即速应用解锁人工智能小程序开发新范式
无需代码、无需 AI 算法功底,普通人也能快速搭建智能小程序。即速应用将人工智能与零代码开发深度融合,推出 AI 智能生成能力,用户通过自然语言描述需求,AI 自动生成小程序页面、功能模块与后台配置,覆盖商城、预约、同城、社区团购等全场景。平台内置 AI 智能推荐、智能客服、用户画像分析等能力,一键对接微信生态,打通视频号、企业微信、短信跳转,帮企业快速落地 AI 应用,抢占智慧经营先机,让每家企业都拥有 AI 驱动的智慧店铺。










