用户首次登陆,实现绑定,以后使用微信账号登陆,好吧,这绑定也是只有绑定,没有解绑,而且是偷偷做的。。。。。、
用到接口 通过code获取用户信息通过openId和 acces_token 获取用户信息
实现步骤:
一 获取code
二 通过code 走微信接口 获取 openId
三 openId 与用户Id 绑定

那么问题来了,code 怎么获取到?
很简单,把request redirect 到微信接口,接口中指定微信回调Url,Url中就会包含code。
说的不够详细,贴出官方文档。
http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html

拿到openId 即可与 userId 绑定
下面贴出部分代码

public String getOpenId(String code) throws Exception{OpenId openId  = new OpenId();String resultXml = "";log.info("URLTOKEN:"+URLTOKEN);log.info("APPID:"+APPID);log.info("APPSECRET:"+APPSECRET);String url = String.format(URLTOKEN, APPID,APPSECRET,code);log.info("code:"+code);resultXml = HttpClientUtil.doGet(url, URL_CHARSET);log.info("getOpenId返回信息:"+resultXml);openId = (OpenId) JSONObject.toBean(JSONObject.fromObject(resultXml), OpenId.class);return openId.getOpenid();}

openId对象

public class OpenId implements Serializable {private static final long serialVersionUID = 1L;private String errcode;//错误编码private String errmsg; //错误信息private String access_token;//网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同private String expires_in;//access_token接口调用凭证超时时间,单位(秒)private String refresh_token;//用户刷新access_tokenprivate String openid;//用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenIDprivate String scope;//用户授权的作用域,使用逗号(,)分隔private String unionid;//只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段public String getAccess_token() {return access_token;}public void setAccess_token(String access_token) {this.access_token = access_token;}public String getExpires_in() {return expires_in;}public void setExpires_in(String expires_in) {this.expires_in = expires_in;}public String getRefresh_token() {return refresh_token;}public void setRefresh_token(String refresh_token) {this.refresh_token = refresh_token;}public String getOpenid() {return openid;}public void setOpenid(String openid) {this.openid = openid;}public String getScope() {return scope;}public void setScope(String scope) {this.scope = scope;}public String getUnionid() {return unionid;}public void setUnionid(String unionid) {this.unionid = unionid;}public String getErrcode() {return errcode;}public void setErrcode(String errcode) {this.errcode = errcode;}public String getErrmsg() {return errmsg;}public void setErrmsg(String errmsg) {this.errmsg = errmsg;}}

HttpClientUtil 工具类

public class HttpClientUtil {private static Logger log = Logger.getLogger(HttpClientUtil.class);  /**httpClient的get请求方式2* @return* @throws Exception*/public static String doGet(String url, String charset)  throws Exception {/** 使用 GetMethod 来访问一个 URL 对应的网页,实现步骤: 1:生成一个 HttpClinet 对象并设置相应的参数。* 2:生成一个 GetMethod 对象并设置响应的参数。 3:用 HttpClinet 生成的对象来执行 GetMethod 生成的Get* 方法。 4:处理响应状态码。 5:若响应正常,处理 HTTP 响应内容。 6:释放连接。*//* 1 生成 HttpClinet 对象并设置参数 */HttpClient httpClient = new HttpClient();// 设置 Http 连接超时为5秒httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000);/* 2 生成 GetMethod 对象并设置参数 */GetMethod getMethod = new GetMethod(url);// 设置 get 请求超时为 5 秒getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 5000);// 设置请求重试处理,用的是默认的重试处理:请求三次getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,  new DefaultHttpMethodRetryHandler());String response = "";/* 3 执行 HTTP GET 请求 */try {int statusCode = httpClient.executeMethod(getMethod);/* 4 判断访问的状态码 */if (statusCode != HttpStatus.SC_OK) {log.error("请求出错: "+ getMethod.getStatusLine());}/* 5 处理 HTTP 响应内容 */// HTTP响应头部信息,这里简单打印/*Header[] headers = getMethod.getResponseHeaders();for (Header h : headers)System.out.println(h.getName() + "------------ " + h.getValue());*/// 读取 HTTP 响应内容,这里简单打印网页内容byte[] responseBody = getMethod.getResponseBody();// 读取为字节数组response = new String(responseBody, charset);//System.out.println("----------response:" + response);// 读取为 InputStream,在网页内容数据量大时候推荐使用// InputStream response = getMethod.getResponseBodyAsStream();} catch (HttpException e) {// 发生致命的异常,可能是协议不对或者返回的内容有问题log.error("请检查输入的URL!");} catch (IOException e) {// 发生网络异常log.error("发生网络异常!");} finally {/* 6 .释放连接 */getMethod.releaseConnection();}return response;}public static String doPost(String url,String body,String charset){  HttpClient client = new HttpClient();     //设置代理服务器地址和端口       //client.getHostConfiguration().setProxy("proxy_host_addr",proxy_port);  //使用GET方法,如果服务器需要通过HTTPS连接,那只需要将下面URL中的http换成https  // HttpMethod method = new GetMethod("http://10.1.14.20:8088/workflowController/service/todo/addTask");   //使用POST方法  PostMethod method = new PostMethod(url);   ((PostMethod) method).setRequestBody(body);HttpMethodParams param = method.getParams();  param.setContentCharset(charset);  String str = null;try {int statusCode = client.executeMethod(method);if (statusCode != HttpStatus.SC_OK) {log.error("请求出错: "+ method.getStatusLine());}str = method.getResponseBodyAsString();} catch (HttpException e) {log.error("请检查输入的URL!");} catch (IOException e) {log.error("发生网络异常!");}finally{method.releaseConnection();  }log.info(str.toString());//释放连接  return str;}
}

微信开发笔记之-用户绑定相关推荐

  1. 微信小程序 error 用户绑定的手机号需要验证,请在客户端完成短信

    微信小程序 error 用户绑定的手机号需要验证,请在客户端完成短信 第一步在电脑上点编译 第二步点击预览 再点击自动预览 第三步打开手机上的小程序确认授权 输入短信验证码 之后就可以运行了 我点二维 ...

  2. php微信 开发笔记,PHP微信公众开发笔记(一)

    笔记是先写在印象笔记上的,晚上没事的时候整理整理. PHP微信公众开发笔记系列 日期:2014.9.1 今天开始正式开始做班上的微信公众平台的开发者服务了.因为是第一次做这个,对PHP也不了解,所以一 ...

  3. 微信开发教程:用户账号绑定到微信公众号的方法分享

    最近由于工作需要,接触了微信公众号的开发.业务上要求绑定微信用户和系统用户,以便用户在一次绑定后能够通过系统用户的身份去使用一些功能.我关注的招行信用卡公众号实现了这个功能,所以估计还是可行的,在网上 ...

  4. 微信开发笔记——微信网页登录授权,获取用户信息

    开源源码下载,请参照csdn下载:  http://download.csdn.net/detail/kingmax54212008/9453082 最近做了一个公司的微信的公众号,对微信的流程清楚了 ...

  5. php微信 开发笔记,微信WebApp开发总结笔记

    后台: c#  and  网络  部分: MVC  Ctrl=>Model=>View  ViewBag/ViewData/@Model./ViewModel  return View(& ...

  6. 微信小程序获取用户绑定手机号码完整版(转载)

    一.准备阶段 创建小程序项目(测试号即可) 创建Java后台项目(此处为SpringBoot 普通项目) 二.前端代码 WXML 代码 <!--index.wxml--> <view ...

  7. 微信开发基础 获取用户OpenID 列表

    1.官方文档 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140840 2.我使用的请求库是superagent,核心 ...

  8. php微信开发 (获取用户地理位置)

    private function receiveEvent($object) {$contentStr = "";switch ($object->Event){case & ...

  9. 微信php开发用户分组,asp.net微信开发用户分组管理的示例代码

    这篇文章主要介绍了asp.net微信开发中有关用户分组管理的相关内容,需要的朋友可以参考下 上一篇已讲解到新建用户分组,移动用户到分组的功能,这一章主要讲解修改分组名称和删除分组 直接上代码,废话不多 ...

最新文章

  1. 三大主流软件负载均衡器(LVS、Nginx、HAproxy) 与商业SLB比较
  2. android控件的对齐方式(转)
  3. python如何使用sdk_七牛云存储Python SDK使用教程 - 基本介绍
  4. 第2章 构建环境——安装Oracle 9i
  5. 力扣- -241.为运算表达式设计优先级
  6. div设置高度 vue_VsCode常用设置(新手必备!)
  7. 吴恩达机器学习Optional Lab - Neurons and Layers
  8. 升级macOS Big Sur 后 HIDPI 失效的解决办法
  9. 分享5个经典的数据可视化大屏应用案例
  10. QQ文件自动接收 重命名 建立文件夹 官方内测版本
  11. 三维立体动画制作技巧
  12. 嵌入式和java工资对比_嵌入式和java哪个前景好
  13. 【Linux】系统编程——文件编程
  14. python名片识别_百度AI攻略:名片识别
  15. 朋友圈集赞万能截图生成器威信小程序源码下载
  16. 【NLP】文本分类TorchText实战-AG_NEWS 新闻主题分类任务(PyTorch版)
  17. 中鑫优配股票配资平台的保障
  18. C语言指针强制类型转换
  19. js11位手机号码正则验证
  20. html 全景图three,室内房间全景图(基于three.js)

热门文章

  1. 计算机网络原理习题(1)
  2. 32wei客户端 oracle10g_【oracle 10g客户端下载】oracle 10g数据库客户端32位/64位下载 官方版-七喜软件园...
  3. disruptor笔记之六:常见场景
  4. anyRTC与京东智联云市场达成战略合作,携手音视频平台
  5. nestjs - 01
  6. android 照片转视频教程,手机一张照片制作视频教程 安卓手机怎么将照片制作成视频?...
  7. ES空字符串和null值查询
  8. 用计算机控制单片机的程序编写,单片机初学者必须掌握的基础内容
  9. 简信CRM直观展示客户分布图,让客户拜访更加省力
  10. ntp 服务编译安装 及 更改端口