-- 请不要为爱你的人流泪,因为爱你的人不会让你流泪!

今天对这2东西做个相对全面的介绍,不一定深入,但是对实际开发还是很有必要的


 我们在微信开发中总是会绕不开2个单词: 

AppID:开发者ID,有些叫AppKey

AppSecret:开发者密码

 

目的:二者配合使用,可调用公众号的接口能力;这是官方的说法,那我再说的直白点,就是当你的开发过程中有使用人家微信相关功能时候,必须有在人家官方认证过的账号密码。

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

登录成功后可以看到测试用的appidappsecret,稍后再后台我们要用到这两个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
在这里插入图片描述 

 

 第二步:代码实现微信授权。

简单来说,微信授权分为四步

  1. 授权登录接口。
  2. 用户点击授权。
  3. 微信授权回调接口。
  4. 在回调接口中获取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 的问题补充

 

三个人 (王萌 马晓静 荣丹)~

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐