1. 程式人生 > >生成簽名,隨機字串,XML轉為陣列,陣列轉XML,json封裝,獲取IP地址

生成簽名,隨機字串,XML轉為陣列,陣列轉XML,json封裝,獲取IP地址

 
/*
* ******生成簽名*********
*/
private function getSign($params)
{
ksort($params); //將引數陣列按照引數名ASCII碼從小到大排序
foreach ($params as $key => $item) {
if (!empty($item)) { //剔除引數值為空的引數
$newArr[] = $key . '=' . $item; // 整合新的引數陣列
}
}
$stringA = implode("&", $newArr); //使用 & 符號連線引數
$stringSignTemp = $stringA . "&key=" . "key";
// key是在商戶平臺API安全裡自己設定的
$stringSignTemp = hash_hmac("sha256",$stringSignTemp,"key"); //將字串進行MD5加密或hash_hmac加密
$sign = strtoupper($stringSignTemp); //將所有字元轉換為大寫
return $sign;
}


/*
* ***生成隨機字串,微信所需引數!
*/
function rand_code()
{
$str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';//62個字元
$str = str_shuffle($str);
$str = substr($str, 0, 32);
return $str;
}
/*
* ******傳輸給微信的引數要組成xml格式傳送,傳入引數陣列
*/
public function ToXml($data = array())
{
if (!is_array($data) || count($data) <= 0) {
return '陣列異常';
}
$xml = "<xml>";
foreach ($data as $key => $val) {
if (is_numeric($val)) {
$xml .= "<" . $key . ">" . $val . "</" . $key . ">";
} else {
$xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";
}
}
$xml .= "</xml>";
return $xml;
}
 
/*
* ******將xml資料轉換為陣列,接收微信返回資料時用到*********
*/
public function FromXml($xml)
{
if (!$xml) {
echo "xml資料異常!";
}
//將XML轉為array
//禁止引用外部xml實體
libxml_disable_entity_loader(true);
$data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);

return $data;
}
/**
* api 資料返回
* @param [int] $code [結果碼 200:正常/4**資料問題/5**伺服器問題]
* @param [string] $msg [介面要返回的提示資訊]
* @param [array] $data [介面要返回的資料]
* @return [string] [最終的json資料]
*/
 function return_msg($code, $msg = '', $data = []) {
/*********** 組合資料 ***********/
$return_data['code'] = $code;
$return_data['msg'] = $msg;
if(empty($data)){
$return_data['data'] = "";
}else{
$return_data['data'] = $data;
}
/*********** 返回資訊並終止指令碼 ***********/
// echo json_encode($return_data,JSON_UNESCAPED_UNICODE);die;
echo str_replace(':null',':""',json_encode($return_data,JSON_UNESCAPED_UNICODE));die;//JSON_UNESCAPED_UNUCODE 禁止中文轉換
}


/*
* 獲取當前使用者註冊的ip
*/

function get_client_ip($type = 0)
{
$type = $type ? 1 : 0;
static $ip = NULL;
if ($ip !== NULL) return $ip[$type];
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$pos = array_search('unknown', $arr);
if (false !== $pos) unset($arr[$pos]);
$ip = trim($arr[0]);
} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
}
// IP地址合法驗證
$long = sprintf("%u", ip2long($ip));
$ip = $long ? array($ip, $long) : array('0.0.0.0', 0);
return $ip[$type];
}