php商场接口签名验证方法

根据参数名称(除签名和图片)将所有请求参数按照字符串大小顺序顺序排序: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     ?>

猜你喜欢

转载自www.cnblogs.com/jinlianzs/p/10843407.html