签名算法
<h1>协议规则</h1>
<ul>
<li>
<p>传输方式:采用 <code>HTTPS</code> 传输</p>
</li>
<li>
<p>提交方式:<code>POST</code> 或 <code>GET</code></p>
</li>
<li>
<p>内容类型:<code>application/json</code></p>
</li>
<li>字符编码:<code>UTF-8</code></li>
</ul>
<h1>参数规范</h1>
<ul>
<li>
<p><font color="#dd0000"><strong>交易金额:</strong></font>
默认为卢比交易,金额的单位为“印度派萨”,表示为整数,为百分之一卢比。
如果要收或付<code>100卢比</code>,amount应填入为<code>10000</code>,参数值不能带小数。</p>
</li>
<li><font color="#dd0000"><strong>时间参数:</strong></font>
所有涉及时间参数均使用<code>13位毫秒值</code>,如:1622016572190。
时间戳具体是指从格林尼- 治时间 1970年01月01日 00时00分00秒 起至现在的毫秒数。</li>
</ul>
<h1>签名算法</h1>
<p><strong>签名生成的通用步骤如下:</strong></p>
<p>第一步:设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。</p>
<p><font color="#dd0000">特别注意以下重要规则:</font></p>
<ul>
<li>参数名ASCII码从小到大排序(字典序);</li>
<li>如果参数的值为空不参与签名;</li>
<li>参数名区分大小写。</li>
<li>验证调用返回或支付中心主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验;</li>
<li>支付中心接口可能增加字段,验证签名时必须支持增加的扩展字段。</li>
</ul>
<p>第二步:在stringA最后拼接上key<code>[即 StringA +&quot;&amp;key=&quot; + 私钥 ]</code>得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。</p>
<h5>如请求支付系统参数如下:</h5>
<pre><code class="language-java">Map&lt;String, Object&gt; signMap = new HashMap&lt;&gt;();
signMap.put(&quot;mchNo&quot;, &quot;M1714027497&quot;);
signMap.put(&quot;appId&quot;, &quot;A1729577405&quot;);
LocalDateTime localDateTime = LocalDateTime.now();
signMap.put(&quot;mchOrderNo&quot;, &quot;Test_202425267&quot;);
signMap.put(&quot;amount&quot;, &quot;10000&quot;);
signMap.put(&quot;customerName&quot;, &quot;Example test&quot;);
signMap.put(&quot;customerEmail&quot;, &quot;naderelseyd032@gmail.com&quot;);
signMap.put(&quot;notifyUrl&quot;,&quot;https://mgw.com&quot;);
signMap.put(&quot;customerPhone&quot;, &quot;7538566839&quot;);
signMap.put(&quot;currency&quot;, &quot;INR&quot;);
signMap.put(&quot;reqTime&quot;,&quot;1747121258585&quot;);</code></pre>
<h5>待签名值:</h5>
<pre><code class="language-java">amount=10000&amp;appId=A1729577405&amp;currency=INR&amp;customerEmail=naderelseyd032@gmail.com&amp;customerName=Example test&amp;customerPhone=7538566839&amp;mchNo=M1714027497&amp;mchOrderNo=Test_202425267&amp;notifyUrl=https://mgw.com&amp;reqTime=1747121258585&amp;key=acYVA8c6G3svaFToHYOUvbbUqCUmgzxORdyVQmt73CDxH6tkCgE8t1CgrnuUEveLsb3jKU6g2cImBKhtc4Mzqsp3FlWdd5dAzdvH7marALgZ14vu4D7E6jTWoECG8CYY</code></pre>
<h5>签名结果:</h5>
<pre><code class="language-java">88EC963C24A624D849E9CA40FE41E6FD</code></pre>
<p>最终请求支付系统参数:</p>
<pre><code class="language-java">{
&quot;amount&quot;: &quot;10000&quot;,
&quot;customerPhone&quot;: &quot;7538566839&quot;,
&quot;mchOrderNo&quot;: &quot;Test_202425267&quot;,
&quot;appId&quot;: &quot;A1729577405&quot;,
&quot;customerEmail&quot;: &quot;naderelseyd032@gmail.com&quot;,
&quot;sign&quot;: &quot;88EC963C24A624D849E9CA40FE41E6FD&quot;,
&quot;notifyUrl&quot;: &quot;https://mgw.com&quot;,
&quot;currency&quot;: &quot;INR&quot;,
&quot;reqTime&quot;: &quot;1747121258585&quot;,
&quot;mchNo&quot;: &quot;M1714027497&quot;,
&quot;customerName&quot;: &quot;Example test&quot;
}</code></pre>
<p><strong><font color="#dd0000">注意:如果接口参数非必填,且为null时,不参与签名。</font></strong></p>
<p><strong><font color="#dd0000">范例代码:</font></strong></p>
<h3>点击下方获取更详细代码👇</h3>
<h3>【 <a href="https://www.showdoc.com.cn/dreamo9/10967772117780732">→详细代码示例←</a>】</h3>