服务器不采用网址参数

时间:2018-08-17 18:39:04

标签: php

付款后,银行向我发送了此网址,其中包含一些参数: 银行使用的方法是POST

https://www.example.net:443/demo/index.php?order&mybanque&success&ho?TPE=XXXX14&date=17%2f08%2f2018%5fa%5f14%3a31%3a35&montant=26%2e50EUR&reference=000000000055&MAC=5DA667XXXXXXXXXXXXXXXXXXXXX24C&texte-libre=gpdiv2vXXXXXXXXXXdd9iq&code-retour=payetest&cvx=oui&vld=1219&brand=VI&status3ds=-1&numauto=000000&originecb=FRA&bincb=000001&hpancb=A4F7BXXXXXXXXXXXXXXXXXX9C87CBBEA&ipclient=XXX%2e158%2e61%2eXXX&originetr=CAN&veres=&pares=&modepaiement=CB

我有这样的功能

public static function getMethod() {

  if ($_SERVER["REQUEST_METHOD"] == 'GET') return $_GET;
  if ($_SERVER["REQUEST_METHOD"] == 'POST') return $_POST;

  die ('Invalid REQUEST_METHOD (not GET, not POST).');
}

在GET上:我有这个:

" array(4) { ["order"]=> string(0) "" ["desjardins"]=> string(0) "" ["success"]=> string(0) "" ["ho"]=> string(0) "" } string(77) "

在POST上我什么都没有

如何获取url参数:TPE=XXXX14&date=17%2f08%2f2018%5fa%5f14%3a31%3a35&montant=26%2e50EUR&reference=000000000055&MAC=5DA667XXXXXXXXXXXXXXXXXXXXX24C&texte-libre=gpdiv2vXXXXXXXXXXdd9iq

1 个答案:

答案 0 :(得分:1)

银行发送给您的查询字符串无效,使用&之前的TPE作为分隔符,而不是&。 PHP无法将这些参数解析为$_GET

您可以使用$_SERVER['QUERY_STRING']来获取原始查询字符串,然后自行解析。

if (preg_match('/(<=?).*/', $_SERVER['QUERY_STRING'], $match) {
    parse_str($match[0], $extra_params);
    $tpe = $extra_params['TPE'];
    $data = $extra_params['date'];
    ...
}