三要素认证
<p>[TOC]</p>
<h5>简要描述</h5>
<ul>
<li>对手机号、姓名、身份证三要素进行认证</li>
</ul>
<h5>请求URL</h5>
<ul>
<li><code>{BASE_URL}/api/mobile/threeElements</code></li>
</ul>
<h5>请求方式</h5>
<ul>
<li>POST </li>
</ul>
<h5>json参数</h5>
<pre><code>{
&quot;clientId&quot;:&quot;xinghe&quot;,
&quot;mobile&quot;:&quot;13800138000&quot;,
&quot;charset&quot;:&quot;UTF-8&quot;,
&quot;timestamp&quot;:1699937218637,
&quot;sign&quot;:&quot;aM9vPlG4F37TMrkpRnxMgilvuidDwiqWL1gVsrtCT/xtiVwHRcPLjpKolJQheJhyzjpEZLgekuPqcwsgaEtNiJwK6tFxUSwFOeh0Pq4Dsln+2+P11NqjD3kx1z3KS/MehyRvU1fw/V7Npza/eP1a0S3eL0i0PT7gNnI1o=&quot;
}</code></pre>
<h5>参数</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">clientId</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>接入方ID,由星河分配</td>
</tr>
<tr>
<td style="text-align: left;">mobile</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>手机号码</td>
</tr>
<tr>
<td style="text-align: left;">name</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>姓名</td>
</tr>
<tr>
<td style="text-align: left;">idNo</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>身份证</td>
</tr>
<tr>
<td style="text-align: left;">timestamp</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">long</td>
<td>当前时间戳,单位:毫秒</td>
</tr>
<tr>
<td style="text-align: left;">charset</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>请求和签名使用的字符编码格式,建议使用 UTF-8</td>
</tr>
<tr>
<td style="text-align: left;">sign</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>签名,签名流程请查看文档最下方备注</td>
</tr>
</tbody>
</table>
<h5>返回示例</h5>
<pre><code> {
&quot;code&quot;: 200,
&quot;success&quot;:true,
&quot;data&quot;: {
&quot;result&quot;: 1,
&quot;desc&quot;: &quot;三要素验证一致&quot;,
&quot;isp&quot;: &quot;CM&quot; ,
&quot;traceId&quot;: &quot;Y0xrKVuV&quot;
},
&quot;msg&quot;: &quot;操作成功&quot;
}</code></pre>
<h5>返回参数说明</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">int</td>
<td>状态码,<br/>200:查询成功;<br/>400:参数有误;<br>500:内部错误;</td>
</tr>
<tr>
<td style="text-align: left;">success</td>
<td style="text-align: left;">boolean</td>
<td>是否响应成功 true:是, false:否</td>
</tr>
<tr>
<td style="text-align: left;">result</td>
<td style="text-align: left;">int</td>
<td>认证结果代码,详情请查看下方表格</td>
</tr>
<tr>
<td style="text-align: left;">charge</td>
<td style="text-align: left;">int</td>
<td>是否计费,0-不计费,1-计费</td>
</tr>
<tr>
<td style="text-align: left;">desc</td>
<td style="text-align: left;">string</td>
<td>认证结果描述</td>
</tr>
<tr>
<td style="text-align: left;">isp</td>
<td style="text-align: left;">string</td>
<td>所属运营商,CM:移动,CT:电信,CU:联通</td>
</tr>
<tr>
<td style="text-align: left;">traceId</td>
<td style="text-align: left;">string</td>
<td>本次查询请求的标识</td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">string</td>
<td>提示信息</td>
</tr>
</tbody>
</table>
<h5>认证结果的详细说明</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">认证结果代码</th>
<th style="text-align: left;">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">1</td>
<td style="text-align: left;">三要素验证一致</td>
</tr>
<tr>
<td style="text-align: left;">2</td>
<td style="text-align: left;">三要素验证不一致</td>
</tr>
<tr>
<td style="text-align: left;">201</td>
<td style="text-align: left;">查无</td>
</tr>
<tr>
<td style="text-align: left;">500</td>
<td style="text-align: left;">服务异常</td>
</tr>
</tbody>
</table>
<h5>备注</h5>
<ul>
<li>
<p>通过 linux 生成RSA密钥对:</p>
<h1>顺序执行以下命令</h1>
<p>openssl genrsa -out private#1.pem 1024
openssl pkcs8 -topk8 -inform PEM -in private#1.pem -outform PEM -nocrypt -out private#8.pem
openssl rsa -in private#1.pem -pubout -out public#8.pem</p>
<h1>私钥在 private#8.pem</h1>
<h1>公钥在 public#8.pem</h1>
</li>
<li>接入方需先生成 RSA 密钥对,私钥请妥善保管,避免遗失,不要泄露,公钥提供给星河数据系统管理员并申请 clientId;</li>
<li>签名(sign)原理:
<ol>
<li>获取所有 post 内容,不包括字节类型参数,如文件、字节流,剔除 sign 字段,剔除值为空的参数;</li>
<li>按照第一个字符的键值 ASCII 码递增排序(字母升序排序),如果遇到相同字符则按照第二个字符的键值 ASCII 码递增排序,以此类推;</li>
<li>将排序后的参数与其对应值,组合成 参数=参数值 的格式,并且把这些参数用 & 字符连接起来,再进行 MD5 编码,此时生成的字符串为待签名字符串</li>
</ol></li>
</ul>