这几天一直忙乎着公众号的页面授权测试,将走过的坑与大家一起分享。
第一个要准备的材料:公众号。


以上是一个开发公证号所拥有的最基本信息。这个Appid和AppSecret是请求微信接口必不可少的认证。然而,在此之前,必须先通过认证才能具有某些接口权限,比如获得用户登录的微信个人信息,获取用户发送的地理位置等。
如果仅仅是测试的话,可以使用公众号下的测试账号。



以上是进入测试号的索引,这里也会拥有的与正式公众号一样的appid,appsecret,作用也是一样的。如果像我一样仅仅是测试公众号的页面授权,这里的接口配置信息可以不填。

先对关注测试公众号,右边的列表出出现此测试号下的微信,未关注的微信是不能进行测试的
这里要关注的是页面授权回调域名。


这里是第一个坑了。在测试号当中,可以填域名,ip,甚至域名都不需要备案的,这就大大方便了测试授权用途。回调页面的意思是,微信用户关注到你的公众号,当他选择授权登录时,我们可以调用微信接口,获得他的基本微信信息,例如唯一的微信openid,然后再返回到我们的一个页面或者是服务用来收集用户信息。那这个页面或是服务必须是在此域名下的。假设我填的是www.abc.com
比如我想返回到一个页面,可以是:www.abc.com/index.html,
www.abc.com/foo/index.html,
返回一个服务:www.abc.com/foo/a.action.
只要是此域名下的,无论嵌多少层都可以。注意,前面不能加入https或http的前缀
在回调域名当中,如果你的项目名是有下划线组成,
比如 www.abc.com/apple_cat_pear 才能访问到你的项目,那么请去除下划线的项目名。虽然去除项目名的www.abc.com只能映射回本地的启动服务器而不是项目,但这无伤大雅。
OK,走到这里很多人说没有域名了咋办,那么就是第二个材料,一个可以映射内网的域名。
我采用的花生壳域名。



新用户是可以获得几个免费域名的,使用这些域名也是可以,只不过我方便测试花了100大洋买了个.com的域名。
然后下载花生壳内网穿透的客户端


这里会出现你所拥有的域名,包括送的。。


应用名称随便写,域名是从属下的选择一个,映射选择HTTP80,内网主机不知道打开cmd ip config/all 看自己的地址。我的项目是使用tomact启动,使用的是默认的8080端口。最后诊断一下,地址栏打出外网域名,确保别人能访问你本地的项目。

至此为止,第二个材料就准备完毕。
第三个就是可以跑的项目…这个这里就不展开说的。你使用springboot+myb,springMVC,struts2随便一个搭一个可以跑的项目,没有的话,搜其他博客快速搭一个吧,起码有个可以进去的servelet。我就使用公司的项目直接跑了。

进行授权接口的对接

先写一条链接:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=http://www.abc.com/index.html&response_type=code&scope=snsapi_base&state=123#wechat_redirect
这个链接就是发给微信说明我要开始对这个接口进行对接
appid: 就是测试号上的appid
redirect_uri:刚刚我们上面填了www.abc.com ,所以这里是填此域名下的一个html进行回调。此处一定要加上http://或https://,必须必须!
scope:这是指要调用微信哪个接口,snsapi_base是指用户静默授权,这个是用户进行微信授权时不用弹出一个框提示是否进行授权,所以这个接口能获得的信息比较少,详细可以看官方技术文档。
state:随便填。。
我下载一个官方推出的微信调试工具,如果是按照上面一步一步来的,那么你的链接是不会出现code错误,redirect_uri等错误的。

可以看到,返回来页面中,后缀接上了一个code,这个code我们还要再发送给微信端,来换取刚刚进行登录的用户信息。当然,上面的授权的链接你可以进行异步请求,用js在页面上获取。我是这样获取的`
function GetQueryString(name)
{
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if(r!=null)return unescape(r[2]); return null;
}
调用GetQueryString(code)可以去到地址的参数值。
取到以后,就发送给后台进行处理,怎样提交就很多种方式了,异步也行,或者直接整个form连上其他值一起提交给后台,归根还是给后台处理。
只贴关键代码,用的是老式的struts2,所以返回String映射返回页面,如果你是springMVC的controller那就自行改一下

public String juvenileSubsidy() {//如果是第二次验证登录则直接发送微信的opendidString openId =getOpenId();.......//省略各种去到信息以后的servicereturn "login_jsp";}........private String getOpenId(){//appid和secret是测试公众号上的,自行填写,别直接copy,//code是刚刚获取到的,自行改写参数String url="https://api.weixin.qq.com/sns/oa"+ "uth2/access_token?appid="+wxappid+"&"+ "secret="+appsecret+"&code="+wxcode+""+ "&grant_type=authorization_code";         String openId="";try {URL getUrl=new URL(url);HttpURLConnection http=(HttpURLConnection)getUrl.openConnection();http.setRequestMethod("GET"); http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");http.setDoOutput(true);http.setDoInput(true);http.connect();InputStream is = http.getInputStream(); int size = is.available(); byte[] b = new byte[size];is.read(b);String message = new String(b, "UTF-8");JSONObject json = JSONObject.parseObject(message);openId=json.get("openid").toString();} catch (Exception e) {System.out.println(e.getMessage());}return openId;    }

当然很多博文都是如何如何将地址参数名封装,以后好调用,一开始为了给大家看效果我就写得很粗糙。以后你封装得简便也好,甚至用xml来读取配置信息那也是后话,我这里简单粗暴为主。我的这个私有方法也只是返回一个String我所需要的openid,你可以选择返回一个对象,或者是查阅官方文档,改变最初的scope,非静默授权能取得更多用户信息。
接下就是debug观察。

{"access_token":"15_0D9_XTsx2YdwoD5KPd6WHAEc47xLqy4uuQAb06irOd5UgOnzwW3zPRdhMXinpJ7ucvkW3D7coema7QAdA",
"expires_in":7200,
"refresh_token":"15_cz_GGe-k41d_YVVgmrFvQBUvF_LuyuNSB2PTq8YWXHLz0l7Vg8hJnBWjGFMNhTT2NRFqqRYT5gSofww",
"openid":"o-MN1B0FGR1JV398vbSPNZ70xa424",
"scope":"snsapi_base"}

以上就是成功去到微信接口发来的json对象,我调用的是snsapi_base所以只能返回到这些信息。这些token每次都会刷新的,这些密匙也是微信用来校验服务器的重要数据,但这里没用上。我取到了需要的openid。
这样就获得微信登录公众号上唯一识别的id,用此id就可以实现业务逻辑。同时实现了公众号的服务可以在本地进行测试。
至于文章初期提到的接口配置信息这里的确不需要用到,这个是需要后端发送token进行校验的。
最后,可以将这条宝贝链接放到公众号自定义的菜单中。这就是所谓的用户登录授权了。

当然,这是个测试号的授权,当正式上线的时候换成有备案的域名,appid换成正式公众号的id,其余不变。
至此为止,公众号的静默授权完成!

微信公众号测试号本地服务的搭建——Java相关推荐

  1. 用java开发微信公众号:测试公众号与本地测试环境搭建(一)

    本文为原创,原始地址为:http://www.cnblogs.com/fengzheng/p/5023678.html 俗话说,工欲善其事,必先利其器.要做微信公众号开发,两样东西不可少,那就是要有一 ...

  2. 微信公众号Java开发-笔记01【微信公众号介绍、开发环境搭建】

    学习网址:哔哩哔哩网站 微信公众号开发-Java版 微信公众号Java开发-笔记01[微信公众号介绍.开发环境搭建] 微信公众号Java开发-笔记02[] 微信公众号Java开发-笔记03[] 微信公 ...

  3. 微信公众号 测试号 申请

    微信公众号测试号申请 无需公众帐号.快速申请接口测试号:直接体验和测试公众平台所有高级接口 https://developers.weixin.qq.com/doc/offiaccount/Basic ...

  4. 微信公众号(测试号)消息模板推送

    微信公众号(测试号)消息模板推送 源码地址 https://github.com/panjianlong13/Weixin-PushMessage 微信测试号配置 登录到微信公众平台接口测试账号申请U ...

  5. 微信公众号测试号申请及访问

    微信公众号测试号申请地址,没有登录的时候需要先登录再申请,网页有提示 http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo ...

  6. 微信公众号测试号配置,群发消息(go实现)

    配置服务器(以本地服务器127.0.0.1:8080为例) ⑴新建项目(这里用的goframe框架) 路由: var (Main = gcmd.Command{Name: "main&quo ...

  7. 微信公众号开发本地环境开发_如何在5分钟内使HTTPS在本地开发环境上工作

    微信公众号开发本地环境开发 Almost any website you visit today is protected by HTTPS. If yours isn't yet, it shoul ...

  8. 手把手教你最近很火的 微信公众号测试号推送消息

    最近有很多小伙伴在尝试做消息推送,今天详细教程它来啦!!! 过程不太复杂,跟着一步一步做就可以实现. 没时间的话,先收藏,等有时间了慢慢学! 第一步:注册微信公众号测试号 1.利用下面的链接注册一个微 ...

  9. 微信公众号查券返利机器人搭建教程

    微信公众号查券返利机器人搭建教程 一.淘宝联盟官方淘宝客私域渠道ID申请 1.登陆淘宝联盟 用需要开通淘宝联盟的手机淘宝扫码授权登陆联盟 地址:https://www.alimama.com 2.填写 ...

最新文章

  1. Python中怎样改变集合之间的关系?
  2. U盘无法安装win10提示Your PC/Device needs to be repaired
  3. QT pro文件解析
  4. boost::hana::intersection用法的测试程序
  5. 小猫的java基础知识点汇总(下)
  6. materialrefeshlayout下拉刷新,上拉加载更多
  7. Halcon学习笔记(三)---数据类型
  8. 多位博士毕业去了三四流高校,现在怎么样了?
  9. 4.13 | 学习笔记
  10. IIS6 mysql速度_Win 2003下IIS6+Mysql+php5.2  isapi搭建 升级php5.2到5.3测试 借助fastcgi实现...
  11. 这本在日本销量突破70W+的 Python 书,凭什么这么火?
  12. android viewpager切换无法显示fragment问题
  13. python读取txt文件存储数组_python – 从文本文件中将数据读入numpy数组
  14. python常用代码总结-python字典的常用方法总结
  15. 微软宣布与中国电子科技集团筹建合资公司
  16. 【2018CPCP-Final G:】Pastoral Life in Stardew Valley
  17. 牛顿冷却定律,衰减因子alpha
  18. 英语3500词(20/20)dream主题(2022.4.30)
  19. 单商户商城系统功能拆解40—分销应用—分销设置
  20. Element-UI 组件MessageBox 弹框 关闭遮罩层

热门文章

  1. python偷回灭霸的宝石_复联4不能合理解释:钢铁侠是怎么从灭霸手中偷走无限宝石的!...
  2. IoT黑板报:高通和LG携手于2018年开始测试5G车辆互联网
  3. java 自动检查更新去掉勾,小熊纯净版Win10旗舰版如何关闭java自动更新功能
  4. 会议预约管理系统,智慧会议室,智能会议室解决方案,联动会议门牌显示屏,提供会议室的使用效率
  5. 2022-2027年中国无糖茶饮料行业发展前景及投资战略咨询报告
  6. 超长干货:基于Docker的DevOps CI/CD实践——来自iHealth的分享
  7. 我的截图插件被Gitee使用了
  8. 百度大脑智能监控安全帽检测系统
  9. 全面注册制对量化交易的影响 | A+CLUB 2023专题峰会圆桌论坛
  10. C语言进阶——深度剖析数据在内存中的存储