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);

对于支付结果通知的内容一定要做签名验证,防止数据泄漏导致出现“假通知”,造成资金损失。签名验证方法如下:

经验分享 程序员 微信小程序 职场和发展