package com.pospal.openplatform;
import com.alibaba.fastjson.JSON;
import com.pospal.openplatform.common.Constants;
import com.pospal.openplatform.product.Product;
import com.pospal.openplatform.product.ProductPageRequest;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import org.springframework.util.DigestUtils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.GZIPInputStream;
/**
* 该类用于测试分页查询商品
*/
public class Main {
//分页查询全部商品信息
private static final String QUERY_PRODUCT_PAGES_URL = "customerOpenapi/queryBytel";
public static void main(String[] args) throws IOException {
ProductPageRequest productPageRequest = new ProductPageRequest();
productPageRequest.setAppId(Constants.APP_ID);
boolean queryNextPage;
List<Product> allProducts = new ArrayList<>();
String json = JSON.toJSONString(productPageRequest);
String httpResponseContent = sendPost(QUERY_PRODUCT_PAGES_URL, json);
System.out.println("返回值:" + httpResponseContent);
System.out.println(String.format("总共返回%d个商品", allProducts.size()));
}
private static String sendPost(String url, String json) throws IOException {
OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("application/json");
//1:appKey,请求体 拼接 2:md5 加密 3:转为大写
String dataSignature = DigestUtils.md5DigestAsHex((Constants.APP_KEY + json).getBytes()).toUpperCase();
RequestBody body = RequestBody.create(mediaType, json);
Request request = new Request.Builder()
.url(Constants.HOST + url)
.method("POST", body)
.addHeader("data-signature", dataSignature)
.addHeader("User-Agent", "openApi")
.addHeader("accept-encoding", "gzip,deflate")
.addHeader("time-stamp", String.valueOf(System.currentTimeMillis()))
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();
return dealGzip(response);
}
//返回内容有可能是gzip压缩过的。根据response header 中的Content-Encoding自行解压
private static String dealGzip(Response response) throws IOException {
String contenEncodingHeader = response.header("Content-Encoding");
if ("gzip".equals(contenEncodingHeader)) {
InputStream inputStream = response.body().byteStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPInputStream gunzip = new GZIPInputStream(inputStream);
byte[] buffer = new byte[256];
int n;
while ((n = gunzip.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
return out.toString("utf-8");
}
return response.body().string();
}
}
写成什么类?业务类吗,然后在main方法中调用?
package com.pospal.openplatform;
import com.alibaba.fastjson.JSON;
import com.pospal.openplatform.common.Constants;
import com.pospal.openplatform.product.Product;
import com.pospal.openplatform.product.ProductPageRequest;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import org.springframework.util.DigestUtils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.GZIPInputStream;
/**
* 该类用于测试分页查询商品
*/
@Controller
public class MainController {
//分页查询全部商品信息
private static final String QUERY_PRODUCT_PAGES_URL = "customerOpenapi/queryBytel";
@RequestMapping("/getProduct")
@ResponseBody
public String getProduct() throws IOException {
ProductPageRequest productPageRequest = new ProductPageRequest();
productPageRequest.setAppId(Constants.APP_ID);
boolean queryNextPage;
List<Product> allProducts = new ArrayList<>();
String json = JSON.toJSONString(productPageRequest);
String httpResponseContent = sendPost(QUERY_PRODUCT_PAGES_URL, json);
System.out.println("返回值:" + httpResponseContent);
return String.format("总共返回%d个商品", allProducts.size());
}
public static String sendPost(String url, String json) throws IOException {
OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("application/json");
//1:appKey,请求体 拼接 2:md5 加密 3:转为大写
String dataSignature = DigestUtils.md5DigestAsHex((Constants.APP_KEY + json).getBytes()).toUpperCase();
RequestBody body = RequestBody.create(mediaType, json);
Request request = new Request.Builder()
.url(Constants.HOST + url)
.method("POST", body)
.addHeader("data-signature", dataSignature)
.addHeader("User-Agent", "openApi")
.addHeader("accept-encoding", "gzip,deflate")
.addHeader("time-stamp", String.valueOf(System.currentTimeMillis()))
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();
return dealGzip(response);
}
//返回内容有可能是gzip压缩过的。根据response header 中的Content-Encoding自行解压
private static String dealGzip(Response response) throws IOException {
String contenEncodingHeader = response.header("Content-Encoding");
if ("gzip".equals(contenEncodingHeader)) {
InputStream inputStream = response.body().byteStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPInputStream gunzip = new GZIPInputStream(inputStream);
byte[] buffer = new byte[256];
int n;
while ((n = gunzip.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
return out.toString("utf-8");
}
return response.body().string();
}
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!