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解密,另外一种方式相对来说就比较复杂了,所以我没有采用另外的一种方式。
公众号和小程序用户关联-怎么把公众号和小程序绑定-微信公众号如何绑定小程序
浏览量:4909
时间:
来源:Cc__xac__xac
版权声明
即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

最新资讯
-
抖音再现本地生活服务,咫尺同城圈商业变现新通道
短视频成为本地生活探店网红营销变现引流的新阵地,每一位网红都渴望在短视频内“一夜爆红”。即速应用团队对多商家小程序进行升级,打造了咫尺同城圈:“同城探店营销助手”,不仅完善商家营销技巧,还助力探店网红玩转本地生活服务。 -
抖音再现本地生活服务,咫尺同城圈商业变现新通道
短视频成为本地生活探店网红营销变现引流的新阵地,每一位网红都渴望在短视频内“一夜爆红”。即速应用团队对多商家小程序进行升级,打造了咫尺同城圈:“同城探店营销助手”,不仅完善商家营销技巧,还助力探店网红玩转本地生活服务。 -
阿坝小程序代理
阿坝藏族羌族小程序代理公司有哪些?阿坝藏族羌族小程序代理平台哪个好?阿坝藏族羌族小程序代理商怎么收费,代理政策如何?下面就让即速应用产品经理jisuapp.cn来告诉你吧!