java开放api_GitHub - 13851809588/sign-sdk-java: 开放平台api java语言的SDK

大众签章开放平台Api接口JAVA版SDK

环境说明:

1.您需要去大众签章开放平台注册一个开发者账号,并且申请一个应用,当您的应用经过审核之后,您将获得一个appid和appsecret,这两个参数决定了您在开放平台的身份标识,只有获得了这两个参数,您才有资格调用开放平台的api接口。

2.您需要凭借appid和appsecret先获取token,有些接口还需要传递签名值(后续会详细介绍),才可调用开放平台的api接口。

3.需要安装1.8或者以上的版本的JDK环境,maven版本最好在3.3.X以上版本编译。

4.sdk采用了lombok插件,所以您首先需要在您的IDE中安装lombok插件,详情可以参考lombok插件安装参考文档

安装依赖:

如果您使用Apache Maven来管理Java项目,只需在项目的pom.xml文件加入相应的依赖项即可。您可以在大众签章开放平台下载各版本的Maven依赖。您只需在pom.xml中声明以下依赖

com.github.aiosign.

sign-sdk-java

1.4.0

您也可以从github上直接拉取代码,然后运行mvn clean install命令安装到本地仓库中,如果您是直接从开放平台上下载的sdk,您也直接可以通过以下方式来引入依赖

com.github.aiosign.

sign-sdk-java

1.4.0

您的jar所在的路径

如果 maven 没有从中央存储库下载 jar 包,则需要将这些依赖项添加到pom.xml文件中,否则将报告 NoClassDefFoundError 异常

org.projectlombok

lombok

1.18.12

true

com.fasterxml.jackson.core

jackson-databind

2.10.2

compile

com.fasterxml.jackson.datatype

jackson-datatype-jdk8

2.10.2

compile

com.fasterxml.jackson.datatype

jackson-datatype-jsr310

2.10.2

compile

com.fasterxml.jackson.module

jackson-module-parameter-names

2.10.2

compile

ch.qos.logback

logback-classic

1.2.3

compile

net.jodah

expiringmap

0.5.8

junit

junit

4.12

test

true

使用说明:

以下这个代码示例向您展示了调用 Sign SDK for Java 的3个主要步骤:

1.创建http客户端实例并初始化。

2.创建API请求对象并设置参数。

3.发起请求并处理应答或异常。

package com.github.aiosign.;

import UserInfoRequest;

import UserInfoResponse;

import lombok.extern.slf4j.Slf4j;

import org.junit.Test;

/**

* @author yangyouwang

* @description 个人用户测试用例

* @since 2020/5/13

*/

@Slf4j

public class UserPersonalTest extends AbstractSignTest {

/**

* 查询用户详情信息

*/

@Test

public void userinfo() {

//创建用户请求对象

UserInfoRequest userInfoRequest = new UserInfoRequest();

// 用户id

userInfoRequest.setUserId("您的用户id");

//发起请求并获取响应值

UserInfoResponse response = signClient.execute(userInfoRequest);

log.info("响应状态:{}", response.getResultCode());

log.info("响应信息:{}", response.getResultMessage());

log.info("响应数据:{}", response.getData());

}

}

SDK中都有相关接口的测试用例,都已经经过相关测试,您可以修改参数执行相关方法。

额外说明

1.获取token

/**

* 获取token

*/

@Test

public void getToken(){

TokenRequest tokenRequest = new TokenRequest("appid", "appsecret");

TokenResponse response = signClient.execute(tokenRequest);

if (response.isSuccess()) {

System.out.println("获取token成功,响应值为"+response.getData());

}

}

SDK中接口获取token的操作都已经封装好了,获取token成功后会缓存起来,token失效后会重新获取,无需手动管理,token有效期为7200秒。

2.签名算法

开放平台api接口的所有的post请求并且请求头为json的接口添加了签名值的校验,签名算法的机制如下:

比如你的请求json为:

{

"app_id": "710510245885661184",

"app_secret": "UJhgoFkMShBtLXcqlC",

"grant_type": "client_credentials"

}

首先对字符串做去空格化处理(包括\r\n),然后对字符串做HmacSHA256算法,秘钥为您的appsecret,编码一定要为UTF-8,否则可能会导致获取的加密值不同,然后转为base64编码的字符串的加密字符串,最后对该字符串做MD5摘要,最后的字符串将作为最终的签名值。

签名的工具类代码如下:

package com.github.aiosign.utils;

import lombok.extern.slf4j.Slf4j;

import javax.crypto.Mac;

import javax.crypto.spec.SecretKeySpec;

import java.nio.charset.StandardCharsets;

import java.security.InvalidKeyException;

import java.security.NoSuchAlgorithmException;

import java.util.Base64;

/**

* 签名算法工具类

*

* @author modificial

* @version $Id: $Id

* @since 2020/3/26

*/

@Slf4j

public class SignUtils {

/**

* 签名算法 先将字符串做HmacSHA256签名,密钥key为appsecret,然后将字符串做MD5摘要,最后全部转为大写,得到最终签名值

*

* @param json the json string

* @param signKey the sign key

* @return the string

*/

public static String createSign(String json, String signKey) {

Assert.hasText(json, "待签名字符串不能为空");

Assert.hasText(signKey, "签名秘钥不能为空");

Assert.hasText(json, "签名类型不能为空");

json = StringUtils.trimAllWhitespace(json);

String hmacSha256Sign = createHmacSha256Sign(json, signKey);

if (StringUtils.isEmpty(hmacSha256Sign)) {

throw new IllegalStateException("生成签名失败");

}

return DigestUtils.md5DigestAsHex(

hmacSha256Sign.getBytes(StandardCharsets.UTF_8)).toUpperCase();

}

/**

* 校验签名是否正确.

*

* @param params 需要校验的参数 string

* @param signKey 校验的签名Key appsecret

* @param currentSign a {@link java.lang.String} object.

* @return true - 签名校验成功,false - 签名校验失败

*/

public static boolean checkSign(String params, String signKey, String currentSign) {

String sign = createSign(params, signKey);

return sign.equalsIgnoreCase(currentSign);

}

/**

* HmacSHA256签名

*

* @param message a {@link java.lang.String} object.

* @param key a {@link java.lang.String} object.

* @return a {@link java.lang.String} object.

*/

public static String createHmacSha256Sign(String message, String key) {

try {

Mac sha256 = Mac.getInstance("HmacSHA256");

SecretKeySpec secretKeySpec = new SecretKeySpec(

key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");

sha256.init(secretKeySpec);

byte[] bytes = sha256.doFinal(message.getBytes(StandardCharsets.UTF_8));

return Base64.getEncoder().encodeToString(bytes);

} catch (InvalidKeyException | NoSuchAlgorithmException var5) {

log.error(var5.getMessage(), var5);

return null;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值