## 簽名算法
簽名生成的通用步驟如下:
第一步,設所有發送或者接收到的數據為集合M,將集合M內的參數按照參數名ASCII碼從小到大排序(字典序),使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串 stringA。
第二步,在stringA最后拼接上key得到stringSign字符串,并對stringSign進行MD5運算,再將得到的字符串所有字符轉換為大寫。
**交易提交時簽名Demo( php代碼示例,其它編程語言僅做參考 )**
```php
<?php
$ArrayField = [
'version' => '1.0.0',
'memberid' => '10001',
'orderid' => "1000120200202202020",
'amount' => '100',
'orderdatetime' => "",
'notifyurl' => 'http://xxx.xxx.com/notifyurl.php',
'paytype' => 'WXGZH',
'signmethod' => 'md5',
];
ksort($ArrayField); //按照參數名ASCII碼從小到大排序
$md5key = '2JXQBG13TAUNKRYVME'; //md5密鑰
$stringA = "";
foreach($ArrayField as $key => $value){
$stringA .= $key."=".$value."&";
}
$stringA = substr($stringA,0,-1); //去掉最后一個 & 字符
$ArrayField["sign"] = strtoupper(md5($stringA.$md5key)); //拼接密鑰后,md5加密后轉為大寫
?>
```
**交易回調時簽名Demo( php代碼示例,其它編程語言僅做參考 )**
> 回調里的所有參數,只要存在,不論值是否為空都要參與簽名
```php
<?php
$ArrayField = $_POST;
$sign = $ArrayField["sign"];
unset($ArrayField["sign"]);
$md5key = '2JXQBG13TAUNKRYVME'; //密鑰
ksort($ArrayField); //按照參數名ASCII碼從小到大排序
$stringA = "";
foreach($ArrayField as $key => $value){
$stringA .= $key."=".$value."&";
}
$stringA = substr($stringA,0,-1); //去掉最后一個 & 字符
$signValue = strtoupper(md5($stringA.$md5key)); //拼接密鑰后,md5加密后轉為大寫
?>
```
**查詢提交時簽名Demo( php代碼示例,其它編程語言僅做參考 )**
```php
$ArrayField = [
'version' => '1.0.0', //固定值
'memberid' => '10001', //商戶編號
'orderid' => "2020022637021582687627", //要查詢的訂單號
'notifyurl' => 'http://xxx.xxx.com/notifyurl.php',
'signmethod' => 'md5', //加密方式 固定值
];
ksort($ArrayField); //按照參數名ASCII碼從小到大排序
$md5key = '2JXQBG13TAUNKRYVME'; //md5密鑰
$stringA = "";
foreach($ArrayField as $key => $value){
$stringA .= $key."=".$value."&";
}
$stringA = substr($stringA,0,-1); //去掉最后一個 & 字符
$ArrayField["sign"] = strtoupper(md5($stringA.$md5key)); //拼接密鑰后,md5加密后轉為大寫
```
**查詢響應/回調時簽名Demo( php代碼示例,其它編程語言僅做參考 )**
> 回調里的所有參數,只要存在,不論值是否為空都要參與簽名
```php
<?php
$ArrayField = $_POST; //查詢回調時獲取回調參數
// $json = 響應回的JSON字符串 ;
// $ArrayField = json_decode($json,true) //查詢響應時獲取回調參數, json字符串轉換為數組
$sign = $ArrayField["sign"];
unset($ArrayField["sign"]);
$md5key = '2JXQBG13TAUNKRYVME'; //密鑰
ksort($ArrayField); //按照參數名ASCII碼從小到大排序
$stringA = "";
foreach($ArrayField as $key => $value){
$stringA .= $key."=".$value."&";
}
$stringA = substr($stringA,0,-1); //去掉最后一個 & 字符
$signValue = strtoupper(md5($stringA.$md5key)); //拼接密鑰后,md5加密后轉為大寫
?>
```