PHP對APP微信支付異步回調的處理

1、收取微信異步回調參數

//獲取返回的xml格式數據
$payXml = file_get_contents("php://input");
//將xml格式轉化爲json格式
$jsonXml = json_encode(simplexml_load_string($payXml, 'SimpleXMLElement', LIBXML_NOCDATA));
//將json格式轉成數組格式
$result = json_decode($jsonXml, true);

2、是否支付成功並處理自己的業務邏輯

if ($result) {
	//如果成功返回
	if ($result['return_code'] == 'SUCCESS') {
	    if ($result['result_code'] == 'SUCCESS') {
	    	// sign 值校驗
	        // 校驗時不包含返回的 sign 字段,需踢除 sign 字段
	        foreach($result as $k => $v) {
	            if ($k == 'sign') {
	                $sign = $result[$k];
	                unset($result[$k]);
	            };
	        }
	        //按字典排序
	        ksort($result);
	        //轉爲 url 鍵值對
	        $signTemp = http_build_query($result);
	        //md5處理,$key 爲微信商戶平臺的 api 安全密鑰
	        $key = '';
	        $signTemp = md5($signTemp.'&key='.$key);
	        //轉大寫得最終 sign 值
	        $resultSign = strtoupper($signTemp);
	        //如果sign值正確
	        if ($sign === $resultSign) {
	            try {
	            	//……
	            	//……
	            	//最後返回結果給微信
		            $successArray = array(
		                'return_code' => 'SUCCESS',
		                'return_msg'  => 'OK'
	                );
	                return $this->arrayToXml($successArray);
	            } catch (\Exception $e) {
	            	$e->getMessage();
	            }
	        }
	    } else {
	        return false;
	    }
	} else {
	    return false;
	}
}

3、數組轉xml

function arrayToXml($arr)
{
    $xml = "<xml>";
    foreach ($arr as $key=>$val)
    {
        if (is_numeric($val))
        {
            $xml.="<".$key.">".$val."</".$key.">";
        }
        else
            $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
    }
    $xml.="</xml>";
    return $xml;
}
發佈了24 篇原創文章 · 獲贊 16 · 訪問量 5102
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章