签名生成的通用步骤如下:
第一步,设所有发送的数据为集合M,将集合M内所有参数按照参数名ASCII码从小到大排序(字典序),参数值去除两边空格,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
特别注意以下重要规则:
◆ 参数名ASCII码从小到大排序(字典序);
◆ 参数名区分大小写;
◆ 参数值需要进行URLEncode编码;
◆ 接口可能增加字段,验证签名时必须支持增加的扩展字段
第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到gntoken值。
◆ APPKEY 设置路径:平台-->用户中心-->经销商-->API设置
假设传送的参数如下,以PHP代码为例:
$params = array ( 'appid' => 'APPID', 'gntime' => 1234567890, 'ym' => 'gname.com', 'url' => 'https://www.gname.com' );
第一步:对参数按照key=value的格式,key按照ASCII字典序,value值需要进行URLEncode编码,字符串如下:
$stringA = "appid=APPID&gntime=1234567890&value=https%3A%2F%2Fwww.example.com&ym=example.com";
第二步:拼接APPKEY:
$appkey = "APPKEY" //注:appkey $stringB = "appid=APPID&gntime=1234567890&value=https%3A%2F%2Fwww.example.com&ym=example.comAPPKEY"; //注:MD5签名方式 并转成大写 $gntoken = strtoupper(md5($stringB)); //B48D34C9A15A3F33ED61396E5BD8F1F8
以下是我们以PHP为例的Demo
//Curl Post
function getHttpResponsePOST($url,$para) {
$curl = curl_init($url);
//SSL
if(substr($url, 0, 8)=== 'https://'){
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
}
curl_setopt($curl, CURLOPT_HEADER, 0 );
curl_setopt($curl, CURLOPT_HTTPHEADER, [
'Content-Type: application/x-www-form-urlencoded'
]);
curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl,CURLOPT_POST,true);
curl_setopt($curl,CURLOPT_POSTFIELDS,http_build_query($para));
$responseText = curl_exec($curl);
curl_close($curl);
return $responseText;
}
//All elements of the array are concatenated into strings with "&" characters according to the mode of "parameter=parameter value", and the strings are urlencoded
function createLinkstringUrlencode($para,$char="&") {
$arg = "";
if($para){
ksort($para);
$params = [];
foreach($para as $key=>$val){
$params[]=$key."=".urlencode($val);
}
$arg = implode($char,$params);
}
return $arg;
}
//Sign
function md5Sign($prestr, $key) {
$signstr = $prestr . $key;
return strtoupper(md5($signstr));
}
//sign verify
function md5Verify($prestr, $sign, $key) {
$mysgin = md5Sign($prestr,$key);
if($mysgin == $sign) {
return true;
}
else {
return false;
}
}
//UTC+8 timestamp
function getTimeStamp($datetime){
$target_timezone = 'Asia/Singapore';
$system_timezone = date('e');
date_default_timezone_set($target_timezone);
$timestamp = strtotime($datetime);
date_default_timezone_set($system_timezone);
return $timestamp;
}
$appid="YOUR_APPID";
$appkey = "YOUR_APPSECRET";
$apiHost = "API HOST";
$endPoint="api/domain/dns";
$data['appid'] = $appid;
$data['gntime'] = time();
$data['ym']="example.com";
$data['dns']="ns1.gname-dns.com,ns2.gname-dns.com";
$gntoken = md5Sign(createLinkstringUrlencode($data),$appkey);
$data['gntoken'] = $gntoken;
$requestUrl = "https://{$apiHost}/{$endPoint}";
$response = getHttpResponsePOST($requestUrl,$data);
exit($response);