PHP接收并解析微信支付结果通知
信息格式大致如下:
<xml><appid><![CDATA[wx65498522b9a7pokr]]></appid> <bank_type><![CDATA[CFT]]></bank_type> <cash_fee><![CDATA[1]]></cash_fee> <fee_type><![CDATA[CNY]]></fee_type> <is_subscribe><![CDATA[N]]></is_subscribe> <mch_id><![CDATA[1238752902]]></mch_id> <nonce_str><![CDATA[103v4ohia9x8zcmpgted7mhln96d7ouy]]></nonce_str> <openid><![CDATA[o1FbXsuU0L3PhQaR0FH6eAwLMDc0]]></openid> <out_trade_no><![CDATA[2222]]></out_trade_no> <result_code><![CDATA[SUCCESS]]></result_code> <return_code><![CDATA[SUCCESS]]></return_code> <sign><![CDATA[DF81D51082E2039B5EC7E6C3B47461F2]]></sign> <time_end><![CDATA[20161228092403]]></time_end> <total_fee>1</total_fee> <trade_type><![CDATA[NATIVE]]></trade_type> <transaction_id><![CDATA[4005212001201612284235706302]]></transaction_id> </xml>
php可使用如下方法接收信息:
$xmlData = file_get_contents(php://input);
解析方法如下:
libxml_disable_entity_loader(true); $data = json_decode(json_encode(simplexml_load_string($xmlData, SimpleXMLElement, LIBXML_NOCDATA)), true);
对于支付结果通知的内容一定要做签名验证,防止数据泄漏导致出现“假通知”,造成资金损失。签名验证方法如下: