php - 服务器不接受 url 参数
问题描述
测试付款后,银行向我发送了这个带有一些参数的 url: 银行使用的方法是 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
解决方案
银行正在向您发送一个无效的查询字符串,使用&
之前的分隔符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'];
...
}
推荐阅读
- python - 为什么 FloodFill 算法超过了 Leetcode 的最大递归限制?
- javascript - 刷新页面时如何制作始终具有正确数字的计数器
- python - 如何仅打印 python curl 的输出
- android - Android:Repository/ViewModel 中的业务逻辑转换
- mysql - 运行迁移时如何修复外键错误
- qt - DPI QPainter 使用什么?
- c# - 无 Cookie 的 ASP.NET 核心
- python - django 中 admin.site.register 和 makemigrations 之间的区别
- python - 使用 sqlalchemy 替换和添加新的 pandas 数据框 to_sql
- reactjs - 如何在 Quill JS (react-quill) 中创建撤消/重做按钮?