我有模拟器,你可以在图片中看到。在这个模拟器中,我有一个发送按钮,它将触发发送附加到URL的JSON字符串。
我用URL localhost / ussd / 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中做到这一点。我试过但不行我怎么能这样做。
它的工作方式如下:
Iindex.php文件:
答案 0 :(得分:1)
我从您的图片和您的代码中了解到的情景是:
localhost/ussd/index.php
。http://localhost:7000/ussd/send
并附加其他数据。对于此方案,您首先需要有一个表单,我正在创建添加Laravel Collective
的表单以使用{!! !!}
。
您也可以按照以下文档使用它:
<强> 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的更多信息,您可以按照以下文档进行操作:
答案 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);
}
}