From c19686d00317f3dbd31eaaf31df3f5922902e355 Mon Sep 17 00:00:00 2001 From: tanghc Date: Mon, 2 Sep 2019 14:35:13 +0800 Subject: [PATCH] 2.0 --- .../sdk-csharp/SDKCSharp/Client/OpenClient.cs | 101 +++++++++++++++-- .../com/gitee/sop/sdk/client/OpenClient.java | 106 +++++++++++++++++- 2 files changed, 198 insertions(+), 9 deletions(-) diff --git a/sop-sdk/sdk-csharp/SDKCSharp/Client/OpenClient.cs b/sop-sdk/sdk-csharp/SDKCSharp/Client/OpenClient.cs index 427db732..f4a7ac67 100644 --- a/sop-sdk/sdk-csharp/SDKCSharp/Client/OpenClient.cs +++ b/sop-sdk/sdk-csharp/SDKCSharp/Client/OpenClient.cs @@ -16,50 +16,112 @@ using Newtonsoft.Json.Linq; namespace SDKCSharp.Client { /// - /// 客户端 + /// 客户端,申明一个即可 /// public class OpenClient { - + /// + /// 默认配置 + /// private static OpenConfig DEFAULT_CONFIG = new OpenConfig(); private Dictionary header = new Dictionary(); - + /// + /// 接口请求url + /// private string url; + + /// + /// 平台提供的appId + /// private string appId; + + /// + /// 开放平台提供的私钥 + /// private string privateKey; + + /// + /// 开放平台提供的公钥 + /// private string publicKeyPlatform; + /// + /// 配置项 + /// private OpenConfig openConfig; + + /// + /// 请求对象 + /// private OpenRequest openRequest; - private DataNameBuilder dataNameBuilder; + /// + /// 节点处理 + /// + private DataNameBuilder dataNameBuilder; - public OpenClient(string url, string appId, string privateKey) + /// + /// 构建请求客户端 + /// + /// 接口url + /// 平台分配的appId + /// 平台分配的私钥 + public OpenClient(string url, string appId, string privateKey) : this(url, appId, privateKey,false, DEFAULT_CONFIG) { - + } + /// + /// 构建请求客户端 + /// + /// 接口url + /// 平台分配的appId + /// 平台分配的私钥 + /// 平台分配的公钥 public OpenClient(string url, string appId, string privateKey, string publicKeyPlatform) : this(url, appId, privateKey) { this.publicKeyPlatform = publicKeyPlatform; } - public OpenClient(string url, string appId, string privateKey, bool priKeyFromFile) + /// + /// 构建请求客户端 + /// + /// 接口url + /// 平台分配的appId + /// 平台分配的私钥 + /// 如果设置 true 从文件中加载私钥 + public OpenClient(string url, string appId, string privateKey, bool priKeyFromFile) : this(url, appId, privateKey, priKeyFromFile, DEFAULT_CONFIG) { } + /// + /// 构建请求客户端 + /// + /// 接口url + /// 平台分配的appId + /// 平台分配的私钥 + /// 如果设置 true 从文件中加载私钥 + /// 平台分配的公钥 public OpenClient(string url, string appId, string privateKey, bool priKeyFromFile, string publicKeyPlatform) : this(url, appId, privateKey, priKeyFromFile) { this.publicKeyPlatform = publicKeyPlatform; } + /// + /// 构建请求客户端 + /// + /// 接口url + /// 平台分配的appId + /// 平台分配的私钥 + /// 如果设置 true 从文件中加载私钥 + /// 配置项 public OpenClient(string url, string appId, string privateKey,bool priKeyFromFile, OpenConfig openConfig) { this.url = url; @@ -75,6 +137,15 @@ namespace SDKCSharp.Client this.dataNameBuilder = openConfig.DataNameBuilder; } + /// + /// 构建请求客户端 + /// + /// 接口url + /// 平台分配的appId + /// 平台分配的私钥 + /// 如果设置 true 从文件中加载私钥 + /// 平台分配的公钥 + /// 配置项 public OpenClient(string url, string appId, string privateKey, bool priKeyFromFile, string publicKeyPlatform, OpenConfig openConfig) : this(url, appId, privateKey, priKeyFromFile, openConfig) { @@ -203,6 +274,14 @@ namespace SDKCSharp.Client } } + /// + /// 构建业务json内容。 + /// 假设返回的结果是:{"alipay_story_get_response":{"msg":"Success","code":"10000","name":"海底小纵队","id":1},"sign":"xxx"} + /// 将解析得到:{"msg":"Success","code":"10000","name":"海底小纵队","id":1} + /// + /// The biz json. + /// 根节点名称. + /// 返回内容. protected virtual string BuildBizJson(string rootNodeName, string body) { int indexOfRootNode = body.IndexOf(rootNodeName); @@ -219,6 +298,14 @@ namespace SDKCSharp.Client return result; } + /// + /// 获取业务结果,如下结果:{"alipay_story_get_response":{"msg":"Success","code":"10000","name":"海底小纵队","id":1},"sign":"xxx"} + /// 将返回:{"msg":"Success","code":"10000","name":"海底小纵队","id":1} + /// + /// The json node data. + /// Body. + /// Root node. + /// Index of root node. protected virtual string BuildJsonNodeData(string body, string rootNode, int indexOfRootNode) { int signDataStartIndex = indexOfRootNode + rootNode.Length + 2; diff --git a/sop-sdk/sdk-java/src/main/java/com/gitee/sop/sdk/client/OpenClient.java b/sop-sdk/sdk-java/src/main/java/com/gitee/sop/sdk/client/OpenClient.java index 61aec6aa..342a5af1 100644 --- a/sop-sdk/sdk-java/src/main/java/com/gitee/sop/sdk/client/OpenClient.java +++ b/sop-sdk/sdk-java/src/main/java/com/gitee/sop/sdk/client/OpenClient.java @@ -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 返回结果 + * @return 返回对于的Response对象 + */ protected T parseResponse(String resp, BaseRequest request) { String method = request.getMethod(); String rootNodeName = dataNameBuilder.build(method); @@ -148,6 +214,17 @@ public class OpenClient { return t; } + /** + * 构建业务json内容。 + * 假设返回的结果是:
+ * {"alipay_story_get_response":{"msg":"Success","code":"10000","name":"海底小纵队","id":1},"sign":"xxx"} + * 将解析得到:
+ * {"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; } + /** + * 获取业务结果,如下结果:
+ * {"alipay_story_get_response":{"msg":"Success","code":"10000","name":"海底小纵队","id":1},"sign":"xxx"} + * 将返回:
+ * {"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 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();