1、核心代碼:

<?php require("helper.php"); header('content-type:text/html;charset=utf-8'); $key = 'C43D436036E643F5AFA654FED758BCF7'; //參數數組 $post_data = array ( "parter" => '2308', "orderid" => '201711021121', ); //簽名 ksort($post_data);//鍵按ASCII碼升序排序 $preSignString=getPreSignString($post_data); $sign = md5($preSignString.'&key='.$key); $sign=strtoupper($sign);//大寫 //簽名參數添加到參數數組 $post_data['sign']=$sign; //參數轉成json $parameters =json_encode($post_data); //發送請求 $url='http://localhost:64781/api/Query/QueryStatus'; $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $response = curl_exec($ch); curl_close($ch); //處理返回數據 $responseData=json_decode($response,true);//發序列化為數組 print_r($responseData);
2、工具類代碼:

<?php /* * 獲取待簽名字符串 * */ function getPreSignString($array) { $prestr=''; if(empty($array)) return $prestr; else { foreach($array as $key=>$value){ if(!empty(trim($value)) && strtolower($key)!='sign') { $prestr.=$key.'='.$value.'&'; } } if(!empty($prestr)){ $length=strlen($prestr); $prestr=substr($prestr,0,$length-1);//去掉最后一個‘&’ } return $prestr; } }
3、調試:
3.1 遠程接口接收數據包:
以c#為例(以流的形式接收):

Stream requestData = HttpContext.Current.Request.InputStream; //獲取參數 byte[] b = new byte[requestData.Length]; requestData.Read(b, 0, (int)requestData.Length); string postdata = Encoding.UTF8.GetString(b);
postdata 結果如下:
{"orderid":"201711021121","parter":"2308","sign":"A75F1B4687105C84666F0812AB24232D"}
3.2 遠程接口返回數據包(這里把接收的json轉為數組):
Array ( [orderid] => 201711021121 [ekaorderid] => 17110213495685030814 [opstate] => 1 [parter] => 2308 [ovalue] => 100.1000 [code] => 0000 [msg] => 成功 )