根据参数名称(除签名和图片)将所有请求参数按照字符串大小顺序顺序排序:key = value + .... key = value.。例如:将foo=1,bar=2,baz=3 排序为bar=2,baz=3,foo=1,参数名和参数值链接后,得到拼装字符串bar=2baz=3foo=1,再将AppSecret拼接到参数字符串尾进行md5加密后,再转化成字符串,格式是:
1 <?php 2 //$parameters 请求参数array 3 $parameters= array( 4 '_mt'=>'demo.testMethod',//方法名 5 '_vc'=>'1',//接口版本,默认是1 6 '_tpid'=>'key-test',//appKey 7 '_ft'=>'json', //设置返回结果json格式 8 '_sm'=>'md5',//签名算法,目前支持md5 9 // 'param1'=>'value1',//接口参数,简单类型 10 // 'param2'=>'{\"property1\":\"value1\",\"property2\":\"value2\"}' //接口参数,复杂类型 11 ); 12 13 $Appkey='asasdevcv'; 14 $str=''; 15 //2.计算签名 16 js_rsa($parameters,$Appkey); 17 function js_rsa($parameters,$Appkey){ 18 //对加密数组进行字典排序 19 ksort($parameters); 20 //定义空字符串 21 $str = ""; 22 //将Key和Value拼接 23 foreach ($parameters as $k => $v) 24 { 25 $str.= $k.'='.$v; 26 } 27 //拼接并加密 28 $sign = md5($str.$Appkey); 29 // $test=mb_detect_encoding($sign);//ASCII 30 // echo '签名:'.$sign.'<hr/>'; 31 $url = 'http://www.jinlianzs.com/m.api?'.$sign; 32 request_post($url); 33 } 34 35 function request_post($url,$ispost=true) { 36 if (empty($url)) { 37 return false; 38 } 39 header("Content-type: text/html; charset=utf-8"); 40 $ch = curl_init();//初始化curl 41 curl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页 42 curl_setopt($ch, CURLOPT_HEADER, 0);//设置header 43 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上 44 if($ispost){ 45 curl_setopt($ch, CURLOPT_POST, 1);//post提交方式 46 curl_setopt($ch, CURLOPT_POSTFIELDS, $url); 47 } 48 $data = curl_exec($ch);//运行curl 49 curl_close($ch); 50 echo $data; 51 } 52 ?>