【问题标题】:Do I need to spesifically handle HTTP reponse in my PHP script that receives JSON HTTP POST?我是否需要在接收 JSON HTTP POST 的 PHP 脚本中专门处理 HTTP 响应?
【发布时间】:2016-08-23 14:30:49
【问题描述】:

我会再试一次,因为我的最后一个问题写得不够好。

我正在编写一个PHP 脚本来处理下面的JSON HTTP POSTrequest。

{
  "id": "621c46e4-2ca0-4254-a987-fc9e2cc7c552",
  "mobileNumber": 4799999999,
  "price": 20.5,
  "currency": "nok",
  "paymentDate": "2016-08-23T15:35:38.327104+02:00",
  "paymentType": "sms",
  "product": {
    "id": "17",
    "name": "PAPIRFLYET"
  },
  "success": true,
  "accessNumber": 2380,
  "dialog": [
    {
      "date": "2016-08-23T15:35:37.327104+02:00",
      "type": "mo",
      "message": "PAPIRFLYET",
      "consumerCharge": 0
    },
    {
      "date": "2016-08-23T15:35:38.827104+02:00",
      "type": "mt",
      "message": "Takk for din betaling",
      "consumerCharge": 20.5
    }
  ]
}  

我只想给自己发一封电子邮件,其中包含mobileNumber 的最后 8 位数字。

    $json = file_get_contents("php://input");
    $obj = json_decode($json, true);

    $tlf = substr(strval($obj["mobileNumber"]),2,8);

    $email_from = "xxx@gmail.com";
    $email_to = "xxx@gmail.com";
    $email_subject = "Subject";
    $email_message = "Number is " . $tlf;

    $headers = "Content-type:text/html;charset=UTF-8" . "\r\n";
    $headers .= 'From: ' . $email_from . "\r\n";
    @mail($email_to, $email_subject, $email_message, $headers); 

如果我只是打开浏览器并转到页面mysite.com/json.php,则会发送电子邮件(没有任何数字obv),但是当发送POST 请求时,什么也没有发生。

客户端可能正在请求100-continue,如标头所示(使用 posttestserver.com 进行测试时):

REQUEST_URI = /post.php
QUERY_STRING = 
REQUEST_METHOD = POST
GATEWAY_INTERFACE = CGI/1.1
REMOTE_PORT = 54820
REMOTE_ADDR = 193.142.108.232
HTTP_CONNECTION = close
HTTP_EXPECT = 100-continue
CONTENT_LENGTH = 638
HTTP_HOST = posttestserver.com
CONTENT_TYPE = application/json
UNIQUE_ID = V7xN1UBaMGUAAC@uOX4AAAAJ
REQUEST_TIME_FLOAT = 1471958485.5507
REQUEST_TIME = 1471958485

我需要专门处理我的 PHP 脚本中的 HTTP 响应吗?

【问题讨论】:

  • “什么都没发生”?你的意思是你得到一个白屏?你试过什么调试?
  • 完成任何基本调试,例如var_dump($json) 以查看脚本是否收到任何内容?请注意,使用@ 相当于(幼稚的)将手指塞进耳朵然后“lalalalala 听不到你的声音”。如果您知道代码不起作用,那么您不应该抑制错误。
  • @JonStirling 我只处理服务器端。 JSON HTTP POST 是从一家名为 ViaNett 的公司发送的,作为对接收 SMS 的响应。我只输入他们应该推送到的 http-address。我已经尝试推送到http://posttestserver.com/post.php 以验证它实际上是在推送,并且确实如此。我还使用 chrome“高级 REST 客户端”发送到我的 json.php,它可以工作。
  • @MarcB 我尝试输入一些日志记录,但好像我在json.php 中写入的内容都没有被执行。如果我从“高级 REST 客户端”发送HTTP POST,它可以工作。
  • 然后仔细检查该服务的帖子是否确实在您的每个服务器上。在您的服务器的访问日志中应该有来自它们的命中。如果没有任何点击,那么问题不在于这段代码,而是他们没有点击正确的 url,或者根本没有点击您的服务器。

标签: php json post http-post http-status-code-100


【解决方案1】:

似乎问题出在 wordpress 托管上。如果我将json.php 放在mysite.com/json.php 上,它就可以正常工作。 mysite.com/wp-content/themes/themeName/json.php 没用。我不知道为什么,谷歌也不知道,所以我就这样吧:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    相关资源
    最近更新 更多