php获取通过http协议post提交过来xml数据及解析xml

php怎么获取接口返回的xml数据及解析xml

直接接收感觉会有风险,应该怎么做才安全

主要是接收数据的时候怎么做验证才安全

阅读 4.7k
3 个回答
$xml = file_get_contents("php://input");
libxml_disable_entity_loader(true);
$res = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);

print_r($res);
//关于验证参考微信支付,参数中增加sign
/**
 * 获取参数签名
 * @param  Array  要传递的参数数组
 * @param  String  秘钥
 * @return String 通过计算得到的签名
 */
function getSign($params,$key) {
    ksort($params);        
    foreach ($params as $key => $item) {
        if (!empty($item)) {         
            $newArr[] = $key.'='.$item;     
        }
    }
    $stringA = implode("&", $newArr);
    $stringSignTemp = $stringA."&key=".$key;      
    $stringSignTemp = md5($stringSignTemp);     
    $sign = strtoupper($stringSignTemp);
    return $sign;
}
$s = $res['sign'];
unset($res['sign']);
$sign = getSign($res,$key);
if($sign === $s) {
    return true;
}
return false;
新手上路,请多包涵

simplexml

$xml = file_get_contents("php://input");
$xml = new \SimpleXMLElement($xml);
$data = [];
        foreach ($xml as $key => $value) {
            $data[$key] = strval($value);
        }
        你可以在传输的Xml数据里面添加一列sign,将前面的数据用加密算法计算出结果后再填充进去,不过密钥不要在网络上传输哈
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题