我无法在PHP中打印JSON通知,但我可以将其保存在文件中

时间:2017-07-29 11:49:16

标签: php json

我正在收到有关我页面上新订单的JSON通知。我可以将通知保存在日志文件中,但我无法在PHP中打印它。

这是我现在使用的PHP代码:

    global $HTTP_RAW_POST_DATA;
    ini_set("allow_url_include", "On");
    if (!isset($HTTP_RAW_POST_DATA)) {
        $HTTP_RAW_POST_DATA = file_get_contents('php://input');
    }
    echo "<hr>";
    echo 'Trying to var dump or to print_r $HTTP_RAW_POST_DATA';
    var_dump($HTTP_RAW_POST_DATA);    
    print_r($HTTP_RAW_POST_DATA);
    echo "<hr>";
    echo 'trying with file_get_contents("php://input")';
    $mydata = file_get_contents('php://input');
    $mydata = json_decode(file_get_contents('php://input'), true);
    echo "<pre>";
    print_r($mydata);
    echo "</pre>";
    echo "<hr>";
    echo 'Trying with $_POST:';
    var_dump($_POST);
    echo "<hr>";
    echo 'Trying with $_GET:';
    var_dump($_GET);
    echo "<hr>";
    var_dump(json_decode(file_get_contents("php://input")));
    echo "<hr>";
    // PLEASE READ THIS:
    // All the above code prints nothing, NULL or empty Array
    // Howevver, the code bellow do save the notification in a log file.

    $now = date('Y-m-d-His');
    function mwrite($text,$time) {
    $filename = "/var/sites/m/mmmm.mmm/public_html/myflder/myfile_".$time.".log";
        $handle = fopen($filename, "w");
        fwrite($handle, $text);
        fclose($handle);
    }
        if (!isset($HTTP_RAW_POST_DATA)) {
            $HTTP_RAW_POST_DATA = file_get_contents('php://input');
        }
        mwrite($HTTP_RAW_POST_DATA, $now);

以下是我保存在文件中的通知:

{
    "e5Notification": {
    "orderNotification": {
      "purchase": {
        "purchaseId": "00002",
        "purchaseDate": "2017-07-28T04:05:44",
        "purchaseOrigin": "online",
        "paymentCompleteDate": "2017-07-28T04:05:44",
        "paymentStatus": "test payment arrived",
        "customerData": {
          "billingContact": {
            "lastName": "dfasdfas",
            "firstName": "dfasfa",
            "email": "ffdsfadf@sdfsd.com",
            "address": {
              "street1": "n/a",
              "postalCode": "n/a",
              "countryId": "ZZ",
              "country": "SomeCountry"
            }
          },
          "deliveryContact": {
            "lastName": "dfasdfas",
            "firstName": "dfasfa",
            "email": "ffdsfadf@sdfsd.com",
            "address": {
              "street1": "n/a",
              "postalCode": "n/a",
              "countryId": "ZZ",
              "country": "SomeCountry"
            }
          },
          "customerPaymentData": {
            "paymentMethod": "Other",
            "currency": "USD"
          },
          "language": "English",
          "subscribeNewsletter": "false"
        },
        "purchaseItem": {
          "runningNo": "1",
          "productId": "0001",
          "productName": "My Product",
          "notificationNo": "0",
          "deliveryType": "Electronically",
          "currency": "USD",
          "quantity": "1",
          "productSinglePrice": "44.99",
          "vatPct": "18.00",
          "discount": "0.00",
          "extendedDownloadPrice": "0.00",
          "manualOrderPrice": "0.00",
          "shippingPrice": "0.00",
          "shippingVatPct": "0.00",
          "subscription": {
            "startDate": "2017-07-28T00:00:00",
            "interval": "Half Yearly without end"
          }
        }
      }
    }
  }
}

我无法理解的是为什么我可以将通知保存在文件中,但我无法使用PHP将其打印出来。 此外,任何人都可以告诉我为什么我打印2个文件,一个空的和第二个这个数据?我只调用一次这个函数?

1 个答案:

答案 0 :(得分:1)

您正在使用的第三方服务是使用正文中的JSON通知回调您的脚本。当发生这种情况时,脚本会运行如果您在此时打印结果,使用echoprint_r等,您实际上是将其打印回调用该页面的客户端 - 即第三方。您不希望能够使用该机制将其显示到浏览器。您需要使用其他一些机制将数据与浏览器中的客户端会话进行匹配。

您可能会收到两个文件,因为当第三方通过通知回拨到您的服务器时您获得1,而当您尝试&#34;查看&#34;通过在浏览器中打开相同的文件,但您没有在请求中发送任何正文,因此日志文件为空。

此类第三方进程通常会提供回调(例如您正在接收)以及一种机制,以便您可以提供重定向网址,以便将其发送回浏览器,以便您的用户可以返回到您的应用流程在事务完成后的适当上下文中。

您使用的是哪种服务?