签名生成的通用步骤如下:
第一步,设所有发送的数据为集合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&url=https%3A%2F%2Fwww.gname.com&ym=gname.com";
第二步:拼接APPKEY:
$appkey = "APPKEY" //注:appkey $stringB = "appid=APPID&gntime=1234567890&url=https%3A%2F%2Fwww.gname.com&ym=gname.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);