微信公众号开发之订阅号如何获取用户信息(一)

最近在做微信的公众号的开发。之前是在一个认证过的微信服务号上开发一些相应的功能。

比如说 对认证过的微信服务好进行 自定义菜单的开发,模板消息的回复以及关键词回复的功能。

但是目前新接了这样一个需求:要为一个微信的订阅号做一个类似于推广的活动,这样就需要获取登录这个活动的用户的信息,从而判断该用户有没有关注过改订阅号之类的功能。这样就需要让该微信订阅号获取到该用户的个人信息。

这个功能其实我们已经在微信的服务号上实现了,这里来回顾一下具体是如何实现的。

我们先来看微信公众号开发的文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 之微信网页授权章节。

如果我们要在微信中打开一个第三方的网页,公众号可以通过微信网页授权机制,来获取用户的基本信息,进而实现业务逻辑。这是文档中的原话。通俗的讲,微信也可以认为是一个浏览器,我们发给某个人一个链接,一点这个链接,微信会打开相关的页面。但是如何让微信知道是哪个用户打开了这个页面呢,这样就需要获取到一个用户的信息,当然及时微信获取了用户的信息,也不是所有的信息都能获取到,仅仅能获取到用户的昵称,所在城市,性别等信息,获取不到微信号的,当然是可以获取一个openid,也就是微信号的一个编码,通过openid来区分用户。

我们再来看看文档,文档中写到,微信公众号请求用户网页授权之前,得先获取网页授权的接口,也就是说需要到开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。

1.需要获取该接口权限

2.需要填写相关域名。

然后用户访问的链接url需要按照微信给的格式进行链接,也就是说你转发给别人的链接或者分享的二维码对应的链接需要按照微信的格式:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect


其中appId是该微信公众号的appId, redirect_uri的值为一个天转到你的页面的地址,这里我说的可能不是太通俗易懂,那么这里借用别人的话:

这个redirect_url 就是 一个项目的映射地址,当用户点击立即体验超链接的时候,会跳转到授权登录页面,当点击授权登录之后微信公众平台会回调这个地址,并在这个地址上追加code和state参数值

http://www.example.com/oauth2.do?code=0419p3Cc0YxTtG1nadCc0Ms7Cc09p3C8&state=1 此时我们在页面的代码中可以获取到code.


那我项目中的一个例子来讲:

我访问的 地址: https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx40e06c595a46ca58&redirect_uri=http%3A%2F%2Fwww.17cooltech.com%2Fxledu_wx%2Flink%2Fforward.jsp%3FappId%3Dwx40e06c595a46ca58%26linkAction%3D4&response_type=code&scope=snsapi_base&state=789#wechat_redirect 

我这里跳转到我一个tomcat项目中的forward.jsp 页面中了,而在 forward.jsp 中就可以获得code 

<%
	String path = request.getContextPath();
	String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
	String appId = request.getParameter("appId");
	String code = request.getParameter("code");
	System.out.println("appId:"+appId+", code:"+code);
	
	String linkAction = request.getParameter("linkAction");
	if(linkAction==null){
		linkAction = "0";
	}
	String linkValue = request.getParameter("linkValue");
	if(linkValue==null){
		linkValue = "0";
	}
%>

当然获得这个code 之后就可以获得相应的openId  从而就可以区分出用户来了。


但是这个认证过的服务好实现的办法,订阅号可以吗? 

我试了下,将上述的 地址中的appId换成是订阅号的appId ,但是结果发现不行,一点链接告我“Scope 参数错误或没有Scope权限”。

这是为什么呢,因为发现订阅中没有获取到微信网页授权接口的权限,即如图:



订阅号无法获得该接口权限。然而后面的事情就比较尴尬了,订阅号没有此接口,就无法获取到用户的信息。但是怎么办呢,通过各种查网上的信息,发现订阅号是可以获得微信的openId 的 ,那就是在微信开放平台 将一个订阅号和服务号做绑定,然后让订阅号借用服务号的接口 。但是这种方法还没有验证。但是已经有例子了:

在方倍工作室的网站上有这样的需求


但是前提条件是先到微信开放平台做绑定,那今天就先到这儿,写的比较啰嗦,主要想把过程记录下来。

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
您好!关于Java微信公众号开发,我可以为您提供一些基本的信息和指导。 首先,微信公众号开发要有两种类型:订阅和服务订阅主要用于信息传达和内容分享,而服务则更加注重业务功能和用户交互。 在Java开发中,您可以使用微信公众平台提供的开发接口进行开发。以下是一些常用的开发步骤和技术: 1. 注册微信公众平台账:前往微信公众平台(https://mp.weixin.qq.com/)注册一个账,并完成开发者认证。 2. 配置服务器:在公众设置中,配置服务器URL和Token。Token用于验证消息的真实性。 3. 接入消息接口:通过开发接口,将用户发送的消息和事件推送到您的服务器。您可以使用Java框架(如Spring Boot)搭建服务器,并使用接口进行消息的处理和回复。 4. 实现功能:根据您的需求,可以实现一些常见的功能,如自动回复、菜单管理、用户管理、消息模板等。您可以使用Java的相关库和工具来简化开发过程。 5. 公众运营:在开发完成后,可以进行公众的运营和推广。您可以通过素材管理、群发消息、数据统计等功能来提升用户体验和运营效果。 需要注意的是,微信公众号开发涉及到用户隐私和信息安全,建议您在开发过程中遵守相关规定,并进行必要的数据加密和安全防护。 希望以上信息对您有所帮助!如果您有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值