无法处理从购物车收到的Webhook

问题描述 投票:0回答:1

当有人通过我的第 3 方购物车下订单时,购物车会将有关销售的 JSON 编码数据字符串发布到我网站上的接收页面。我的接收页面需要解码 POST,提取所售产品的产品 ID,并更新 MySQL 数据库中的状态。

这是我的页面上接收 POST 的 php 代码:

$notification = $_POST;
if($notification == 'success'){
$order = json_decode($notification['order']);
$items = $order['items'];
foreach ( $items as $item ){
    $sql = "UPDATE posters SET stock_status='Sold' WHERE cartloom_ref = {$item['pid']}";
mysqli_query($conn, $sql);
}
}else{
header('HTTP/1.1 400 Bad Request');
}

这是实际帖子内容的精简版本:

order = {
    "items": [
        {
            "pid": "000004567",
            "item_id": "0001234545",
            "qty": "1",
            "title": "Widget2",
        }
    ],
    "subscribed": 1
}

所以我想将已售商品的产品 ID(“pid”)(4567)与我的数据库中的“cartloom_ref”字段(4567)进行匹配,并将数据库中的记录从“待售”更改为“已售出。

我已将 POST 发送给第三方 (webhook.site),效果很好。我已手动将 POST 发送到我的接收网址,效果很好。所以我很困惑为什么它不起作用。这是一个基本的 Windows 共享服务器。 如果有人可以提供帮助,将不胜感激。 谢谢。

php webhooks
1个回答
0
投票

您尝试从

if
语句中的给定数组中读取字符串,
$_POST
superglobal 始终会为您提供一个数组,因此,如果您尝试直接从
'success'
superglobal 读取类似
$_POST
的字符串要条件化
if
语句,你永远不会得到
true
响应,所以你可以考虑这个:

$order = json_decode($_POST['order']);
if($order){
    $items = $order->items;
    foreach($items as $item){
        //I'll fix your query too because it's open to sql injection, you can use prepared statements:
        $statement = $conn->prepare("UPDATE posters SET stock_status='Sold' WHERE cartloom_ref = ?");
        $statement->bind_param("s", $item['pid']);
        $statement->execute();
    }
} else {
    header('HTTP/1.1 400 Bad Request');
}
© www.soinside.com 2019 - 2024. All rights reserved.