避免误导,先加一句:首先,得公众号绑定开放平台

这个问题困扰了我一早上,我尝试了很多次获取unionid都失败。

微信的开发文档上有说:

关于特殊场景下的静默授权

1、上面已经提到,对于以snsapi_base为scope的网页授权,就静默授权的,用户无感知;

关于这点,我必需更新下,微信更新了接口,用snsapi_base获取的code,无法取得unionid,必需要用snsapi_userinfo去获取的code才可以。

2、对于已关注公众号的用户,如果用户从公众号的会话或者自定义菜单进入本公众号的网页授权页,即使是scope为snsapi_userinfo,也是静默授权,用户无感知。

而我现在的情况属于第2种,因此我一直都没有考虑要跳到用户授权的界面,事实上也不需要考虑这一个。

我通过网上搜索了别人的方法,都说通过

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN 来获取unionid,其实这并没有错,这是一般方法。
而对于已关注公众号的用户(我是开发公众号,也仅针对关注公众号的用户),并不需要走这一步,其实在从公众号进入你的网页时,unionid就已经获取到了,只是一直没有发现。最后在“第二步:通过code换取网页授权access_token”这里找到了灵感。
我就想,这个怎么这么熟悉,我原来的页面上就有:

jsApiPay.GetOpenidAndAccessToken();
ViewState["openid"] = jsApiPay.openid;

而就在jsApiPay.GetOpenidAndAccessToken()方法里就有

if (!string.IsNullOrEmpty(page.Request.QueryString["code"]))
{
//获取code码,以获取openid和access_token
string code = page.Request.QueryString["code"];
Log.Debug(this.GetType().ToString(), "Get code : " + code);
GetOpenidAndAccessTokenFromCode(code);
}

傻啦?这不就有code,难道在这里已经获取了unionid?

于是我开始尝试在这里获取unionid,对JsApiPay做了一些小修改。

首先,增加了一个属性:

/// <summary>
/// 开放平台统一ID
/// </summary>
public string unionid { get; set; }

然后在public void GetOpenidAndAccessTokenFromCode(string code)这个方法里添加

if (jd["unionid"] != null) unionid = (string)jd["unionid"];

由于害怕没有这个字段,所以添加了判断。

最后在页面里用jsApiPay.unionid 获取看是否成功,OK GET!

详细可以阅读开发文档 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

公众号如何获取已关注用户的unionid的问题的更多相关文章

  1. PHP之路——微信公众号授权获取用户信息

    官方文档链接:http://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html /** * 获取code */ public f ...

  2. asp.net微信开发第四篇----已关注用户管理

    公众号可通过本接口来获取帐号的关注者列表,关注者列表由一串OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的)组成.一次拉取调用最多拉取10000个关注者的OpenID,可以通过 ...

  3. 和小猪一起搞微信公众号开发—获取Access_token

    前言 前一篇小猪和大家分享了如何回复用户的简单文本,这一篇我们来看看如何获取Access_token 介绍 在前一篇中,我们实现了这么一个简单的过程:用户发送一个文本到公众号后,公众号在该文本后面加上 ...

  4. ASP.NET微信公众号用于给指定OpenId用户发送红包

    ASP.NET微信公众号用于给指定OpenId用户发送红包 微信公众号要实现对指定用户发送红包,必须指定一个存放兵发放金额的商户号,在微信商户平台里面申请商户号并获取相关参数例如发送红包所要用到的安全 ...

  5. 在微信框架模块中,基于Vue&Element前端的微信公众号和企业微信的用户绑定

    在一个和微信相关的业务管理系统,我们有时候需要和用户的微信账号信息进行绑定,如对公众号.企业微信等账号绑定特定的系统用户,可以进行扫码登录.微信信息发送等操作,用户的绑定主要就是记录公众号用户的ope ...

  6. golang微信公众号请求获取信息

    初次用golang在公众号中获取信息,记录一下 看了下文档,粗略的写了个demo,如下: func HttpGet(c*gin.Context) { var param GetType if er:= ...

  7. 微信中的APP、公众号、小程序的openid及unionid介绍

    微信中的APP.公众号.小程序的openid及unionid介绍 1.unionid 如果开发者拥有多个移动应用.网站应用.和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只 ...

  8. PHP获取用户是否关注公众号。获取微信openid和用户信息

    <?php /* * 首先填写授权地址为当前网址 * 将$appid和$secret参数替换成自己公众号对应参数,需要外网可以访问服务器环境测试 */ header("Content- ...

  9. C#微信公众号开发 -- (三)用户关注之后自动回复

    通过了上一篇文章之后的微信开发者验证之后,我们就可以做微信公众号的代码开发了. 当我们点击关注某个公众号的时候,有时候会发现他会自动给我们回复一条消息,比如欢迎关注XXX公众号.这个功能其实是在点击关 ...

随机推荐

  1. hadoop第一个例子WordCount

    hadoop查看自己空间 http://127.0.0.1:50070/dfshealth.jsp import java.io.IOException; import java.util.Strin ...

  2. Day1 BFS算法的学习和训练

    ​ 因为自己的原因,之前没有坚持做算法的相应学习,总是觉得太难就半途而废,真的算是一个遗憾了,所以现在开始,定一个30天入门学习算法计划. ​ 我是根据<算法图解>的顺序进行安排的,自己对 ...

  3. Struts2中怎样配置struts。xml?

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-/ ...

  4. python 闭包变量不允许write,要使用nonlocal

    以下是一段简单的闭包代码示例: def foo(): m=3 n=5 def bar(): a=4 return m+n+a return bar >>>bar = foo() &g ...

  5. Servlet启动运行顺序

    1.web项目执行属性 启动web项目后,web容器首先回去找web.xml文件,读取这个文件. 容器会创建一个 ServletContext ( servlet 上下文),整个 web 项目的所有部 ...

  6. .NET MVC API返回JSON对象

    方法多种,自己目前采用的是自定义返回格式的方法,不需要修改配置文件. 辅助类: public class ApiResponseHelper { public static HttpResponseM ...

  7. 基于dubbo2.5.5+zookeeper3.4.9的服务搭建

    参考资料:https://segmentfault.com/a/1190000009568509https://segmentfault.com/a/1190000004654903 0. 环境 Ja ...

  8. sql server 日期模糊查询

    转换成varchar类型 ) like '%2010-10-09%' 两个字段拼接成一个字段 SELECT C0252_ID, C0252_name,C0252_Addr, ((select top ...

  9. python pep8 命令规范

    命名规范:总体原则,新编代码必须按下面命名风格进行,现有库的编码尽量保持风格.1 尽量单独使用小写字母‘l’,大写字母‘O’等容易混淆的字母.2 模块命名尽量短小,使用全部小写的方式,可以使用下划线. ...

  10. bzoj 3677: [Apio2014]连珠线【树形dp】

    参考:http://www.cnblogs.com/mmlz/p/4456547.html 枚举根,然后做树形dp,设f[i][1]为i是蓝线中点(蓝线一定是父子孙三代),f[i][0]为不是,转移很 ...