高德调用商家服务
1 商家接口定义及环境配置工作
1.1 商家接口定义规则
例如商家要接入的SPI:amap.hotel.getPoiInfoList
则商家接入该SPI需要定义的接口path为:/hotel/getPoiInfoList (接口定义规则:去掉SPI开头的[amap]后将剩下内容中的点替换成/即可)
则高德请求商家接口的完整地址为:http://商家公网域名地址/hotel/getPoiInfoList
1.2 商家公网域名地址配置
商家登录「高德云店平台」,进入「控制台」->「商家中心」->「商家信息」页面(如果尚未完成主体认证和行业认证,请先参考https://x-one.amap.com/docs/public/sop 完成认证后继续),点击对应行业接入准备配置进入「接入准备及配置」页面。
预览
进入「接入准备及配置」页面,填写开发环境以及生产环境,保存后点击生效配置。
预览
注意3点:
测试网关:需要填写公网环境可以访问的商家测试网关地址,地址不要以“/”结尾。正确示例如:http://www.test.com
生产网关:需要填写公网环境可以访问的商家生产网关地址,地址填写规则同测试网关,注意商家在上线前需要check该网关地址,一但接口上线,商家将由于保障线上安全原因无法自行变更地址
配置填写完成后请务必点击生效配置,否则后台不会更新商家公网地址
2 高德调用商家接口协议规范
2.1 调用接口协议
网络传输协议 http/https
数据提交方法 POST
请求Content-Type application/x-www-form-urlencoded
响应Content-Type application/json;charset=UTF-8
签名算法 RSA2
字符集 UTF-8
_
2.2 请求参数格式
规格
参数名 类型 是否必须 默认值 备注
utc_timestamp String 是 请求时间戳(毫秒)
version String 是 1.0 版本号
charset String 是 UTF-8 字符串编码
method String 是 SPI名称
sign String 是 签名内容
sign_type String 是 RSA2 签名类型
app_id String 是 商家的应用id
biz_content String 是 高德请求商家接口的业务参数
_
postman示例
预览
curl(可以导入postman参考)
1curl --location --request POST 'http://shellcpoptest.vaiwan.cn/hotel/getPoiIdList' \
2--header 'Content-Type: application/x-www-form-urlencoded' \
3--data-urlencode 'utc_timestamp=1666936656706' \
4--data-urlencode 'version=1.0' \
5--data-urlencode 'charset=UTF-8' \
6--data-urlencode 'method=amap.brand.createShop.audit.callback' \
7--data-urlencode 'sign=W3p3dwa9udsLwoX79xlQ9aZu4nQltYth47poHhnzUEgVsv4cj8te04C2Awmc3+1a8Q/8M82J9YluyO1NrSQ2tB30qFOQiWwwgCDUpDD/SZ8gb0v168qGQfe3SdV1d2hnKQH1t+vqOiQfFs5c5+cFi7Kdr7L8OjHcIg7Oeg6aPk/EVhJqeXqpqaW/S6FBAHUp2xl5kxrXlK8rd//RDLYe+y5qkGzngcJisyH82d0E/83TJMHv86DX0frrpMjwLRc9RmzdSLXzaPU3gQaPq1DqMNLJRzqcOtPPVk929LW4TP0aDNsDP/wmWwuR1T7fQ3lwJ3kBfP8VD5Rx1ZJx35W4gA==' \
8--data-urlencode 'sign_type=RSA2' \
9--data-urlencode 'app_id=202210130194031937' \
10--data-urlencode 'biz_content={"shopStatus":1,"merchantId":"8888777711119999","cpid":"456","source":"example_api","shopId":"123"}'
2.3 响应格式
规格
字段 类型 是否必填 描述
response object 是 json对象,统一返回格式包装
_
response
字段 类型 是否必填 描述
code String 是 状态码,10000表示成功,40004表示业务处理失败
msg String 是 描述
data Object 是 请参考具体接口详情文档定义
_
响应示例
1{
2 "response": {
3 "code": "10000", //code值10000.表示接口响应成功
4 "msg": "success",
5 "data": {
6 "name": "lisi"
7 }
8 }
9}
1{
2 "response": {
3 "code": "40004", //code非10000.表示接口响应失败
4 "msg": "错误信息或者异常描述..."
5 }
6}
7
3 代码示例
3.1 商家实现接口Java版本示例
1import com.alibaba.fastjson.JSONObject;
2import org.springframework.http.MediaType;
3import org.springframework.web.bind.annotation.RequestMapping;
4import org.springframework.web.bind.annotation.RequestMethod;
5import org.springframework.web.bind.annotation.RequestParam;
6import org.springframework.web.bind.annotation.RestController;
7
8import java.util.Map;
9
10/**
11 * 高德请求商家接口开发示例,仅供参考
12 * 本示例中使用到fastJson提供json序列化能力,仅作为参考
13 *
14 * @author 高小德
15 */
16@RestController
17@RequestMapping(value = "/hotel")
18public class AmapToCpController {
19
20 @RequestMapping(value = "/getPoiInfoList", method = RequestMethod.POST,
21 consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
22 public BizResponse getPoiInfoList(@RequestParam Map
23
24 //TODO: 按照商家实际需求决定是否验签,验签的目的是确保数据在传输过程中没有被恶意修改
25 //验签方法参考签名验签帮助文档 https://x-one.amap.com/docs/public/sign_verify
26 //CheckSignUtils.checkSign(requestMap);
27
28 // 商家处理业务逻辑
29 String bizContent = requestMap.get("biz_content");
30 Object resultObj = processBiz(bizContent);
31
32 // 异常或业务处理失败返回
33 // return failResponse();
34
35 //业务处理成功返回, resultObj
36 return successResponse(resultObj);
37 }
38
39 private Object processBiz(String bizContent) {
40 //TODO: 商家处理业务逻辑
41 return new JSONObject();
42 //return new JSONArray();
43 }
44
45 private BizResponse successResponse(Object respData) {
46 // 商家成功响应
47 Response successResp = new Response();
48 // 成功响应code固定为10000
49 successResp.setCode("10000");
50 successResp.setMsg("请求成功");
51 successResp.setData(respData);
52 return new BizResponse(successResp);
53 }
54
55 private BizResponse failResponse() {
56 // 商家失败响应
57 Response failResp = new Response();
58 // 业务异常响应code默认为40004,可以根据具体接口文档定义
59 failResp.setCode("40004");
60 failResp.setMsg("接口异常");
61 return new BizResponse(failResp);
62 }
63
64 public static class BizResponse {
65 private Response response;
66
67 public BizResponse(Response response) {
68 this.response = response;
69 }
70
71 public Response getResponse() {
72 return response;
73 }
74
75 public void setResponse(Response response) {
76 this.response = response;
77 }
78 }
79
80 public static class Response {
81 private String code;
82 private String msg;
83 private Object data;
84
85 public String getCode() {
86 return code;
87 }
88
89 public void setCode(String code) {
90 this.code = code;
91 }
92
93 public String getMsg() {
94 return msg;
95 }
96
97 public void setMsg(String msg) {
98 this.msg = msg;
99 }
100
101 public Object getData() {
102 return data;
103 }
104
105 public void setData(Object data) {
106 this.data = data;
107 }
108 }
109}

