微信订阅号获取openid

微信订阅号获取openid
最近年底了,公司要求做个不记名的评分程序。用于年底绩效考核的统计。
需要不记名,又要控制不能重复评分。所以我就想到了微信的openid。
简单记录一下爬坑流程。
首先,微信订阅号明确指出,只有用户主动向订阅号发送消息,会产生openid。
在这里插入图片描述

订阅号的接口权限里面已经表明,不能通过授权获取用户基本信息。所以无法像小程序,服务号一样拉起授权窗口。
第一步,在订阅号的基本配置里面配置好服务器。
在这里插入图片描述
这个时候不能直接提交,会提示token错误 。
token是我自己定义的。在这里提交的时候,微信会向你填写的URL发起GET请求,就是对你的token进行验证。验证方法参考 https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html
GET请求会带几个参数:timestamp,nonce,echostr,signature
// 将token(这个是我自己定义的)、timestamp、nonce三个参数进行字典排序
然后SHA1加密得到signature,判断你生成的signature和参数的signature是否一致。若一致就可以提交基本配置了。

其实上面都是废话。简单点的方法就是GET你的URL的时候,你根本不要做任何判断,直接返回echostr。就可以提交基本配置了。

第二步,服务器配置好了。接下来就是解析接收到的消息了。用户向订阅号发送的消息,会直接发送到服务器。服务器通过解析,实现自动回复的功能。当然,也会解析出openid。

这里补充一下,因为是服务器配置只有一个URL,通过GET和POST判断实现不同的作用。这里在服务器代码里自行判断。

  public string signature(string signature, string timestamp, string nonce, string echostr)
        {
 			string re = Request.HttpMethod;
            if (re == "GET")
            {
                RecordLog("进入验证");

                return echostr;//直接返回echostr
            }
            else
            {
                RecordLog("进入自动回复");
                return xml; //返回自行回复的内容
            }
        }

服务器接收到的消息是XML格式。这里有几个节点名称ToUserName,FromUserName,CreateTime,Content等。格式大概是这样的:

<xml>
<ToUserName><![CDATA[这里是 ToUserName]]></ToUserName>
<FromUserName><![CDATA[这里是FromUserName]]></FromUserName>
<CreateTime>这里是CreateTime </CreateTime>
<MsgType><![CDATA[这里是消息类型,文本、图片、语音等]]></MsgType>
<Content><![CDATA[这里是消息内容]]></Content>
</xml>

我只用到这几个。其中FromUserName就是openid。

然后我们重新构造XML文本,返回去就可以实现自动回复。

<xml>
<ToUserName><![CDATA[这里是 FromUserName]]></ToUserName>
<FromUserName><![CDATA[这里是ToUserName]]></FromUserName>
<CreateTime>这里是CreateTime </CreateTime>
<MsgType><![CDATA[这里是消息类型,文本、图片、语音等]]></MsgType>
<Content><![CDATA[这里是消息内容]]></Content>
</xml>

注意,我们返回的ToUserName是接收到的FromUserName,返回的FromUserName是接收到的ToUserName。
Content也可以这样写。

<Content><![CDATA[<a href='www.baidu.com'>百度一下,你就知道</a>]]></Content>

最后,获取了openid后,以它做为唯一标识 。限制同一个微信重复对一个人进行评价。或者投票也可以这样用。

结束!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值