【发布时间】: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