抖音会员通接入文档:Docs
一、下载SDK
下载完成的jar包参考文章maven导入本地jar_开心是星星的博客-CSDN博客_maven 导入本地jar,生成pom包,引入依赖
<dependency>
<groupId>douyin.mem</groupId>
<artifactId>doudian-sdk-java</artifactId>
<version>1.1.0</version>
</dependency>
二、参数接收
@GetMapping(value = "/bind", produces = {"application/json;charset=UTF-8"})
@ResponseBody
public Map<String, Object> bind(@RequestParam Map<String, String> params) {
return dyService.bind(params);
}
produces = {"application/json;charset=UTF-8"}设置为utf-8编码接收模式
对接过程中,出现了url为 xxxxx/app_key=3409409348479354011×tamp=2021-06-06 13:39:42&sign=8abb21bcfc4cc7ba4a501e2dc73a5e0c',请求体为{"shop_id":13455,"change_id":"2737186442101036","open_id":"#zuLyd4U4J3p+czzXkwg+ZQ673h7KTcrKOddb5iPGAAE0K3MYJmgXEXof9LDtoScAfMKvdVRqpAL4CEI3SrLwYATIzTF9Qw==","amount":100,"action_type":"PointActivity","code":"57454564676","union_id":"#gYlBEpb2U7HGl4PJ7wMgU3o5fdGsCyt4f1GeLfH4AKsirprEU75eFzQfxH/n0bONVbXzfQ=="},既要接收url上的部分参数也要接收请求体中的参数。解决方案:
@PostMapping(value = "/inpoint", produces = {"application/json;charset=UTF-8"})
@ResponseBody
public Map<String, Object> inpoint(@RequestParam("app_key") String app_key,@RequestParam("timestamp") String timestamp,@RequestParam("sign") String sign,@RequestBody DyPoints dyPoints) {
Map<String, Object> map = dyPointsService.inpoint(dyPoints,timestamp,sign);
System.out.println(map);
return map;
}
三、接收的参数转实体
接收参数类型 Map<String, String> params
String param_json = params.get("param_json").toString();
DyMem mem = JSON.parseObject(param_json, DyMem.class);
DyMem实体一一对应json中的字段
四、获取Response中的"":""不同类型的数据
OrderSearchListResponse response = request.execute(accessToken);
//获取response.toString()中"code"的值
String code = DylkUtil.getString(response.toString(), "code");
public static String getString(String result, String responce) {
JSONObject s = JSON.parseObject(result);
String data = s.getString(responce);
return data;
}
//转换"[{},{},{}]"为List<Map<String, Object>>
String jsonValue = DylkUtil.getString((DylkUtil.getString(nresponse.toString(), "data")), "shop_order_list");
List<Map<String, Object>> maps = DyJsonUtil.jsonStr2List(jsonValue);
public static List<Map<String, Object>> jsonStr2List(String jsonStr) throws Exception {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
JSONArray ja = new JSONArray(jsonStr);
for (int j = 0; j < ja.length(); j++) {
String jm = ja.getString(j);
if (jm.indexOf("{") == 0) {
Map<String, Object> m = jsonStr2Map(jm);
list.add(m);
}
}
return list;
}
//判断值的不同类型
if (productName instanceof String) {
//String类型
detailpojo.setProduct_name((String) detailmap.get("product_name"));
} else if (productName instanceof ArrayList) {
//ArrayList类型
String list_str = StringUtils.join((ArrayList<String>) detailmap.get("product_name"), ",");
detailpojo.setProduct_name(list_str);
} else {
detailpojo.setProduct_name("产品名称存储类型出错");
}
五、时间戳的处理
获取13位或10位时间戳,13位时间戳是到毫秒级的,10位时间戳是到秒级的
@len :传入的位数
public static String genTimestamp(int len) {
String ts = String.valueOf(System.currentTimeMillis()).toString().substring(0, len);
return ts;
}
Long timeend = Long.parseLong(DateUtil.genTimestamp(10));
//可以增加、减少秒级
Long timestart = timeend + minute * 60;
六、Get方式前端传值存在特殊符号
如这种xxxx?params={"name":"zs","age":18}类型的url,使用postman测试时会出现404的报错
解决方案:
@Bean
public TomcatServletWebServerFactory webServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");
connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}");
}
});
return factory;
}
注意:在项目中有gateway网关的情况下,需要在网关中进行bean注入