微信小程序> 公众号和小程序用户关联-怎么把公众号和小程序绑定-微信公众号如何绑定小程序

公众号和小程序用户关联-怎么把公众号和小程序绑定-微信公众号如何绑定小程序

浏览量:4909 时间: 来源:Cc__xac__xac
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解密,另外一种方式相对来说就比较复杂了,所以我没有采用另外的一种方式。

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎