parent
92c14644d4
commit
e0732c4264
@ -0,0 +1,175 @@ |
||||
package com.gitee.sop.test; |
||||
|
||||
import com.alibaba.fastjson.JSON; |
||||
import com.gitee.sop.test.alipay.AlipayApiException; |
||||
import com.gitee.sop.test.alipay.AlipaySignature; |
||||
import lombok.Data; |
||||
|
||||
import java.io.IOException; |
||||
import java.text.SimpleDateFormat; |
||||
import java.util.Collections; |
||||
import java.util.Date; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* 简易客户端 |
||||
* @author tanghc |
||||
*/ |
||||
@Data |
||||
public class Client { |
||||
private static HttpTool httpTool = new HttpTool(); |
||||
|
||||
private String url; |
||||
private String appId; |
||||
private String privateKey; |
||||
|
||||
private Callback callback; |
||||
|
||||
public Client(String url, String appId, String privateKey) { |
||||
this.url = url; |
||||
this.appId = appId; |
||||
this.privateKey = privateKey; |
||||
} |
||||
|
||||
public Client(String url, String appId, String privateKey, Callback callback) { |
||||
this.url = url; |
||||
this.appId = appId; |
||||
this.privateKey = privateKey; |
||||
this.callback = callback; |
||||
} |
||||
|
||||
public String execute(RequestBuilder requestBuilder) { |
||||
RequestInfo requestInfo = requestBuilder.build(appId, privateKey); |
||||
HttpTool.HTTPMethod httpMethod = requestInfo.getHttpMethod(); |
||||
boolean postJson = requestInfo.isPostJson(); |
||||
Map<String, ?> form = requestInfo.getForm(); |
||||
Map<String, String> header = requestInfo.getHeader(); |
||||
String requestUrl = requestInfo.getUrl() != null ? requestInfo.getUrl() : url; |
||||
String responseData = null; |
||||
try { |
||||
// 发送请求
|
||||
if (httpMethod == HttpTool.HTTPMethod.POST && postJson) { |
||||
responseData = httpTool.requestJson(requestUrl, JSON.toJSONString(form), header); |
||||
} else { |
||||
responseData = httpTool.request(requestUrl, form, header, httpMethod); |
||||
} |
||||
} catch (IOException e) { |
||||
throw new RuntimeException(e); |
||||
} |
||||
if (callback != null) { |
||||
callback.callback(requestInfo, responseData); |
||||
} |
||||
return responseData; |
||||
} |
||||
|
||||
public interface Callback { |
||||
void callback(RequestInfo requestInfo, String responseData); |
||||
} |
||||
|
||||
public static class RequestBuilder { |
||||
private static final String DEFAULT_VERSION = "1.0"; |
||||
|
||||
private String url; |
||||
private String method; |
||||
private String version = DEFAULT_VERSION; |
||||
private Map<String, String> bizContent; |
||||
private HttpTool.HTTPMethod httpMethod; |
||||
private Map<String, String> header; |
||||
private boolean ignoreSign; |
||||
private boolean postJson; |
||||
|
||||
public RequestBuilder url(String url) { |
||||
this.url = url; |
||||
return this; |
||||
} |
||||
|
||||
public RequestBuilder method(String method) { |
||||
this.method = method; |
||||
return this; |
||||
} |
||||
|
||||
public RequestBuilder version(String version) { |
||||
this.version = version; |
||||
return this; |
||||
} |
||||
|
||||
public RequestBuilder bizContent(Map<String, String> bizContent) { |
||||
this.bizContent = bizContent; |
||||
return this; |
||||
} |
||||
|
||||
public RequestBuilder httpMethod(HttpTool.HTTPMethod httpMethod) { |
||||
this.httpMethod = httpMethod; |
||||
return this; |
||||
} |
||||
|
||||
public RequestBuilder header(Map<String, String> header) { |
||||
this.header = header; |
||||
return this; |
||||
} |
||||
|
||||
public RequestBuilder ignoreSign(boolean ignoreSign) { |
||||
this.ignoreSign = ignoreSign; |
||||
return this; |
||||
} |
||||
|
||||
public RequestBuilder postJson(boolean postJson) { |
||||
this.postJson = postJson; |
||||
return this; |
||||
} |
||||
|
||||
|
||||
public RequestInfo build(String appId, String privateKey) { |
||||
// 公共请求参数
|
||||
Map<String, String> params = new HashMap<String, String>(); |
||||
params.put("app_id", appId); |
||||
if (method != null) { |
||||
params.put("method", method); |
||||
} |
||||
if (version != null) { |
||||
params.put("version", version); |
||||
} |
||||
params.put("format", "json"); |
||||
params.put("charset", "utf-8"); |
||||
params.put("sign_type", "RSA2"); |
||||
params.put("timestamp", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); |
||||
|
||||
// 业务参数
|
||||
params.put("biz_content", JSON.toJSONString(bizContent == null ? Collections.emptyMap() : bizContent)); |
||||
|
||||
if (!ignoreSign) { |
||||
String content = AlipaySignature.getSignContent(params); |
||||
String sign = null; |
||||
try { |
||||
sign = AlipaySignature.rsa256Sign(content, privateKey, "utf-8"); |
||||
} catch (AlipayApiException e) { |
||||
throw new RuntimeException(e); |
||||
} |
||||
params.put("sign", sign); |
||||
} |
||||
|
||||
RequestInfo requestInfo = new RequestInfo(); |
||||
requestInfo.setUrl(url); |
||||
requestInfo.setMethod(method); |
||||
requestInfo.setVersion(version); |
||||
requestInfo.setForm(params); |
||||
requestInfo.setHeader(header); |
||||
requestInfo.setPostJson(postJson); |
||||
requestInfo.setHttpMethod(httpMethod); |
||||
return requestInfo; |
||||
} |
||||
} |
||||
|
||||
@Data |
||||
public static class RequestInfo { |
||||
private String url; |
||||
private String method; |
||||
private String version; |
||||
private boolean postJson; |
||||
private Map<String, ?> form; |
||||
private Map<String, String> header; |
||||
private HttpTool.HTTPMethod httpMethod; |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue