举个例子
微信支付二维码 -》通过参数生成XML 传给微信 返回给你 数据 此时(sign)签名是你定义的 , 微信效验签名 然后给你二维码
重点来了
扫码支付 成功 , 微信给回调地址内传参 此时的(SIGN )签名 是微信 自己生成的 如何判断签名是否被更改截获呢
简单 再拼一遍数据 加上你的KEY MD5 一下 看微信给你的签名 跟你算的签名是否一致即可
//XML 数据获得办法 $dataxml = file_get_contents("php://input");
//微信返回的XML 数据 $dataxml = "<xml> <appid><![CDATA[wx3c773757024e51a4]]></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[1250779301]]></mch_id> <nonce_str><![CDATA[e1393fd835f3b7b6a7b62cbad1183597]]></nonce_str> <openid><![CDATA[oVGO_vpKdychipUsZTg_Yz15mxQ8]]></openid> <out_trade_no><![CDATA[20170815021733297831]]></out_trade_no> <result_code><![CDATA[SUCCESS]]></result_code> <return_code><![CDATA[SUCCESS]]></return_code> <sign><![CDATA[FF4A80C82D95CFEA47E79873DD843E18]]></sign> <time_end><![CDATA[20170815141809]]></time_end> <total_fee>1</total_fee> <trade_type> <![CDATA[NATIVE]]></trade_type> <transaction_id><![CDATA[4005392001201708156351403039]]></transaction_id> </xml>"; //转换成数组 $data = (array)simplexml_load_string($dataxml, 'SimpleXMLElement', LIBXML_NOCDATA); //效验签名 $signA = "appid=".$data['appid']."&bank_type=".$data['bank_type']."&cash_fee=".$data['cash_fee']."&fee_type=".$data ['fee_type']."&is_subscribe=".$data['is_subscribe']."&mch_id=".$data['mch_id']."&nonce_str=".$data['nonce_str']."&openid=". $data['openid']."&out_trade_no=".$data['out_trade_no']."&result_code=".$data['result_code']."&return_code=".$data ['return_code']."&time_end=".$data['time_end']."&total_fee=".$data['total_fee']."&trade_type=".$data ['trade_type']."&transaction_id=".$data['transaction_id']."&key=你的微信支付KEY"; $sign = strtoupper(MD5($signA)); if($sign!=$data['sign']){ //不同就跳出 exit(); }
就是这样 瞄!