前言
在现代软件开发中,地图服务的集成已成为众多应用的必备功能之一。大家日常使用频率较高的除了百度地图之外,高德地图也是其中的重要服务提供商,其丰富的 API 接口为开发者提供了便利。然而,在使用 Java 调用高德地图服务时,如果开发者开启了数字签名的机制,可能会遇到各种问题,其中最常见的便是 10007 INVALID_USER_SIGNATURE 错误。这一错误表明数字签名未通过验证,导致无法正常访问高德地图的服务。

很多朋友反馈对百度地图的数字签名机制介绍很详细,能不能对高德地图的数字签名机制也进行介绍介绍。众所周知,数字签名机制是为了确保请求的安全性和合法性而设计的。当开发者在开放平台的控制台中开启了数字签名功能后,就需要按照指定的算法生成数字签名。如果签名生成过程中出现任何问题,如参数错误、算法不匹配或密钥错误等,都会导致请求错误,因此数字签名机制其实是一种安全保障机制。虽然之前对百度地图的数字签名机制有一定的了解,本来以为高德验证机制比较跟百度的类似,转换使用起来应该非常块,实践证明。相似性和直接照搬还是不同的,'纸上得来终觉浅,绝知此事要躬行'。两个开放平台之间还是有一定的差别的。
本文即在此背景下产生,文章主要讲解如何在高德地图中开启 SIG 数字签名,开启数字签名后可能会遇到什么问题,然后介绍使用 Java 进行调用时可能遇到的场景以及如何解决调用时返回"info":"INVALID_USER_SIGNATURE","infocode":"10007"的错误。通过这些内容的展开,开发者可以有效地解决 Java 调用高德地图服务时遇到的 10007 INVALID_USER_SIGNATURE 错误,同时由于高德地图在官网上也没有提供示例代码,因此本文也算是一种补充,让各位开发者可以直接参考使用。
一、如何开启高德的数字签名
本节将简单介绍如何在高德地图中开启数字签名的应用配置和官方的生成机制介绍。
1、应用配置
进入控制台 - 应用管理 - 我的应用。
1)新建 Key/选择相应的 Key。

2)点击'设置',打开数字签名,提交后关闭'设置'页面

(注意:该私钥与 Key 对应,请注意保存,谨防泄露。)
2、官方的生成机制
我们可以查看官方提供的数字签名生成机制说明网页链接,如下图所示:

从官方的说明可以知晓:
生成签名
签名格式:sig=MD5(请求参数(包括 key)键值对(按参数名的升序排序),加(请注意'加'字无需输入)私钥)。例如:
请求服务为'testservice';请求参数分别为'a=23,b=12,d=48,f=8,c=67';私钥为'**bbbbb'。**则数字签名为:**sig=md5(a=23&b=12&c=67&d=48&f=8bbbbb)
注意:**生成签名的内容,(上文提到的拼装的参数,也就是 md5() 中的内容),必须为 utf-8 编码格式。在计算 md5 的参数如果出现+号,请正常计算 sig,但在请求的时候,需要用 urlencode 进行编码再请求。请求参数排序需要注意,如果参数名的第一个字母顺序相同,就比较第二个字母。以此类推,直至得到排序结果。








