This commit is contained in:
tanghc
2019-09-04 09:43:42 +08:00
parent 143237aeaf
commit 36ee797ea6
584 changed files with 1803 additions and 20788 deletions

View File

@@ -78,7 +78,7 @@ public class GetStoryRequest extends BaseRequest<GetStoryResponse> {
## 使用方式
```java
String url = "http://localhost:8081/api"; // zuul
String url = "http://localhost:8081";
String appId = "2019032617262200001";
String privateKey = "你的私钥";

View File

@@ -21,36 +21,85 @@ import java.util.Collections;
import java.util.Map;
/**
* 请求客户端
* 请求客户端,申明一个即可
*
* @author tanghc
*/
public class OpenClient {
private static final Log log = LogFactory.getLog(OpenClient.class);
/**
* 默认配置
*/
private static final OpenConfig DEFAULT_CONFIG = new OpenConfig();
/**
* 接口请求url
*/
private String url;
/**
* 平台提供的appId
*/
private String appId;
/**
* 开放平台提供的私钥
*/
private String privateKey;
/**
* 开放平台提供的公钥
*/
private String publicKeyPlatform;
/**
* 配置项
*/
private OpenConfig openConfig;
/**
* 请求对象
*/
private OpenRequest openRequest;
/**
* 节点处理
*/
private DataNameBuilder dataNameBuilder;
/**
* 构建请求客户端
*
* @param url 接口url
* @param appId 平台分配的appId
* @param privateKeyIsv 平台分配的私钥
*/
public OpenClient(String url, String appId, String privateKeyIsv) {
this(url, appId, privateKeyIsv, DEFAULT_CONFIG);
}
/**
* 构建请求客户端
*
* @param url 接口url
* @param appId 平台分配的appId
* @param privateKeyIsv 平台分配的私钥
* @param publicKeyPlatform 平台分配的公钥
*/
public OpenClient(String url, String appId, String privateKeyIsv, String publicKeyPlatform) {
this(url, appId, privateKeyIsv);
this.publicKeyPlatform = publicKeyPlatform;
}
/**
* 构建请求客户端
*
* @param url 接口url
* @param appId 平台分配的appId
* @param privateKeyIsv 平台分配的私钥
* @param openConfig 配置项
*/
public OpenClient(String url, String appId, String privateKeyIsv, OpenConfig openConfig) {
if (openConfig == null) {
throw new IllegalArgumentException("openConfig不能为null");
@@ -64,6 +113,15 @@ public class OpenClient {
this.dataNameBuilder = openConfig.getDataNameBuilder();
}
/**
* 构建请求客户端
*
* @param url 接口url
* @param appId 平台分配的appId
* @param privateKeyIsv 平台分配的私钥
* @param publicKeyPlatform 平台分配的公钥
* @param openConfig 配置项
*/
public OpenClient(String url, String appId, String privateKeyIsv, String publicKeyPlatform, OpenConfig openConfig) {
this(url, appId, privateKeyIsv, openConfig);
this.publicKeyPlatform = publicKeyPlatform;
@@ -124,6 +182,14 @@ public class OpenClient {
return openRequest.request(url, requestForm, header);
}
/**
* 解析返回结果
*
* @param resp 返回结果
* @param request 请求对象
* @param <T> 返回结果
* @return 返回对于的Response对象
*/
protected <T extends BaseResponse> T parseResponse(String resp, BaseRequest<T> request) {
String method = request.getMethod();
String rootNodeName = dataNameBuilder.build(method);
@@ -148,6 +214,17 @@ public class OpenClient {
return t;
}
/**
* 构建业务json内容。
* 假设返回的结果是:<br>
* {"alipay_story_get_response":{"msg":"Success","code":"10000","name":"海底小纵队","id":1},"sign":"xxx"}
* 将解析得到:<br>
* {"msg":"Success","code":"10000","name":"海底小纵队","id":1}
*
* @param rootNodeName 根节点名称
* @param body 返回内容
* @return 返回业务json
*/
protected String buildBizJson(String rootNodeName, String body) {
int indexOfRootNode = body.indexOf(rootNodeName);
if (indexOfRootNode < 0) {
@@ -161,17 +238,42 @@ public class OpenClient {
return result;
}
/**
* 获取业务结果,如下结果:<br>
* {"alipay_story_get_response":{"msg":"Success","code":"10000","name":"海底小纵队","id":1},"sign":"xxx"}
* 将返回:<br>
* {"msg":"Success","code":"10000","name":"海底小纵队","id":1}
*
* @param body 返回内容
* @param rootNodeName 根节点名称
* @param indexOfRootNode 根节点名称位置
* @return 返回业务json内容
*/
protected String buildJsonNodeData(String body, String rootNodeName, int indexOfRootNode) {
/*
得到起始索引位置。{"alipay_story_get_response":{"msg":"Success","code":"10000","name":"海底小纵队","id":1},"sign":"xxx"}
得到第二个`{`索引位置
*/
int signDataStartIndex = indexOfRootNode + rootNodeName.length() + 2;
// 然后这里计算出"sign"字符串所在位置
int indexOfSign = body.indexOf("\"" + openConfig.getSignName() + "\"");
if (indexOfSign < 0) {
return null;
}
int length = indexOfSign - 1;
// 根据起始位置和长度截取出json{"msg":"Success","code":"10000","name":"海底小纵队","id":1}
return body.substring(signDataStartIndex, length);
}
protected <T extends BaseResponse> boolean checkResponseSign(String signContent, String sign, String publicKeyPlatform) {
/**
* 校验返回结果中的sign
*
* @param signContent 校验内容
* @param sign sign
* @param publicKeyPlatform 平台公钥
* @return true正确
*/
protected boolean checkResponseSign(String signContent, String sign, String publicKeyPlatform) {
try {
String charset = this.openConfig.getCharset();
String signType = this.openConfig.getSignType();

View File

@@ -1,23 +0,0 @@
package com.gitee.sop.sdk.common;
/**
* @deprecated 已废弃使用com.gitee.sop.sdk.common.OpenConfig
* @author tanghc
*/
@Deprecated
public class SdkConfig {
public static String SUCCESS_CODE = "10000";
public static String DEFAULT_VERSION = "1.0";
public static String FORMAT_TYPE = "json";
public static String TIMESTAMP_PATTERN = "yyyy-MM-dd HH:mm:ss";
public static String CHARSET = "UTF-8";
public static String SIGN_TYPE = "RSA2";
public static volatile DataNameBuilder dataNameBuilder = new DefaultDataNameBuilder();
}

View File

@@ -22,7 +22,7 @@ import java.util.List;
import java.util.Map;
public class SdkTest extends TestCase {
String url = "http://localhost:8081/api"; // zuul
String url = "http://localhost:8081";
String appId = "2019032617262200001";
/** 开发者私钥 */
String privateKeyIsv = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCXJv1pQFqWNA/++OYEV7WYXwexZK/J8LY1OWlP9X0T6wHFOvxNKRvMkJ5544SbgsJpVcvRDPrcxmhPbi/sAhdO4x2PiPKIz9Yni2OtYCCeaiE056B+e1O2jXoLeXbfi9fPivJZkxH/tb4xfLkH3bA8ZAQnQsoXA0SguykMRZntF0TndUfvDrLqwhlR8r5iRdZLB6F8o8qXH6UPDfNEnf/K8wX5T4EB1b8x8QJ7Ua4GcIUqeUxGHdQpzNbJdaQvoi06lgccmL+PHzminkFYON7alj1CjDN833j7QMHdPtS9l7B67fOU/p2LAAkPMtoVBfxQt9aFj7B8rEhGCz02iJIBAgMBAAECggEARqOuIpY0v6WtJBfmR3lGIOOokLrhfJrGTLF8CiZMQha+SRJ7/wOLPlsH9SbjPlopyViTXCuYwbzn2tdABigkBHYXxpDV6CJZjzmRZ+FY3S/0POlTFElGojYUJ3CooWiVfyUMhdg5vSuOq0oCny53woFrf32zPHYGiKdvU5Djku1onbDU0Lw8w+5tguuEZ76kZ/lUcccGy5978FFmYpzY/65RHCpvLiLqYyWTtaNT1aQ/9pw4jX9HO9NfdJ9gYFK8r/2f36ZE4hxluAfeOXQfRC/WhPmiw/ReUhxPznG/WgKaa/OaRtAx3inbQ+JuCND7uuKeRe4osP2jLPHPP6AUwQKBgQDUNu3BkLoKaimjGOjCTAwtp71g1oo+k5/uEInAo7lyEwpV0EuUMwLA/HCqUgR4K9pyYV+Oyb8d6f0+Hz0BMD92I2pqlXrD7xV2WzDvyXM3s63NvorRooKcyfd9i6ccMjAyTR2qfLkxv0hlbBbsPHz4BbU63xhTJp3Ghi0/ey/1HQKBgQC2VsgqC6ykfSidZUNLmQZe3J0p/Qf9VLkfrQ+xaHapOs6AzDU2H2osuysqXTLJHsGfrwVaTs00ER2z8ljTJPBUtNtOLrwNRlvgdnzyVAKHfOgDBGwJgiwpeE9voB1oAV/mXqSaUWNnuwlOIhvQEBwekqNyWvhLqC7nCAIhj3yvNQKBgQCqYbeec56LAhWP903Zwcj9VvG7sESqXUhIkUqoOkuIBTWFFIm54QLTA1tJxDQGb98heoCIWf5x/A3xNI98RsqNBX5JON6qNWjb7/dobitti3t99v/ptDp9u8JTMC7penoryLKK0Ty3bkan95Kn9SC42YxaSghzqkt+uvfVQgiNGQKBgGxU6P2aDAt6VNwWosHSe+d2WWXt8IZBhO9d6dn0f7ORvcjmCqNKTNGgrkewMZEuVcliueJquR47IROdY8qmwqcBAN7Vg2K7r7CPlTKAWTRYMJxCT1Hi5gwJb+CZF3+IeYqsJk2NF2s0w5WJTE70k1BSvQsfIzAIDz2yE1oPHvwVAoGAA6e+xQkVH4fMEph55RJIZ5goI4Y76BSvt2N5OKZKd4HtaV+eIhM3SDsVYRLIm9ZquJHMiZQGyUGnsvrKL6AAVNK7eQZCRDk9KQz+0GKOGqku0nOZjUbAu6A2/vtXAaAuFSFx1rUQVVjFulLexkXR3KcztL1Qu2k5pB6Si0K/uwQ=";