接入指引
<h3>1. 接入流程</h3>
<ul>
<li>开始对接,获取<code>测试参数</code> ,并阅读<code>接入指引</code></li>
<li>测试联调,可通过微信群与技术同学沟通,可下载开发Demo快速开始</li>
<li>正式上线,上线前先联系商务同学获取<code>正式商户号</code>,然后联系技术同学获取<code>正式机构及域名</code></li>
</ul>
<h3>2. 获取参数</h3>
<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;">接口域名</td>
<td style="text-align: left;"><a href="https://test.fs-pay.com/yfpay">https://test.fs-pay.com/yfpay</a></td>
<td>测试环境域名</td>
</tr>
<tr>
<td style="text-align: left;">机构号inst_no</td>
<td style="text-align: left;">900112</td>
<td>测试机构号</td>
</tr>
<tr>
<td style="text-align: left;">机构秘钥key</td>
<td style="text-align: left;">1c4d83f0c3c24a7d9fcaa1fed2682076</td>
<td>测试密钥</td>
</tr>
<tr>
<td style="text-align: left;">商户号</td>
<td style="text-align: left;">Y52211090004</td>
<td>测试商户号</td>
</tr>
<tr>
<td style="text-align: left;">门店号</td>
<td style="text-align: left;">862205070002</td>
<td>测试门店号(非必需)</td>
</tr>
</tbody>
</table>
<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;">接口域名</td>
<td style="text-align: left;"><a href="https://open.fs-pay.com/yfpay">https://open.fs-pay.com/yfpay</a></td>
<td>正式环境域名</td>
</tr>
<tr>
<td style="text-align: left;">机构号inst_no</td>
<td style="text-align: left;"></td>
<td>请联系运营同学获取</td>
</tr>
<tr>
<td style="text-align: left;">机构秘钥key</td>
<td style="text-align: left;"></td>
<td>请联系运营同学获取</td>
</tr>
<tr>
<td style="text-align: left;">商户号</td>
<td style="text-align: left;"></td>
<td>请联系运营同学获取</td>
</tr>
<tr>
<td style="text-align: left;">门店号</td>
<td style="text-align: left;"></td>
<td>请联系运营同学获取</td>
</tr>
</tbody>
</table>
<p><code>补充说明:</code></p>
<ol>
<li>对接时请使用以上参数进行测试环境调试,上线时分配正式参数;</li>
<li>测试环境与正式环境搭载的数据库已物理隔离,数据不互通;</li>
<li>接口文档中的地址均为正式环境,将协议及域名替换为上述测试域名,接口路径保持不变,即可使用测试环境参数开发。</li>
</ol>
<h3>3. 开发规范</h3>
<ol>
<li>
<p>报文规范</p>
<ol>
<li>请求方式:<code>POST</code></li>
<li>请求头信息:<code>Content-Type → application/json;charset=utf-8</code></li>
<li>编码格式:<code>UTF-8</code></li>
</ol>
</li>
<li>
<p>签名规则</p>
<ul>
<li>
<p>第一步 获得请求的参数,待签名的JSON参数,参数值为空字符串参与,参数值为null不参与</p>
<pre><code class="language-json">{
&quot;inst_no&quot;: &quot;900075&quot;,
&quot;mch_no&quot;: &quot;Y52211090004&quot;,
&quot;pay_type&quot;: &quot;400&quot;,
&quot;pay_trace_no&quot;: &quot;18588dbd1c6e4572b915a2b33fcdc62e&quot;,
&quot;pay_time&quot;: &quot;20190101125959&quot;,
&quot;auth_code&quot;: &quot;134573607383541818&quot;,
&quot;total_amount&quot;: 1
}</code></pre>
</li>
<li>
<p>第二步 拼接参数,将JSON参数名首字母,按ASCII码顺序拼接,首字母相同则比较第二位,以此类推,生成字符串A</p>
<pre><code class="language-java">String A = &quot;auth_code=134573607383541818&amp;inst_no=900075&amp;mch_no=Y52211090004&amp;pay_time=20190101125959&amp;pay_trace_no=18588dbd1c6e4572b915a2b33fcdc62e&amp;pay_type=400&amp;total_amount=1&quot;;</code></pre>
</li>
<li>
<p>第三步 拼接密钥,在字符串尾部拼接机构密钥,生成字符串B</p>
<pre><code class="language-java">String B = A + &quot;&amp;key=8a9bd64e6585c6d8016585c6c8980002&quot;;</code></pre>
</li>
<li>
<p>第四步 生成签名,对字符串B进行md5算法加密,获得的32位小写字符串即为签名结果字符串</p>
<pre><code class="language-java">String sign = md5(B);</code></pre>
</li>
<li>第五步 获得最后的请求参数,在请求参数中加入签名参数sign即可
<pre><code class="language-json">{
&quot;inst_no&quot;: &quot;900075&quot;,
&quot;mch_no&quot;: &quot;Y52211090004&quot;,
&quot;pay_type&quot;: &quot;400&quot;,
&quot;pay_trace_no&quot;: &quot;18588dbd1c6e4572b915a2b33fcdc62e&quot;,
&quot;pay_time&quot;: &quot;20190101125959&quot;,
&quot;auth_code&quot;: &quot;134573607383541818&quot;,
&quot;total_amount&quot;: 1,
&quot;sign&quot;:&quot;841387ec9bd3ea78a580bd4629cab010&quot;
}</code></pre>
<p><code>备注1</code> 文档中的接口,未特殊说明的,均在请求参数附加一个名为sign的参数;
<code>备注2</code> 对于交易回调通知这类服务端发起的请求进行验签,先取出sign参数,剩下的参数按上述规则生成签名,最后与之前取出的sign参数进行比对。</p></li>
</ul>
</li>
</ol>
<h3>4. 开发Demo</h3>
<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;">JAVA</td>
<td style="text-align: left;">开放平台API对应的JAVA调用示例</td>
<td>[下载](<a href="https://sb-soft.oss-cn-hangzhou.aliyuncs.com/sbpay/SBAPIDemoJava.zip">https://sb-soft.oss-cn-hangzhou.aliyuncs.com/sbpay/SBAPIDemoJava.zip</a> "下载")</td>
</tr>
<tr>
<td style="text-align: left;">.NET</td>
<td style="text-align: left;">开放平台API对应的.NET调用示例</td>
<td>[下载](<a href="https://sb-soft.oss-cn-hangzhou.aliyuncs.com/sbpay/SBAPIDemoC%23.zip">https://sb-soft.oss-cn-hangzhou.aliyuncs.com/sbpay/SBAPIDemoC%23.zip</a> "下载")</td>
</tr>
<tr>
<td style="text-align: left;">PHP</td>
<td style="text-align: left;">开放平台API对应的PHP调用示例</td>
<td>[下载](<a href="https://sb-soft.oss-cn-hangzhou.aliyuncs.com/sbpay/SBAPIDemoPhp.zip">https://sb-soft.oss-cn-hangzhou.aliyuncs.com/sbpay/SBAPIDemoPhp.zip</a> "下载")</td>
</tr>
</tbody>
</table>