如何在Laravel中获取和发送Json字符串?

时间:2017-01-24 03:02:59

标签: php json laravel

我有模拟器,你可以在图片中看到。在这个模拟器中,我有一个发送按钮,它将触发发送附加到URL的JSON字符串。

我用URL localhost / ussd / index.php

测试

index.php页面:

<?php

header('Content-type: application/json');
$inputJSON = file_get_contents('php://input');
$input= json_decode( $inputJSON, TRUE );

$data["message"]='We  Display This in Phone Screen';
$data["applicationId"]=$input["applicationId"];
$data["password"]="password";
$data["version"]="1.0";
$data["sessionId"]=$input["sessionId"];
$data["ussdOperation"]="mt-cont";
$data["destinationAddress"]=$input["sourceAddress"];
$data["encoding"]="440";
$data["chargingAmount"]="5";

$json_string = json_encode($data);
$json_url = "http://localhost:7000/ussd/send";

$ch = curl_init( $json_url );

$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => array('Content-type: application/json') ,
CURLOPT_POSTFIELDS => $json_string
);
curl_setopt_array( $ch, $options );

$result =  curl_exec($ch); 

?> 

然后index.php文件获取此字符串并将另一个字符串发送到该页面。模拟器页面获取此JSON对象并显示它。这可以在 index.php 文件中完成。

但我想在Laravel中做到这一点。我试过但不行我怎么能这样做。

它的工作方式如下: It works like that => image

Iindex.php文件: Iindex.php file

2 个答案:

答案 0 :(得分:1)

我从您的图片和您的代码中了解到的情景是:

  1. 你有一张表格。
  2. 您填写了表单并将帖子请求发送给localhost/ussd/index.php
  3. 您的代码会过滤数据并将请求发送给http://localhost:7000/ussd/send并附加其他数据。
  4. 模拟器获取数据并显示。
  5. 对于此方案,您首先需要有一个表单,我正在创建添加Laravel Collective的表单以使用{!! !!}

    您也可以按照以下文档使用它:

      

    https://laravelcollective.com/docs/5.3/html

    <强> form.blade.php

    {!! Form::open(['url' => 'ussd.store']) !!}
        {!! Form::input('applicationId') !!}
        {!! Form::password('password') !!}
        {!! Form::input('sessionId') !!}
        {!! Form::input('sourceAddress') !!}
    {!! Form::Close() !!}
    

    您还需要为此操作创建路径:

    <强> routes.php文件

    Route::resource('ussd', 'UssdController');
    

    我正在使用store方法,但由于您没有存储数据,因此可以向任何帖子方法发送请求。

    <强> UssdController.php

    use GuzzleHttp\Client;
    
    class UssdController extends Controller
    {
        public function store(Request $request)
        {
            $data = [];
            $data["message"]='We  Display This in Phone Screen';
            $data["applicationId"]=$request["applicationId"];
            $data["password"]=$request["password"];
            $data["version"]="1.0";
            $data["sessionId"]=$request["sessionId"];
            $data["ussdOperation"]="mt-cont";
            $data["destinationAddress"]=$request["sourceAddress"];
            $data["encoding"]="440";
            $data["chargingAmount"]="5";
    
            $client = new Client(['base_uri' => 'http://localhost:7000/']);
            $response = $client->request('POST', 'ussd/send', $data);
            return $response->getBody();
        }
    }
    

    我认为http://localhost:7000是您发送POST数据的不同应用程序。

    您可以使用GuzzleHttp将请求发送到不同的应用程序。 要安装guzzlehttp,请使用:

    composer require guzzlehttp/guzzle
    

    我不知道在将数据发送到模拟器后你会做什么,但它应该有一些调整。

    要了解有关guzzleHttp的更多信息,您可以按照以下文档进行操作:

      

    http://docs.guzzlephp.org/en/latest/

答案 1 :(得分:0)

谢谢大家,我找到了答案

web.php就是这样

Route :: post('test3','UssdController @ test3');

像这样的UssdController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use GuzzleHttp\Client;
use Illuminate\Support\Facades\Log;
class UssdController extends Controller
{
    public function test3(Request $request){

       $data=array(
           "message" =>'We  Display This in Phone Screen',
           "applicationId"=>$request->applicationId,
               "password"=>"password",
            "version"=>"1.0",
            "sessionId"=>$request->sessionId,
            "ussdOperation"=>"mt-cont",
           "destinationAddress"=>$request->sourceAddress,
            "encoding"=>"440",
            "chargingAmount"=>"5",
       );

        $jsonData =json_encode($data);// response()->json($data);
        $json_url = "http://localhost:7000/ussd/send";

        $ch = curl_init( $json_url );
        $options = array(
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HTTPHEADER => array('Content-type: application/json') ,
            CURLOPT_POSTFIELDS => $jsonData
        );
        curl_setopt_array( $ch, $options );
        $result =  curl_exec($ch);
        Log::info($result);
        curl_close($ch);
    }
}