【发布时间】:2017-01-07 03:13:35
【问题描述】:
我想向一个json格式的web服务发送数据,如下:
{
"request":
{
"t_sep":
{
"noKartu":"0000011110116",
"tglSep":"2016-06-12 09:00:00",
"noRujukan":"00001",
"catatan":"test"
}
}
}
带有以下回复(response):
{
metadata:
{
code: "200"
message: "OK"
}
response: "0301R00105160000123"
}
我想创建一个表单来更改变量“noKartu”、“tglSep”、“noRujukan”和“catatan”的值。
公式.php
<form id="form1" name="form1" method="post" action="aksiformulir.php">
no kartu: <input name="noKartu" type="text" size="25" /><br>
tgl sep: <input name="tglSep" type="text" size="25" /><br>
no rujukan: <input name="noRujukan" type="text" size="25" /><br>
catatan: <input name="catatan" type="text" size="25" /><br>
<input type=submit value=Go>
</form>
和aksiformulir.php
<?php
$dataid = "10000";
$secretKey = "56789";
$localIP = "dvlp.bpjs-kesehatan.go.id";
$url = "http://".$localIP."/devWsLokalRest/SEP/insert";
$port = 8081;
date_default_timezone_set('UTC');
$tStamp = strval(time() - strtotime('1970-01-01 00:00:00'));
$signature = hash_hmac('sha256', $dataid . "&" . $tStamp, $secretKey, true);
$encodedSignature = base64_encode($signature);
$urlencodedSignature = urlencode($encodedSignature);
function post_request($url, $port, $dataid, $tStamp, $encodedSignature, $data, $referer = '')
{
//-Convert the data array into URL Parameters like a=b&foo=bar etc.
//$data = http_build_query($data);
// parse the given URL
$url = parse_url($url);
if ($url['scheme'] != 'http') {
die('Error: Only HTTP request are supported !');
}
// extract host and path:
$host = $url['host'];
$path = $url['path'];
// open a socket connection on port 80 - timeout: 50 sec
$fp = fsockopen($host, $port, $errno, $errstr, 50);
if ($fp) {
// send the request headers:
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
if ($referer != '')
fputs($fp, "Referer: $referer\r\n");
fputs($fp, "x-cons-id: " . $dataid . "\r\n");
fputs($fp, "x-timestamp: " . $tStamp . "\r\n");
fputs($fp, "x-signature: " . $encodedSignature . "\r\n");
fputs($fp, "Content-Type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: " . strlen($data) . "\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data);
$result = '';
while (!feof($fp)) {
// receive the results of the request, 128 char
$result .= fgets($fp, 128);
}
} else {
return array(
'status' => 'err',
'error' => "$errstr ($errno)"
);
}
// close the socket connection:
fclose($fp);
// split the result header from the content
$result = explode("\r\n\r\n", $result, 2);
$header = isset($result[0]) ? $result[0] : '';
$content = isset($result[1]) ? $result[1] : '';
// return as structured array:
return array(
'status' => 'ok',
'header' => $header,
'content' => $content
);
}
$databpjs = '{
"request":
{
"t_sep":
{
"noKartu":"$_POST[noKartu]",
"tglSep":"$_POST[tglSep]",
"noRujukan":"$_POST[noRujukan]",
"catatan":"$_POST[catatan]"
}
}
}';
$data = array(
'Data' => $databpjs
);
$result = post_request($url, $port, $dataid, $tStamp, $encodedSignature, $databpjs, $referer = '');
if ($result['status'] == 'ok') {
//mengubah "re d sponse" menjadi "response"
$resultstr = str_replace("re d sponse", "response", trim(preg_replace('/\s\s+/', ' ', $result['content'])));
// print the result of the whole request:
echo "<pre>";
echo $resultstr;
echo "</pre>";
} else {
echo 'A error occured: ' . $result['error'];
} ?>
但反应不如预期。
任何人都可以帮助如何通过表单发送数据?
【问题讨论】:
-
那有什么反应呢?
-
4a {"metadata":{"code":"800","message":"nokartu 没有"},"response":null} 0
-
我不明白你有什么问题。您已经收到了回复,所以我假设您已经向 Web 服务发送了数据。
-
我想要这样的响应:4b {"metadata":{"code":"200","message":"OK"},"response":"1801R00501170000004"} 0 这个响应如果我直接写的代码:
{ "noKartu":"0000011110116", "tglSep":"2016-06-12 09:00:00", "noRujukan":"00001", "catatan":"test" }不是{ "noKartu":"$_POST[noKartu]", "tglSep":"$_POST[tglSep]", "noRujukan":"$_POST[noRujukan]", "catatan":"$_POST[catatan]" }