2017-01-07 7 views
0

を経由してWebサービスにデータを送信します。私は次のように、JSON形式のWebサービスにデータを送信するフォーム

{ 
    "request": 
    { 
    "t_sep": 
     { 
      "noKartu":"0000011110116", 
      "tglSep":"2016-06-12 09:00:00", 
      "noRujukan":"00001", 
      "catatan":"test" 
     } 
    } 
} 

次応答(レスポンス)では:

{ 
    metadata: 
     { 
     code: "200" 
     message: "OK" 
     } 
    response: "0301R00105160000123" 
} 

私は変数 "noKartu"、 "tglSep"、 "noRujukan"、 "catatan"の値を変更するフォームを作成したい。

formulir.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> 

<?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']; 
    } ?> 

aksiformulir.phpしかし、期待通りの応答ではありません。

誰でもフォーム経由でデータを送信する方法を教えてください。

+0

それでは、何が応答ですか? –

+0

4a {"metadata":{"code": "800"、 "message": "ノーカルトはありません"}、 "response":null} 0 – AQanitah

+0

あなたの問題は何も分かりません。すでに応答がありますので、すでにWebサービスにデータを送信していると仮定します。 –

答えて

0

私は問題があなたの$databpjsにあると思います。あなたはjson形式ではなく文字列でデータを送信しました。これを試して。

$databpjs = array("request" => 
     array("sep" => 
     array(
      "noKartu" => "0000011110116", 
      "tglSep" => "2016-06-12 09:00:00", 
      "noRujukan" => "00001", 
      "catatan" => "test" 
     ) 
    ) 
); 

それが有効なJSONフォーマットを行います。

関連する問題