使用指南
<p><strong><span style="font-size:18px">前置条件</span></strong></p>
<ul>
<li>使用平安云OpenApi服务,您需要一个平安云账号和平安云访问密钥(Accesskey)</li>
<li>在平安云控制台页面中创建和管理您的AccessKey,或联系您的账号管理员获取AccessKey</li>
<li>使用平安云某个产品的API前,请确保您已经开通了对应的产品</li>
</ul>
<p><strong><span style="font-size:18px">接入地址</span></strong></p>
<p>平安云提供OpenAPI服务的统一入口为https://api.yun.pingan.com,目前,平安云OpenApi存在两种接口风格:分别为action风格接口与restful风格接口,其中:</p>
<ul>
<li>Action风格接口所有请求参数由一系列键值对组成,由名为action的键值对指定操作名称,其他键值对指定业务相关的参数,支持GET和POST方式请求。Action风格接口路由入口为/api/v1,即https://api.yun.pingan.com/api/v1</li>
<li>Restful风格接口的支持路径参数、URL参数以及Body参数,依据接口类型,对资源的请求类型由http的GET(表示获取)、POST(表示新增或修改)、PUT(表示更新)、DELETE(表示删除)方法完成,路由入口为/rest/v1,既https://api.yun.pingan.com/rest/v1</li>
</ul>
<p><strong><span style="font-size:18px">请求结构</span></strong></p>
<p>平安云支持基于URL发起HTTP/HTTPS GET或POST请求,请求参数需要包含在URL中。以获取当前用户信息API GetUser为例,未经编码的的URL请求示例如下:</p>
<p>https://api.yun.pingan.com/api/v1?Action=GetUser&<公共请求参数></p>
<ul>
<li>https指定了请求通信协议</li>
<li>api.yun.pingan.com指定了服务接入地址</li>
<li>/api/v1指定了api类型</li>
<li>Action=GetUser指定了要调用的API</li>
<li><公共请求参数>是系统中规定的公共参数,具体描述见<a href="#平安云openapi服务公共请求参数">平安云openapi服务公共请求参数</a></li>
</ul>
<p><strong><span style="font-size:18px">字符编码</span></strong></p>
<p>请求参加以及响应结果均使用UTF-8字符集编码</p>
<p><strong><span style="font-size:18px">身份凭证</span></strong></p>
<p>平安云OpenAPI服务采用AccessKey的方式进行身份认证。AccessKey相当于用户密码,AccessKey用于调用API,而用户密码用于用户登录控制台。AccessKey由AccessKeyId与AccessKeySecret组成,具有全局唯一性。其中AccessKeyId是访问者身份,用于唯一标识一个用户,AccessKeySecret是密钥,在客户端用于对请求数据进行电子签名,在服务端用于验证客户端的签名,来判断请求的合法性。AccessKeySecret属于用户敏感信息,用户需严格保密AccessKeySecret的信息不被泄露,否则可能会被恶意利用,对用户在平安云购买的资源进行非法的操作。</p>
<p><strong><span style="font-size:18px">签名机制</span></strong></p>
<p>平安云OpenAPI服务通过验证签名的方式来保证到达服务端的请求是没有被篡改过的原始请求,只有原始请求才会被服务端接受并执行,否则服务端将拒绝服务,以保护用户的资源安全。目前平安云推荐使用的签名算法为HMAC-SHA256,签名时使用用户AccessKey中的AccessKeySecret作为签名密钥,签名密钥具有唯一性,在签名密钥没有被泄露的前提下,只有用户自己和平安云知晓该密钥,因此通过比对服务端和客户端用相同的密钥对相同的数据的签名结果,就可以判断出请求是否是合法且未经过篡改的。</p>
<p><strong><span style="font-size:18px">签名过程</span></strong></p>
<p> 客户端在发送请求前,需要对请求内容进行签名并将和客户端的签名结果一起发送给服务端,由服务端以同样的方式对用户数据进行签名和比对,因此客户端与服务端的签名过程与与参与签名运算的数据必须一致。在签名过程中,需要考虑签名有效性、签名时效性、防重放攻击、签名算法版本演进、API版本差异等。因此在访问平安云API服务时,需要依赖以下公共请求参数:</p>
<p><a id="平安云openapi服务公共请求参数" name="平安云openapi服务公共请求参数">平安云openapi服务公共请求参数</a></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p>参数名称</p>
</td>
<td>
<p>参数类型</p>
</td>
<td>
<p>参数描述</p>
</td>
<td>
<p>备注</p>
</td>
</tr>
<tr>
<td>
<p>AccessKeyId</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>AccessKeyId,唯一标识一个用户</p>
</td>
<td>
<p>AccessKey中的AccessKeyId,该AccessKeyId唯一标识一个平安云用户</p>
</td>
</tr>
<tr>
<td>
<p>SignatureMethod</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>签名算法</p>
</td>
<td>
<p>平安云推荐使用HMAC-SHA256,签名时固定取值HMAC-SHA256</p>
</td>
</tr>
<tr>
<td>
<p>SignatureNonce</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>请求随机数</p>
</td>
<td>
<p>每次请求必须跟随一个足够复杂的随机值,该随机值用于标识一个唯一的请求,并且防止请求重放</p>
</td>
</tr>
<tr>
<td>
<p>SignatureVersion</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>签名版本</p>
</td>
<td>
<p>平安云目前支持的签名方法版本为1.0,签名时该参数固定传值1.0</p>
</td>
</tr>
<tr>
<td>
<p>Timestamp</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>签名时间戳</p>
</td>
<td>
<p>对请求进行签名的时间戳,签名时需获取当前时间戳字符串</p>
</td>
</tr>
<tr>
<td>
<p>Version</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>Api版本</p>
</td>
<td>
<p>目前平安云支持的API版本为2017-01-01,签名时固定传值2017-01-01</p>
</td>
</tr>
<tr>
<td>
<p>Signature</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>请求内容签名</p>
</td>
<td>
<p>请求内容的签名值,由前面的特殊参数和业务参数共同计算得到</p>
</td>
</tr>
</tbody>
</table>
<p>请求参数编码</p>
<p>使用HTTP/HTTPS请求URL时,需要按照RFC3986规则,对请求参数名称和参数取值进行编码,编码规则如下:</p>
<ul>
<li>字符a-z、A-Z、0-9以及字符-、_、.、~不编码</li>
<li>其他字符扩展成%XY的格式,其中XY是字符对应的ASCII码的16进制</li>
<li>单个空格编码为%20,而不是+。如果用户通过Java代码进行签名,使用Java标准库java.net.URLEncoder进行编码,或使用的其他Java组件编码内部实现使用了java.net.URLEncoder,需要对编码结果进行一些特殊处理,包括将编码后的字符中的+替换为%20,*替换为%2A,%7E替换为~</li>
</ul>
<p>数据签名流程</p>
<p><img src="https://pcp-portal-sca.obs-cn-shenzhen.pinganyun.com/pcp-portal-sca/20201604115533-1b412d1393f2.png" style="height:545px; width:800px" /></p>
<p><strong><span style="font-size:18px">请求与响应</span></strong></p>
<p><strong>请求方式</strong></p>
<p>GET、POST</p>
<p><strong>公共请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p>参数名称</p>
</td>
<td>
<p>描述</p>
</td>
</tr>
<tr>
<td>
<p>公共请求参数</p>
</td>
<td>
<p>见平安云openapi服务公共请求参数部分描述</p>
</td>
</tr>
<tr>
<td>
<p>业务参数</p>
</td>
<td>
<p>见平安云OpenAPI服务OpenAPI文档部分</p>
</td>
</tr>
</tbody>
</table>
<p><strong>公共响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0" style="width:0px">
<tbody>
<tr>
<td>
<p>参数名称</p>
</td>
<td>
<p>参数类型</p>
</td>
<td>
<p>参数描述</p>
</td>
<td>
<p>备注</p>
</td>
</tr>
<tr>
<td>
<p>RequestId</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>请求Id</p>
</td>
<td>
<p>每次请求会生成一个唯一的id</p>
</td>
</tr>
<tr>
<td>
<p>Code</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>请求结果状态</p>
</td>
<td>
<p>请求结果英文编码</p>
</td>
</tr>
<tr>
<td>
<p>Message</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>请求结果国际化描述</p>
</td>
<td>
<p>可以在请求头中设置Accept-Language,目前支持设置为zh-CN(默认)和en-US</p>
</td>
</tr>
<tr>
<td>
<p>ResultCode</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>请求结果编码</p>
</td>
<td>
<p>编码范围A00000~Z99999</p>
</td>
</tr>
<tr>
<td>
<p>业务响应参数</p>
</td>
<td colspan="3">
<p>见平安云OpenAPI服务OpenAPI文档部分</p>
</td>
</tr>
</tbody>
</table>
提交成功!非常感谢您的反馈,我们会继续努力做到更好!