蝶燕双飞 發表於 2019-5-29 10:10:00

公众号开发入门:查询用户是否已经关注公众号?

<h2 id="背景">背景</h2>
<p>最近,小明在参与app改版时,有一个业务场景是:用户完成指定的任务,判断当前登录用户是否已经关注指定的官方微信公众号,如果关注会获得相应的奖励,为了弥补语言的匮乏,小明偷偷给大家上张图:</p>
<p><img src="https://i.ibb.co/PMmYvfz/image.png" alt="app截图" loading="lazy"></p>
<p>众所周知,我们程序员第一次接收到之前没做过的需求时,第一步肯定离不开搜查资料(我觉得国内的产品,百度就够用),小明也不例外,花了大概五分钟,一切就了然于胸,由此可见,程序员的<strong>搜商</strong>很重要 😂。ok,废话少说,翠花,上菜!。</p>
<h2 id="必备条件">必备条件</h2>
<ul>
<li>微信公众平台-开发-基本配置-成为开发者,得到 <code>appId</code> 和 <code>appSecret</code>(注意:<code>appSecret</code>只展示一次,需保存下来,否则需要重置获取),</li>
<li>添加ip白名单,这个是为了提高公众平台开发者接口调用的安全性,避免一旦开发者ID和密码泄露后给帐号造成损失。对调用“获取<code>access_token</code>”接口增加IP白名单校验:只有将IP地址设置为公众号的IP白名单,才能成功调用该接口。</li>
<li>微信认证通过,拥有获取用户基本信息的权限(注意:如果帐号主体为个人,是无法开通微信认证的);</li>
</ul>
<h2 id="详细步骤">详细步骤</h2>
<h3 id="获取access_token">获取access_token</h3>
<pre><code>https请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&amp;appid=APPID&amp;secret=APPSECRET
</code></pre>
<h4 id="参数说明">参数说明</h4>
<table>
<thead>
<tr>
<th>参数</th>
<th>是否必须</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>grant_type</td>
<td>是</td>
<td>获取access_token填写client_credential</td>
</tr>
<tr>
<td>appid</td>
<td>是</td>
<td>第三方用户唯一凭证</td>
</tr>
<tr>
<td>secret</td>
<td>是</td>
<td>第三方用户唯一凭证密钥,即appsecret</td>
</tr>
</tbody>
</table>
<h4 id="返回说明">返回说明</h4>
<p>正常情况下,微信会返回下述JSON数据包给公众号:</p>
<pre><code>{"access_token":"ACCESS_TOKEN","expires_in":7200}
</code></pre>
<h4 id="参数说明-1">参数说明</h4>
<table>
<thead>
<tr>
<th>参数</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>access_token</td>
<td>获取到的凭证</td>
</tr>
<tr>
<td>expires_in</td>
<td>凭证有效时间,单位:秒</td>
</tr>
</tbody>
</table>
<p>错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误):</p>
<pre><code>{"errcode":40013,"errmsg":"invalid appid"}
</code></pre>
<h4 id="返回码说明">返回码说明</h4>
<table>
<thead>
<tr>
<th>返回码</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>-1</td>
<td>系统繁忙,此时请开发者稍候再试</td>
</tr>
<tr>
<td>0</td>
<td>请求成功</td>
</tr>
<tr>
<td>40001</td>
<td>AppSecret错误或者AppSecret不属于这个公众号,请开发者确认AppSecret的正确性</td>
</tr>
<tr>
<td>40002</td>
<td>请确保grant_type字段值为client_credential</td>
</tr>
<tr>
<td>40164</td>
<td>调用接口的IP地址不在白名单中,请在接口IP白名单中进行设置。(小程序及小游戏调用不要求IP地址在白名单内。)</td>
</tr>
</tbody>
</table>
<p>详情查看官方文档-获取access_token: https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;id=mp1421140183</p>
<h3 id="获取用户openid或者unionid">获取用户openId或者unionId</h3>
<p>在关注者与公众号产生<strong>消息交互后</strong>,公众号可获得关注者的OpenID(说明:OpenID就是加密后的微信号,每个用户对每个公众号的OpenID是唯一的。对于不同公众号,同一用户的openid不同)。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。因此,如果要判断当前登陆app的微信用户是否关注官方微信公众号,我们要使用的是unionId。需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求。</p>
<h3 id="根据前两个步骤获得的信息access_token和openid或者unionid调用微信接口获取用户基本信息">根据前两个步骤获得的信息(access_token和openId或者unionId),调用微信接口获取用户基本信息</h3>
<p>完整的用户基本信息包括昵称、头像、性别、所在城市、语言和关注时间等。<br>
接口调用请求说明:</p>
<pre><code>https请求方式: GET
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&amp;openid=OPENID&amp;lang=zh_CN
</code></pre>
<h4 id="参数说明-2">参数说明</h4>
<table>
<thead>
<tr>
<th>参数</th>
<th>是否必须</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>access_token</td>
<td>是</td>
<td>调用接口凭证</td>
</tr>
<tr>
<td>openid</td>
<td>是</td>
<td>普通用户的标识,对当前公众号唯一</td>
</tr>
<tr>
<td>lang</td>
<td>否</td>
<td>返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语</td>
</tr>
</tbody>
</table>
<h4 id="返回说明-1">返回说明</h4>
<p>正常情况下,微信会返回下述JSON数据包给公众号:</p>
<pre><code>{
    "subscribe": 1, //这就是我们想要的值哈,解释如下表格
    "openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M",
    "nickname": "Band",
    "sex": 1,
    "language": "zh_CN",
    "city": "广州",
    "province": "广东",
    "country": "中国",
    "headimgurl":"http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
    "subscribe_time": 1382694957,
    "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
    "remark": "",
    "groupid": 0,
    "tagid_list":,
    "subscribe_scene": "ADD_SCENE_QR_CODE",
    "qr_scene": 98765,
    "qr_scene_str": ""
}
</code></pre>
<h4 id="参数说明-3">参数说明</h4>
<table>
<thead>
<tr>
<th>参数</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>subscribe</td>
<td><strong>用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。</strong></td>
</tr>
<tr>
<td>openid</td>
<td>用户的标识,对当前公众号唯一</td>
</tr>
<tr>
<td>nickname</td>
<td>用户的昵称</td>
</tr>
<tr>
<td>sex</td>
<td>用户的性别,值为1时是男性,值为2时是女性,值为0时是未知</td>
</tr>
<tr>
<td>city</td>
<td>用户所在城市</td>
</tr>
<tr>
<td>……</td>
<td></td>
</tr>
</tbody>
</table>
<p>错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误):</p>
<pre><code>{"errcode":40013,"errmsg":"invalid appid"}
</code></pre>
<p>详情查看官方文档-获取用户基本信息 https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;id=mp1421140839</p>
<p>好了,以上就是今天小明整理给大家的有关公众号开发的文档。欢迎大家多多交流学习。</p>
<h3 id="欢迎关注微信公众号获取更多资源">欢迎关注微信公众号,获取更多资源</h3>
<p><img src="https://i.ibb.co/rMxVLpD/qrcode-for-gh-912975c21d10-344.jpg" alt="程序员小明" loading="lazy"></p><br><br>
来源:https://www.cnblogs.com/coderxx/p/10942058.html
頁: [1]
查看完整版本: 公众号开发入门:查询用户是否已经关注公众号?