PHP 调用第三方API接口 、带参数跳转PHP

前排说重点:关键方法在context.php文件里,有关于第三方接口调用的方法 function  api_execute。 主要是在传递参数时,如果选择json格式传递,需要做相关处理; 然后在api_execute方法里,也需要做参数的相关格式设置。


首先是本地跑起一个java项目,模拟第三方接口的提供:

    @PostMapping("/testLogin")
    public Map test(@RequestBody Map mapData) {

        Map<String, String> map = new HashMap<>();
        System.out.println("获取的值:" + mapData.toString());
        if (mapData.get("username").equals("admin") && mapData.get("pwd").equals("123456")) {
            map.put("code", "200");
            map.put("data", "login success");
        }else {
            map.put("code", "-1");
            map.put("data", "login fail");
        }
        return map;
    }

OK,接下来是PHP相关代码:

显示目录结构:

场景流程:
buttonTest.php 模拟用户输入账户名和密码,点击按钮进行登录
buttonTest.php 带着参数触发context.php,将参数传递过去
context.php带着参数,调用方法去访问第三方接口API
第三方接口API收到参数后,做登录校验处理,返回参数
context.php 接收第三方接口API的参数,做逻辑处理(数据库写入等),带着结果参数跳转main.php

最后main.php对结果参数做处理


buttonTest.php:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
</head>
<body>
<form method="post" action="context.php">
username: <input type="text" name="username">
pwd: <input type="text" name="pwd">

<input type="submit" value="login">
</form>
</bosy>
</html>


context.php:

<?php
   $username=$_POST["username"]; //传递过来的username
   $pwd=$_POST["pwd"];           //传递过来的pwd

   $data_json = array("username" => $username, "pwd" => $pwd);  //将参数拼接成json                                                                  
   $data = json_encode($data_json);  //模拟调用接登录接口参数

   $url="http://localhost:8088/testLogin";//模拟登录接口
   $method="POST";
   $result= api_execute($method,$url,$data);//获取接口返回值
   $result_json= json_decode($result, true);
   $code=$result_json['code'];
   $data=$result_json['data'];
   $mysql_result=user_insert();//调用user插入方法,保存用户信息
   echo "CODE: $code <br> 
   DATA: $data <br>";
   echo  "$mysql_result<br>AAA";
   if ($mysql_result="success") {
   	$a1="login success,welcome to the mainHtml !";
     // require ("../studyDay/main.php");
   	header('Location:http://localhost/studyDay/main.php?n='.$a1);

   }


//用户数据插入
   function user_insert(){

   	$mysql_host = "localhost";
   	$mysql_username = "root";
   	$mysql_password = "root";
   	$mysql_dbname = "discuztest";

// 创建连接
   	$conn = new mysqli($mysql_host, $mysql_username, $mysql_password, $mysql_dbname);
// 检测连接
   	if ($conn->connect_error) {
   		die("连接失败: " . $conn->connect_error);
   	} 

   	$uid=10;
   	$username="JCccc";
   	$password="1223344";
			// $password="123456";
   	$email="861122334@qq.com";
   	$regip="127.0.0.1";
   	$regdate="1567748889";
   	$salt="9a170e";
   	$sql = "INSERT INTO pre_ucenter_members (uid,username, password,email,regip,regdate,salt)
   	VALUES ('$uid','$username', '$password','$email','$regip','$regdate','$salt')";

   	if ($conn->query($sql) === TRUE) {
   		return "success";
   	} else {
   		echo "Error: " . $sql . "<br>" . $conn->error;
   		return "fail";
   	}

   	$conn->close();
   }

//api接口调用
   function api_execute($method, $url, $data = false) {
	$curl = curl_init();//初始化curl
	switch ($method)
	{
		case "POST":
		curl_setopt($curl, CURLOPT_POST, 1);
		if ($data)
			curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
		break;
		case "PUT":
		curl_setopt($curl, CURLOPT_PUT, 1);
		break;
		default:
		if ($data)
			$url = sprintf("%s?%s", $url, http_build_query($data));
	}
    // Optional Authentication:
	curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
	curl_setopt($curl, CURLOPT_URL, $url);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_HTTPHEADER, array( /*设置请求头*/               
		'Content-Type: application/json',  
		'Content-Length: ' . strlen($data))           
);
	$result = curl_exec($curl);
	curl_close($curl); //关闭 curl
	return $result;
}   

?>



main.php:

<?php
   $a=$_REQUEST['n'];
   echo $a;
?>


 测试结果:



数据库: 

java第三方接口:

 

 

 

posted on 2022-11-08 07:35  小目标青年  阅读(420)  评论(0编辑  收藏  举报