Php 如何在Laravel中使用JSON和HTTP POST来处理票务API

Php 如何在Laravel中使用JSON和HTTP POST来处理票务API,php,json,laravel,Php,Json,Laravel,我正在尝试实现一个JSON负载,以便在我的PHP应用程序(使用Laravel框架)中使用HTTP POST和这个API()创建一个票证,我完全不知道如何开始攻击这个问题。有什么见解吗 我目前有一个用laravel构建的表单,它将通过表单收集用户数据。我的目标是从上述表单获取数据,填充JSON有效负载上的字段(我下面的字段来自API的github页面),然后在点击“提交表单”按钮时将票据提交给系统。如果您能提供任何帮助或建议,我们将不胜感激 这就是JSON负载的样子,但我也不知道在laravel中

我正在尝试实现一个JSON负载,以便在我的PHP应用程序(使用Laravel框架)中使用HTTP POST和这个API()创建一个票证,我完全不知道如何开始攻击这个问题。有什么见解吗


我目前有一个用laravel构建的表单,它将通过表单收集用户数据。我的目标是从上述表单获取数据,填充JSON有效负载上的字段(我下面的字段来自API的github页面),然后在点击“提交表单”按钮时将票据提交给系统。如果您能提供任何帮助或建议,我们将不胜感激

这就是JSON负载的样子,但我也不知道在laravel中放在哪里/如何格式化它

{
    "alert": true,
    "autorespond": true,
    "source": "API",
    "name": "Angry User",
    "email": "randoemail@gmail.com",
    "phone": "3333333333",
    "subject": "Testing API",
    "ip": "123.211.233.122",
    "message": "data:text/html,MESSAGE <b>HERE</b>",
   }
{
“警惕”:没错,
“自动响应”:正确,
“来源”:“API”,
“名称”:“愤怒的用户”,
“电子邮件”:randoemail@gmail.com",
“电话”:“3333”,
“主题”:“测试API”,
“ip”:“123.211.233.122”,
“消息”:“数据:文本/html,此处消息”,
}

您要做的应该通过两个步骤来实现

  • 使用所需的值构建一个PHP dict/数组,然后(取决于HTTP库-见下文)将其转换为JSON。控制器方法中的类似内容:
    
    $dict['alert']=$request->input('alert');
    $dict['autorespond']=$request->input('autorespond');
    ...
    $json=json_encode($dict);
    
    或者,如果没有不应发布到API的内容,您可以执行以下操作:
    
    $json=json_encode($request->all());
    
    见:和

  • 一旦有了json,就需要一个http库来执行请求。Laravel建议您大口大口喝,这样您可以做如下操作:
    
    $client=new GuzzleHttp\client(['base\u uri'=>'https://github.com.com/whatever/']);
    $response=$client->post('the/api/endpoint',['json'=>$request->all());
    
    请注意,您不需要对此处的内容进行
    json\u编码,因为Guzzle会为您进行编码。
    见:

  • 从那里,您可以根据需要处理数据。

    您可以这样尝试(不需要其他东西):

    在某处创建一个osTicket库(我已经将其放在app/Library中)

    在.env中设置变量:

    TICKET_URL=http://xxxxxxxx.com/api/http.php/tickets.json
    TICKET_APIKEY={api_key_here}
    TICKET_IP={your_ip}
    
    然后将表单post数据传递给控制器,如下所示:

    namespace App\Http\Controllers;
    use App\Http\Controllers\Controller;
    use Illuminate\Http\Request;
    use App\Library\osTicket;
    use Auth;
    use User;
    
    class WhateverController extends Controller {
    public function addticket(Request $request) {
    
          $user = User::find(Auth::id());
          $ticket = new osTicket;
          $ticket->createTicket($user->name, $user->email, $user->phone, $request->subject, $request->message);
          if($result === true) {
    
              return back();
    
            } else {
    
              return back()->with('status', $result);
    
            }
    
      }
    
    }
    

    您是否从API获取此有效负载?或者这是客户提交到票务系统的内容?请澄清事件的顺序以及您希望在何时捕获的内容。我目前有一个使用laravel构建的表单,该表单将通过表单收集用户数据。我的目标是从上述表单获取数据,填充JSON有效负载上的字段(我上面的字段来自API的github页面),然后在点击“提交表单”按钮时将票据提交给系统。我建议您:制作票据,查看它在原始数据库中弹出哪些字段并设置其值。然后将laravel模型设置为票务系统的数据库字段来模拟这一点。我知道要填充哪些字段以及如何将其放入laravel中,我只是有点不知道如何将其转换为json和http post(我也从未使用过)。如果您对这些字段进行popuplate,则不需要post。。。票务系统会认为它是通过或任何方式注入的。非常感谢!这给了我一个很好的立足点,我很欣赏['json'=>$request->all()];如果我只想使用dict变量中的内容,我会将其改为json=>$dict吗?是的!Guzzle会很高兴地为您将dict转换为json对象。
    namespace App\Http\Controllers;
    use App\Http\Controllers\Controller;
    use Illuminate\Http\Request;
    use App\Library\osTicket;
    use Auth;
    use User;
    
    class WhateverController extends Controller {
    public function addticket(Request $request) {
    
          $user = User::find(Auth::id());
          $ticket = new osTicket;
          $ticket->createTicket($user->name, $user->email, $user->phone, $request->subject, $request->message);
          if($result === true) {
    
              return back();
    
            } else {
    
              return back()->with('status', $result);
    
            }
    
      }
    
    }