1、订单创建、支付及订单处理流程图
2、创建HTTP客户端工具类
@Slf4j
public class HttpclientUtil {
//类中定义了一个私有静态成员变量instance,并且将其初始化为HttpclientUtil类的一个实例,用于实现单例模式。
private static HttpclientUtil instance = new HttpclientUtil();
//定义了一个公共静态方法getInstance(),用于获取HttpclientUtil类的实例,因为构造函数是私有的,所以只能通过该静态方法获取类的实例
public static HttpclientUtil getInstance() {
return instance;
}
//定义了一个名为payGet的公共方法,用于发送HTTP GET请求,并接收一个字符串参数uri,表示要请求的目标资源的URI
public PayResp payGet(String uri) {
//首先创建了一个CloseableHttpClient对象httpClient,并利用HttpClientBuilder类的create()方法来构建一个默认的CloseableHttpClient实例
//获得Http客户端(可以理解为:你得先有一个浏览器;注意:实际上HttpClient与浏览器是不一样的)
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
log.debug("远程连接:{uri}", uri);
//创建了一个HttpGet对象httpGet,并传入目标资源的URI
HttpGet httpGet = new HttpGet(uri);
//定义了一个PayResp类型的变量r,用于存储HTTP响应的结果
PayResp r = null;
//响应
//创建了一个CloseableHttpResponse对象response,并尝试执行HTTP GET请求,并将响应结果赋值给response
CloseableHttpResponse response = null;
try {
response = httpClient.execute(httpGet);
//然后从响应的实体中获取到返回的JSON字符串,并利用JSONObject进行解析,将其转换为PayResp对象
HttpEntity entity = response.getEntity();
JSONObject json = new JSONObject(EntityUtils.toString(entity));
r = json.toBean(PayResp.class);
log.debug("获取远程对象:{}", r);
} catch (Exception e) {
e.printStackTrace();
} finally {
//在try...catch块中捕获可能发生的异常,并在finally块中释放相关资源,包括关闭httpClient和response
try {
// 释放资源
if (httpClient != null) {
httpClient.close();
}
if (response != null) {
response.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
//最后返回r对象,即HTTP响应结果的PayResp对象
return r;
}
}
3、实体类及数据库表
1. 订单表
2. 订单详情表order_details_tab(略)
3. 商品表goods_tab(略)
4. 支付表payment_tab(略)
5. 交易表transaction_tab(略)
4、具体业务及其实现逻辑
未完待续。。。