JSON 通过 PHP 到 MySQL 的网络挂钩

JSON web hook to MySQL via PHP

我是从 PHP 开始的,我有一个网络服务器接收 JSON 格式的传入网络挂钩。

Web 挂钩可以根据对象分为 3 种不同的结构。根据 "type":.

将每种不同的格式插入不同的 table

webhook的3种格式如下。

1.

{"message": 
   {"team_id": 3, 
    "place_points": 4000, 
    "last_modified": 1480297989459, 
    "latitude": 27.140134, 
    "guard_object_id": 130, 
    "enabled": true, 
    "place_id": "YjliYjRkYzJiZmI0NDIyZj"placezRlZmM0OGFhOWIxMTguMTY=",      
    "longitude": -80.192017}, 
    "type": "place"}

2.

{"message": 
    {"bonus_expiration": null, 
     "store_id": "YjhlMWQ3MDcwN2EzNGMwY2I1NGE5YzVmNDA3ZWRlMGIuMTY=", 
     "enabled": true, "longitude": -80.197377, 
     "last_modified": 1474148043976, 
     "active_fort_modifier": null, 
     "latitude": 27.146217}, 
     "type": "store"}

3.

{"message": 
    {"disappear_time": 1480353234, 
    "meeting_id": "88dedc26aad", 
    "move_2": null, 
    "time_until_hidden_ms": 1411382559, 
    "last_modified_time": 1480352334560, 
    "encounter_id": "MzIxNTQ1NzIzMzMzMDExOTI5Mg==", 
    "move_1": null, 
    "individual_defense": null, 
    "object_id": 13, 
    "individual_stamina": null, 
    "time_detail": -1, 
    "longitude": -80.19295513708012, 
    "latitude": 27.141183040207377, 
    "individual_attack": null}, 
    "type": "object"}

这是我放在一起的 PHP,但是当我将 webhook 发送到 PHP 脚本的地址时它不起作用。任何帮助将不胜感激。

<?php


# MySQL database connection info
$host = 'localhost:3306';
$dbname = 'xxxxxxx';
$user = 'xxxxxxx';
$password = '-------';
$db = new PDO('mysql:host=' . $host . ';dbname=' . $dbname, $user, $password);

# Define Type Variables

$place = 'place';
$store = 'store';
$object = 'object';

# Decide if the WebHook is a place, store, or object

//$input = file_get_contents('mysql_webhook_payload.json'); # Local file for debugging
$input = file_get_contents('php://input'); # POST data from webhook
$payload = json_decode($input, true);

#IF LOOP for type

if ($payload['message']['type'] == $place ) {

  $team_id = $payload['message']['team_id'];
  $place_points = $payload['message']['place_points'];
  $last_modified = $payload['message']['last_modified'];
  $latitude = $payload['message']['latitude'];
  $guard_object_id = $payload['message']['guard_object_id'];      
  $enabled = $payload['message']['enabled']; 
  $place_id = $payload['message']['place_id'];      
  $longitude = $payload['message']['longitude'];
    $sql = "INSERT INTO places (`place_id`, `team_id`, `guard_object_id`, `place_points`, `enabled`, `latitude`, `longitude`, `last_modified`) 
            VALUE ($place_id, $team_id, $guard_object_id, $place_points, $enabled, $latitude, $longitude, $last_modified)";  
}
else if ($payload['message']['type'] == $store ) {
    $bonus_expiration = $payload['message']['bonus_expiration'];
    $store_id = $payload['message']['store_id'];
    $enabled = $payload['message']['enabled'];
    $longitude = $payload['message']['longitude'];
    $last_modified = $payload['message']['last_modified'];
    $active_fort_modifier = $payload['message']['bonus_expiration'];
    $latitude = $payload['message']['latitude'];

    ////missing sql entry


}
else if ($payload['message']['type'] == $object ) {
    $disappear_time = $payload['message']['disappear_time'];
    $meeting_id = $payload['message']['meeting_id'];
    $encounter_id = $payload['message']['encounter_id'];
    $longitude = $payload['message']['longitude'];
    $last_modified_time = $payload['message']['last_modified_time'];
    $move_1 = $payload['message']['move_1'];
    $latitude = $payload['message']['latitude'];
    $individual_defense = $payload['message']['individual_defense'];
    $object_id = $payload['message']['object_id'];
    $individual_stamina = $payload['message']['individual_stamina'];
    $individual_attack = $payload['message']['individual_attack'];
    $time_detail = $payload['message']['time_detail'];
    $move_2 = $payload['message']['move_2'];

    $sql = "INSERT INTO `object`(`encounter_id`, `meeting_id`, `object_id`, `latitude`, `longitude`, `disappear_time`, `individual_attack`, `individual_defense`, `individual_stamina`, `move_1`, `move_2`, `last_modified`, `time_detail`) VALUES ($encounter_id, $meeting_id, $object_id, $latitude, $longitude, $disappear_time, $individual_attack, $individual_defense, $individual_stamina, $move_1, $move_2, $last_modified, $time_detail)";

}

?>

我可能离这里很远

第一个片段无效,因为它在 place_id 字符串中包含引号 "

不是$payload['message']['type']而是$payoload['type']。在 type 键之前注意 },

当您解决上面的问题时,您可能会遇到 SQL 错误,因为您的插入内容既没有转义也没有引用。你应该使用 PDO's bindParam.

其余代码应该没问题,适合我。