## 签名算法
签名生成的通用步骤如下:
第一步,设所有发送或者接收到的数据为集合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加密后转为大写
?>
```