JAVA开发(第三方接口授权访问)

接上一篇异业合作,如果一个第三方系统(我们定义为B系统)需要直接调用本系统(我们定义为A系统),那么系统间必须授权才能访问已保证系统的数据安全。

首先我们定义接口的请求示例,已http协议为例:

http://接口URL?token =xx &jsonData=xxxxx&sign=xxxx

我们可以看到需要访问A系统,我们需要携带token,调用A系统的参数而且这些参数是经过加密的,还有签名。

数据传输标准:

调用方式(url)
POST,视具体接口定义
请求类型(ContentType)
application/json
响应类型(ContentType)
application/json

 首先B系统在请求A系统的数据接口之前先调用A系统的获取token接口。

/oauth2/accessToken

token需要的参数:

参数

参数选项

意义

grant_type

必须

该值固定为access_token

client_id

必须

即对接账号(A系统和B系统约定的账号id)

timestamp

必须

当前调用时间,格式为yyyy-MM-dd HH:mm:ss

示例: “2018-01-01 01:01:01”

时差不能相差半小时以上

username

必须

用户名(A系统和B系统约定的账号)

password

必须

用户密码(双方预定),必须是md5加密后的字符串,不要使用原文!大写

scope

必须

申请权限。(传0,为以后扩展用)

sign

必须

签名,生成规则如下:

按照以下顺序将字符串拼接起来

client_secret+timestamp+client_id+username+password+grant_type+scope+client_secret
username使用原文;

client_secret(双方约定 需要md5加密后的转大写)、password(需要md5加密后的转大写);

将上述拼接的字符串使用MD5加密,加密后的值再转为大写

返回的token数据字段:

类型JSON

参数

意义

uid

唯一id

access_token

令牌

refresh_token

刷新token

time

当前时间

expires_in

access_token的过期时间,秒级别,86400秒后过期,即24小时有效期

refresh_token_expires

refresh_token的过期时间,毫秒级别

返回的token数据格式样例:

{
  "result": true,
  "msg": "success",
  "uid": "57",
  "access_token": "8BAC35711832492780DA535259949CA8",
  "refresh_token": "FF69836D701C49E88EB1823AB545CEFB",
  "time": 1564385329500,
  "expires_in": 86400,
  "refresh_token_expires": 1567063729500
}

接下来就可以通过token去请求接口了。

将需要传的参数抽象出来组装成公共参数:

	/**
	 *  
	 * @param inputParam
	 * @return
	 */
	public Map<String, Object> getSendParam(Map<String, Object> inputParam){
		
		Map<String, Object> params = new LinkedHashMap<>();
        //上面获取的token的逻辑
		String token = getACToken();
		String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
		String input = JSONObject.toJSONString(inputParam);
		log.info("本次接口发送参数:"+input);
         //对参数进行加密处理
		String inputDES = Des3Utils.get3DESEncryptECB(input, desKey);
		byte[] decoded = Base64.getDecoder().decode(inputDES);
		String inputHex = Des3Utils.byteToHexString(decoded);
		String subString = subSign(input, timestamp, token);
		String sign = MD5Util.getMd5(subString).toUpperCase();
       //拼接参数
		params.put("token", token);
		params.put("sign", sign);
		params.put("timestamp", timestamp);
		params.put("clientId", clientId);
		params.put("jsonData", inputHex);
		return params;
		
	}

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 要在 Java 中实现微信授权登录,需要按照以下步骤操作: 1. 在微信开放平台(https://open.weixin.qq.com/)申请微信登录的第三方平台资格,并获取相应的 AppID 和 AppSecret。 2. 使用 Java 的网络编程库(如 HttpClient)向微信的授权服务器发送请求,获取临时登录凭证(code)。 3. 使用 AppID 和 AppSecret 向微信的授权服务器发送请求,获取访问令牌(access_token)。 4. 使用访问令牌向微信的授权服务器发送请求,获取用户信息(如用户名、头像等)。 5. 将获取到的用户信息存储到数据库中,并在应用中使用。 具体的实现细节可以参考微信开放平台的文档(https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Authorization_Guide/Authorization_Code_Access_Token.html)或者搜索相关的资料。 ### 回答2: 要实现微信授权登录,可以通过以下步骤进行: 1. 首先,需要在微信开放平台上创建一个开发者账号,并创建一个应用。在创建应用时,会生成一个应用ID(AppID)和一个应用密钥(AppSecret)。 2. 在Java项目中,可以使用第三方开源库,如微信开放平台提供的官方Java SDK或其他第三方SDK来处理微信授权登录。这些库可以提供现成的API调用接口,简化开发过程。 3. 在Java代码中,需要使用生成的AppID和AppSecret,通过API调用进行微信登录授权。可以使用SDK提供的接口,如获取授权登录二维码、通过code获取用户授权信息等。 4. 在用户打开应用时,可以提供一个“微信登录”按钮,用户点击后,调用SDK提供的接口生成二维码,并将二维码展示给用户。用户使用微信扫描二维码后,会跳转到微信客户端进行授权。 5. 微信客户端会验证用户身份,并获取用户授权信息,如用户昵称、头像等。然后会将授权信息通过回调URL返回给开发者后台。 6. 开发者后台在接收到回调后,通过调用SDK提供的API,将回调中的授权信息进行验证和解析。可以通过验证信息,确定用户的身份,并获取用户基本信息。 7. 接下来,开发者可以根据用户的授权信息,进行相应的业务处理,如登录、注册、授权记录等。可以根据需要,将用户关联到自己的系统中。 总的来说,Java实现微信授权登录的关键就在于,通过API调用获取到微信用户的授权信息,并将之与自己的系统进行关联,以实现用户登录和相关业务处理。 ### 回答3: 要实现微信授权登录,首先需要了解微信开放平台的相关接口授权机制。 1. 注册微信开放平台账号并创建应用。在微信开放平台注册账号并创建应用,获得唯一的AppID和AppSecret。 2. 在后端服务器编写Java代码。使用Java编写后端服务器,监听微信的授权回调和请求,处理用户登录和授权。 3. 用户发起微信登录请求。在前端页面中,用户点击微信登录按钮,触发授权请求。 4. 后端发起授权请求。前端将用户请求的授权URL发送给后端服务器,后端服务器使用Java代码发起请求到微信服务器,携带AppID、AppSecret、授权回调地址等信息。 5. 微信回调授权页面。微信服务器验证请求合法性后,将用户重定向至授权页面,用户选择是否同意授权。 6. 获取授权访问凭证。用户同意授权后,微信服务器会携带一个授权码(code)重定向至预先设置的回调URL。后端服务器使用Java代码解析授权回调,获取授权码。 7. 获取访问令牌和用户信息。后端服务器再次发起请求,携带授权码等参数,获取访问令牌(access_token),以及用户的基本信息(如OpenID、头像等)。 8. 返回登录信息给前端。后端服务器使用Java代码处理获取到的用户信息,生成登录凭证,并返回给前端。前端根据返回的登录凭证,进行下一步的用户登录流程。 通过以上步骤,即可实现使用Java编程语言实现微信授权登录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋力向前123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值