-- 请不要为爱你的人流泪,因为爱你的人不会让你流泪!
序
今天对这2东西做个相对全面的介绍,不一定深入,但是对实际开发还是很有必要的
我们在微信开发中总是会绕不开2个单词:
AppID:开发者ID,有些叫AppKey
AppSecret:开发者密码
目的:二者配合使用,可调用公众号的接口能力;这是官方的说法,那我再说的直白点,就是当你的开发过程中有使用人家微信相关功能时候,必须有在人家官方认证过的账号密码。
![](/qrcode.jpg)
why:
简单说几点,首先可以统计登记都谁使用了咱们自家的工具包(sdk/api/应用接口);其次适当时候还是可以收点保护费的,毕竟开发也是给花钱的嘛,小挣点也没啥不好。
who:
大部分第三方都要这个接口秘钥,比如:腾讯,你使用了人家的QQ、腾讯微博、空间、微信、朋友圈等。新浪,你使用了人家的新浪微博。阿里巴巴,你是用了人家的支付宝。百度/高德,你是使用了人家的定位地图功能。
do:
你使用人家帮你干了什么活呢?腾讯的一般都是分享,此时我们想定制分享的一些列配置,比如:分享的标题,摘要,小图片以及分享后打开的页面链接地址(如下图:)。这些肯定要涉及和微信官方进行沟通了,也就是拿到人家给你的许可证(秘钥),当然还有微信支付,不过支付一般注册的微信公众号不支持这个功能,也就是没有这个使用权限,花钱去买。新浪微博常用的也是用来做分享时候的配置。支付宝,不用多说肯定是想使用人家做支付。
如何取得: appid appsecret 首先先补充一点 :
微信开放平台和公众平台的区别是什么?
1、服务对象不同 微信开放平台主要面对移动应用/网站应用开发者,为其提供微信登录、分享、支付等相关权限和服务。 微信公众平台用于管理、开放微信公众号(包括订阅号、服务号、企业号),简单的说就是微信公众号的后台运营、管理系统。 2、功能不同 微信开放平台提供了数据统计功能,用于开发者统计接入应用的登录、分享等数据情况。 微信公众平台的基础运营功能:群发功能、自动回复、自定义菜单、投票管理。 3、账号区别 微信公众平台账号细分为服务号,订阅号,企业号。 微信开放平台仅第三方移动程序提供接口,使用户可将第三方程序的内容发布给好友或分享至朋友圈。
扩展资料: 商户平台 无论是申请公众平台商户,还是开放平台商户,申请成功后,都会拥有商户平台账号,可登陆商户平台进行操作。 商户平台主要就是做微信支付用的,如果APP或者公众号需要接入支付功能,那么就需要在公众平台申请公众平台商户,或者在开放平台申请开放平台商户,申请成功后会分配商户平台账号。
2个平台的AppID和AppSecret 都不一样
我们例子(移动登录)今天就获取 开放平台的AppID和AppSecret
例子JAVA实现微信授权登录(详解)
第一步:(前期设置)登录微信公众号接口测试平台设置信息
链接:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
登录成功后可以看到测试用的appid和appsecret,稍后再后台我们要用到这两个ID,如下图
紧接着需要设置网页授权(体验接口权限表 —》 网页服务 —》网页帐号 —》 网页授权获取用户基本信息)
没有域名的话可以用内网穿透动态解析一个域名。
NATAPP链接:点击注册
注册登录成功后可以看到下图,选择免费隧道
购买免费的隧道之后,可以直接按照官方的一分钟教程完成内网穿透,这样我们就拿到了我们的域名
这里展开说 使用:
在natapp官网上购买免费得隧道。
网址:NATAPP-内网穿透 基于ngrok的国内高速内网映射工具
在该网址上面,正常完成注册登陆,点击购买隧道
可选择免费或者付费得隧道,差异可在下面列表查看 这个要实名认证 要用你实名认证后的支付宝进行 认证后免费获取
点击我得隧道,配置,进入配置页面
填写本地得ip和本地服务端口,点击修改。 这里可以改动自己的默认地址到自己的内网地址
根据自己电脑机型,下载对应natapp客户端到本地
下载完成后,本地打开natapp.exe文件
在打开得黑窗口中执行以下命令: natapp -authtoken=xxxxxx
authtoken在我得隧道中如下位置可查看到
执行之后,可以在黑窗口中看到如下,将以下红色圈中部分改写成项目得请求头即可在互联网中访问。
如:本地访问: http:localhost:8080/equipment/index/index
互联网访问:http://td87wf.natappfree.cc/equipment/index/index
上面的配置中需要用到内网地址 这里补充一下“
IPv4私有地址”
相信大家对IPv4地址并不陌生,它存在于我们网络中的任何一个地方。因为一台设备必须获取一个合法的IP地址后,才可以与其他网络中的设备进行通信。那么大家是否知道,在家里或者公司中使用的IPv4地址是什么类型的么?
实际上,我们在公司内和家里使用的IPv4地址类型为私有地址,私有地址是不可以直接在internet网络中使用的,它会被internet认为是非法地址(即非公有地址)。只有公有地址才可以在互联网(internet)中使用。
目前公有地址的管理和分发是在IANA(Internet Assigned Numbers Authority) http://www.iana.org/ 互联网号码分配局。
那么我们在日常工作、生活中可以使用到的IPv4 私有地址有那些呢?
首先IPv4地址分为A类地址、B类地址和C类地址,在每一类的地址池中,都有一部分预留给了私有地址。也就是说私有地址可以有多种选择,根据你的组织规模大小可以使用不同类的地址。下面就介绍一下A、B、C类地址池中到底有那些可以为我们内网使用。A类地址中IPv4的私网地址可用范围是:10.0.0.0 to 10.255.255.255
B类地址中IPv4的私网地址可用范围是:172.16.0.0 to 172.31.255.255
C类地址中IPv4的私网地址可用范围是:192.168.0.0 to 192.168.255.255
以上就是我们可以在内网中使用的IPv4地址。记住这些地址是私网地址,仅可以在内部网络中使用,不可使用在公网中。大家可以依据自己组织的规模大小,酌情使用那类私有地址。例如,家庭网络通常设备数量比较小,所以一般使用C类的私有地址皆可,如大家经常在家庭网络中看到的192.168.1.0/24的网络地址,这个C类的私有地址网段可以承载254个主机,足足够家庭网络使用了。
如果中大型企业可以在IP地址规划时,考虑使用A类或者B类的私网地址,这样可以等到更多的主机地址。为各种类型需要接入网络的设备提供IPv4 地址。
另外切记,私有IPv4 地址是不可以直接与公网IPv4地址进行直接通信的,他们之间的通信需要使用到地址转换技术(NAT --Network Address Translation)。
说到这里相信大家已经对IPv4 私有地址的概念有所了解, 快去看看你的主机的IPv4私有地址是多少吧?看看是哪一类的私有地址。
附:主机IP地址查看方法,(Windows系统下)
开始–运行–CMD (win徽标键+R)–点击ok
键入ipconfig
![]()
第二步:代码实现微信授权。
简单来说,微信授权分为四步
- 授权登录接口。
- 用户点击授权。
- 微信授权回调接口。
- 在回调接口中获取openid、access_token、获取用户信息。
第一步:先上工具类AuthUtil
public class AuthUtil {
public static JSONObject doGetJson(String url) throws ClientProtocolException, IOException {
JSONObject jsonObject = null;
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
HttpResponse response = client.execute(httpGet);
HttpEntity entity = response.getEntity();
if (entity != null) {
String result = EntityUtils.toString(entity, "UTF-8");
jsonObject = JSONObject.fromObject(result);
}
httpGet.releaseConnection();
return jsonObject;
}
}
第二步:WxAuthorizeController的微信授权接口
/**
* Tea微信登录接口
* @throws IOException
*/
@ApiOperation(value = "微信登录接口")
@IgnoreAuth
@RequestMapping("wx_login")
public void wxLogin(HttpServletResponse response) throws IOException{
//域名(暂时写死的)
String sym = "http://c8d3v2.natappfree.cc";
//这里是回调的url
String redirect_uri = URLEncoder.encode(sym+"/front/auth/callBack", "UTF-8");
String url = "https://open.weixin.qq.com/connect/oauth2/authorize?" +
"appid=APPID" +
"&redirect_uri=REDIRECT_URI"+
"&response_type=code" +
"&scope=SCOPE" +
"&state=123#wechat_redirect";
response.sendRedirect(url.replace("APPID",WxConstant.APPID).replace("REDIRECT_URI",redirect_uri).replace("SCOPE","snsapi_userinfo"));
}
参数说明如下:
第三步:WxAuthorizeController微信授权登录回调接口
/**
* Tea微信授权成功的回调函数
*
* @param request
* @param response
* @throws ClientProtocolException
* @throws IOException
* @throws ServletException
*/
@ApiOperation(value = "微信授权回调接口")
@IgnoreAuth
@RequestMapping("/callBack")
protected void deGet(HttpServletRequest request, HttpServletResponse response)throws Exception {
//获取回调地址中的code
String code = request.getParameter("code");
//拼接url
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + WxConstant.APPID + "&secret="
+ WxConstant.APPSECRET + "&code=" + code + "&grant_type=authorization_code";
JSONObject jsonObject = AuthUtil.doGetJson(url);
//1.获取微信用户的openid
String openid = jsonObject.getString("openid");
//2.获取获取access_token
String access_token = jsonObject.getString("access_token");
String infoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token + "&openid=" + openid
+ "&lang=zh_CN";
//3.获取微信用户信息
JSONObject userInfo = AuthUtil.doGetJson(infoUrl);
//至此拿到了微信用户的所有信息,剩下的就是业务逻辑处理部分了
//保存openid和access_token到session
request.getSession().setAttribute("openid", openid);
request.getSession().setAttribute("access_token", access_token);
//去数据库查询此微信是否绑定过手机
UserVo user = userService.queryByOpenId(openid);
String mobile=user==null?"":user.getMobile();
if(null == mobile || "".equals(mobile)){
//如果无手机信息,则跳转手机绑定页面
response.sendRedirect("/front/register.html");
}else{
//否则直接跳转首页
response.sendRedirect("/front/index.html");
}
}
错误码10003: redirect_uri域名与后台配置不一致错误的问题补充:
错误码 必须关注此测试号 10006 的问题补充
三个人 (王萌 马晓静 荣丹)~