通过PHP

时间:2016-11-29 23:02:01

标签: php mysql json webhooks

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

Web钩子可以根据对象有3种不同的结构。每种不同的格式都会根据“类型”插入到不同的表中:。

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)";

}

?>

我可能离开这里

1 个答案:

答案 0 :(得分:1)

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

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

当您解决上述问题时,您可能会收到SQL错误,因为您的插入内容未被转义或引用。您应该使用PDO's bindParam

其余代码应该没问题,对我有用。