当前位置:首页 » 编程语言 » php接口开发教程

php接口开发教程

发布时间: 2023-06-15 12:10:30

php中如何调用接口以及编写接口代码详解

可以用curl获取借楼的信息。
所谓接口,就是提供一个url,只要你满足它要求的参数,就能得到你要的数据。比如你拿到一个接口,带上所需的参数,复制到地址栏同样能得到。不过最好用程序得到。file_get_contents也可以用,不过有局限性。所以我建议用curl。给你一个函数,挺好用的。
function request($url,$https=true,$method='GET',$data=null){
$ch = curl_init();//初始化,得到资源
curl_setopt($ch, CURLOPT_URL,$url); //请求数据的路径
curl_setopt($ch, CURLOPT_HEADER,false);//是否输出头
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //不直接输出结果
//curl_setopt ($ch, CURLOPT_SAFE_UPLOAD, 0);//兼容php之后的版本
if($https){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //是否验证主机
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //是否进行证书验证
}
if($method=='POST'){
curl_setopt($ch, CURLOPT_POST, true); //POST传输
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //传输数据
}

$content_json = curl_exec($ch);

if ($content_json === false) {
return "网络请求出错: " . curl_error($ch);
}
curl_close($ch);
return $content_json;

}

⑵ 如何使用MixPHP来开发API接口

下面做一个开发 API 接口的简单实例:

从articles表,通过id获取一篇文章。

访问该接口的 URL:

1

http://www.e.com/articles/details?id=1

数据库表结构如下:

1

2

3

4

5

6

7

CREATE TABLE `articles` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`title` varchar(255) NOT NULL,

`content` varchar(255) NOT NULL,

`dateline` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

第一步

修改数据库配置文件,MixPHP 的应用配置文件中,关于数据库的信息都引用了 common/config/database.php 文件。

框架默认的 404/500 响应是网页,而 API 服务需要响应 JSON 数据,通常其他传统 MVC 框架需要修改很多地方才可完成这个需求,MixPHP 本身就提供该种配置,只需修改一下配置即可。

MixPHP 的默认 Web 应用中有两个配置文件,分别为:

  • main.php : 部署在 mix-httpd 时使用。

  • main_compatible.php :部署在 Apache/PHP-FPM 时使用。

  • 开发 API 时我们推荐在 Apache/PHP-FPM 下开发,上线再部署至 mix-httpd 即可,反正是无缝切换的。

    现在我们修改 response 键名下的 defaultFormat 键为 mixhttpError::FORMAT_JSON,如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

  • // 响应

    'response' => [

    // 类路径

    'class' => 'mixhttpcompatibleResponse',

    // 默认输出格式

    'defaultFormat' => mixhttpResponse::FORMAT_JSON,

    // json

    'json' => [

    // 类路径

    'class' => 'mixhttpJson',

    ],

    // jsonp

    'jsonp' => [

    // 类路径

    'class' => 'mixhttpJsonp',

    // callback键名

    'name' => 'callback',

    ],

    // xml

    'xml' => [

    // 类路径

    'class' => 'mixhttpXml',

    ],

    ],

  • 然后修改 main_compatible.php 文件中 error 键名下的 format 键为 mixhttpError::FORMAT_JSON,如下:

    1

    2

    3

    4

    5

    6

    7

  • // 错误

    'error' => [

    // 类路径

    'class' => 'mixhttpError',

    // 输出格式

    'format' => mixhttpError::FORMAT_JSON,

    ],

  • 第三步

    创建控制器:

    1

  • apps/index/controllers/ArticlesController.php

  • 1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

  • <?php

    namespace appsindexcontrollers;

    use mixfacadesRequest;

    use mixhttpController;

    use appsindexmessagesErrorCode;

    use appsindexmodelsArticlesForm;

    class ArticlesController extends Controller

    {

    public function actionDetails()

    {

    // 使用模型

    $model = new ArticlesForm();

    $model->attributes = Request::get();

    $model->setScenario('actionDetails');

    if (!$model->validate()) {

    return ['code' => ErrorCode::INVALID_PARAM];

    }

    // 获取数据

    $data = $model->getDetails();

    if (!$data) {

    return ['code' => ErrorCode::ERROR_ID_UNFOUND];

    }

    // 响应

    return ['code' => ErrorCode::SUCCESS, 'data' => $data];

    }

    }

  • 创建错误码类:

    1

  • apps/index/messages/ErrorCode.php

  • 1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

  • <?php

    namespace appsindexmessages;

    class ErrorCode

    {

    const SUCCESS = 0;

    const INVALID_PARAM = 100001;

    const ERROR_ID_UNFOUND = 200001;

    }

  • 创建表单验证模型:

    1

  • apps/index/models/ArticlesForm.php

  • 1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

  • <?php

    namespace appsindexmodels;

    use mixvalidatorsValidator;

    use appscommonmodelsArticlesModel;

    class ArticlesForm extends Validator

    {

    public $id;

    // 规则

    public function rules()

    {

    return [

    'id' => ['integer', 'unsigned' => true, 'maxLength' => 10],

    ];

    }

    // 场景

    public function scenarios()

    {

    return [

    'actionDetails' => ['required' => ['id']],

    ];

    }

    // 获取详情

    public function getDetails()

    {

    return (new ArticlesModel())->getRowById($this->id);

    }

    }

  • 创建数据表模型:

    1

  • apps/common/models/ArticlesModel.php

  • 1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

  • <?php

    namespace appscommonmodels;

    use mixfacadesRDB;

    class ArticlesModel

    {

    const TABLE = 'articles';

    // 获取一行数据通过id

    public function getRowById($id)

    {

    $sql = "SELECT * FROM `" . self::TABLE . "` WHERE id = :id";

    $row = RDB::createCommand($sql)->bindParams([

    'id' => $id,

    ])->queryOne();

    return $row;

    }

    }

  • 以上就是全部代码的编写。

    ⑶ 如何用PHP开发API接口

    他会提供相应接口给你的,具体调用方法就相当于讲求某个链接。act=get_user_list&type=json在这里operate.php相当于一个接口,其中get_user_list 是一个API(获取用户列表),讲求返回的数据类型为JSON格式。

    act=get_user_list&type=json';$ch=curl_init();curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,10);curl_setopt($ch,CURLOPT_POST,1);//启用POST提交$file_contents=curl_exec($ch);curl_close($ch);

    ⑷ 求php全套教程

    PHP视频教程 兄弟连PHP全套视频教程-高洛峰 细说PHP-高洛峰

    ⑸ 如何利用Thinkphp框架开发移动端接口详解

    方案一:给原生APP提供api接口

    使用TP框架时 放在common文件夹下文件名就叫function.php


    <?php
    /**
    *Createdbyzhangkx
    *Email:[email protected]
    *Date:2015/8/1
    *Time:23:15
    */

    /******api开发辅助函数*******/

    /**
    *@paramnull$msg返回正确的提示信息
    *@paramflagsuccessCURD操作成功
    *@paramarray$data具体返回信息
    *Functiondescript:返回带参数,标志信息,提示信息的json数组
    *
    */
    functionreturnApiSuccess($msg=null,$data=array()){
    $result=array(
    'flag'=>'Success',
    'msg'=>$msg,
    'data'=>$data
    );
    printjson_encode($result);
    }

    /**
    *@paramnull$msg返回具体错误的提示信息
    *@paramflagsuccessCURD操作失败
    *Functiondescript:返回标志信息‘Error',和提示信息的json数组
    */
    functionreturnApiError($msg=null){
    $result=array(
    'flag'=>'Error',
    'msg'=>$msg,
    );
    printjson_encode($result);
    }

    /**
    *@paramnull$msg返回具体错误的提示信息
    *@paramflagsuccessCURD操作失败
    *Functiondescript:返回标志信息‘Error',和提示信息,当前系统繁忙,请稍后重试;
    */
    functionreturnApiErrorExample(){
    $result=array(
    'flag'=>'Error',
    'msg'=>'当前系统繁忙,请稍后重试!',
    );
    printjson_encode($result);
    }

    /**
    *@paramnull$data
    *@returnarray|mixed|null
    *Functiondescript:过滤post提交的参数;
    *
    */

    functioncheckDataPost($data=null){
    if(!empty($data)){
    $data=explode(',',$data);
    foreach($dataas$k=>$v){
    if((!isset($_POST[$k]))||(empty($_POST[$k]))){
    if($_POST[$k]!==0&&$_POST[$k]!=='0'){
    returnApiError($k.'值为空!');
    }
    }
    }
    unset($data);
    $data=I('post.');
    unset($data['_URL_'],$data['token']);
    return$data;
    }
    }

    /**
    *@paramnull$data
    *@returnarray|mixed|null
    *Functiondescript:过滤get提交的参数;
    *
    */
    functioncheckDataGet($data=null){
    if(!empty($data)){
    $data=explode(',',$data);
    foreach($dataas$k=>$v){
    if((!isset($_GET[$k]))||(empty($_GET[$k]))){
    if($_GET[$k]!==0&&$_GET[$k]!=='0'){
    returnApiError($k.'值为空!');
    }
    }
    }
    unset($data);
    $data=I('get.');
    unset($data['_URL_'],$data['token']);
    return$data;
    }
    }


    查询单个果品详细信息
    /**
    *发布模块
    *
    *获取信息单个果品详细信息
    *
    */
    (){
    //检查是否通过post方法得到数据
    checkdataPost('id');
    $where['id']=$_POST['id'];
    $field[]='id,fruit_name,high_price,low_price,address,size,weight,fruit_pic,remark';
    $releaseInfo=$this->release_obj->findRelease($where,$field);
    $releaseInfo['remark']=mb_substr($releaseInfo['remark'],0,49,'utf-8').'...';
    //多张图地址按逗号截取字符串,截取后如果存在空数组则需要过滤掉
    $releaseInfo['fruit_pic']=array_filter(explode(',',$releaseInfo['fruit_pic']));
    $fruit_pic=$releaseInfo['fruit_pic'];unset($releaseInfo['fruit_pic']);
    //为图片添加存储路径
    foreach($fruit_picas$k=>$v){
    $releaseInfo['fruit_pic'][]='http://'.$_SERVER['HTTP_HOST'].'/Uploads/Release/'.$v;
    }
    if($releaseInfo){
    returnApiSuccess('',$releaseInfo);
    }else{
    returnApiError('什么也没查到(+_+)!');
    }
    }


    findRelease()方法的model
    /**
    *查询一条数据
    */
    publicfunctionfindRelease($where,$field){
    if($where['status']==''||empty($where['status'])){
    $where['status']=array('neq','9');
    }
    $result=$this->where($where)->field($field)->find();
    return$result;
    }


    app端接收到的数据(解码json之后)
    {
    "flag":"success",
    "message":"",
    "responseList":{
    "id":"2",
    "fruit_name":"苹果",
    "high_price":"8.0",
    "low_price":"5.0",
    "address":"天津小白楼水果市场",
    "size":"2.0",
    "weight":"2.0",
    "remark":"急需...",
    "fruit_pic":[
    "http://fruit.txunda.com/Uploads/Release/201508/55599e7514815.png",
    "http://fruit.txunda.com/Uploads/Release/201508/554f2dc45b526.jpg"
    ]
    }
    }


    app端接收到的数据(原生json串)
    代码如下:

    {"flag":"success","message":"","responseList":{"id":"2","fruit_name":"u82f9u679c","high_price":"8.0","low_price":"5.0","address":"","size":"2.0","weight":"2.0","remark":"u6025u9700...","fruit_pic":["http://fruit.txunda.com/Uploads/Release/201508/55599e7514815.png","http://fruit.txunda.com/Uploads/Release/201508/554f2dc45b526.jpg"]}}

    方案二:另外我们还可以通过ThinkPHP实现移动端访问自动切换主题模板,这样也可以做到移动端访问

    ThinkPHP的模板主题机制,如果只是在PC,只要需修改 DEFAULT_THEME (新版模板主题默认是空,表示不启用模板主题功能)配置项就可以方便的实现多模板主题切换。

    但对于移动端与PC端,也许你会设计完全不同的主题风格,且针对不同的来路提供不同的渲染方式,其中一种比较流行的方法是“响应式设计”,但就本人经历而言,要实现完全的“响应式设计”并不是那么容易,且解决兼容问题也是个难题,假设是大型站点,比如:淘宝、网络、拍拍这些,响应式设计肯定是满足不了需求的,而是需要针对手机访问用户提供单独的手机网站。

    ThinkPHP 完全能够实现,而且非常的简单。与TPM的智能模版切换引擎相同,只要对来路进行判断处理就行了。

    一、将 ismobile() 加入到{项目/Common/common.php}

    functionismobile(){
    //如果有HTTP_X_WAP_PROFILE则一定是移动设备
    if(isset($_SERVER['HTTP_X_WAP_PROFILE']))
    returntrue;

    //此条摘自TPM智能切换模板引擎,适合TPM开发
    if(isset($_SERVER['HTTP_CLIENT'])&&'PhoneClient'==$_SERVER['HTTP_CLIENT'])
    returntrue;
    //如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
    if(isset($_SERVER['HTTP_VIA']))
    //找不到为flase,否则为true
    returnstristr($_SERVER['HTTP_VIA'],'wap')?true:false;
    //判断手机发送的客户端标志,兼容性有待提高
    if(isset($_SERVER['HTTP_USER_AGENT'])){
    $clientkeywords=array(
    'nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel','lenovo','iphone','ipod','blackberry','meizu','android','netfront','symbian','ucweb','windowsce','palm','operamini','operamobi','openwave','nexusone','cldc','midp','wap','mobile'
    );
    //从HTTP_USER_AGENT中查找手机浏览器的关键字
    if(preg_match("/(".implode('|',$clientkeywords).")/i",strtolower($_SERVER['HTTP_USER_AGENT']))){
    returntrue;
    }
    }
    //协议法,因为有可能不准确,放到最后判断
    if(isset($_SERVER['HTTP_ACCEPT'])){
    //如果只支持wml并且不支持html那一定是移动设备
    //如果支持wml和html但是wml在html之前则是移动设备
    if((strpos($_SERVER['HTTP_ACCEPT'],'vnd.wap.wml')!==false)&&(strpos($_SERVER['HTTP_ACCEPT'],'text/html')===false||(strpos($_SERVER['HTTP_ACCEPT'],'vnd.wap.wml')<strpos($_SERVER['HTTP_ACCEPT'],'text/html')))){
    returntrue;
    }
    }
    returnfalse;
    }

    二、在{项目/Lib/}创建一个 CommonAction.php,假设你的项目已公共控制器,则无需创建,直接加在里面就行了。

    {
    Publicfunction_initialize(){
    //移动设备浏览,则切换模板
    if(ismobile()){
    //设置默认默认主题为Mobile
    C('DEFAULT_THEME','Mobile');
    }
    //............你的更多代码.......
    }
    }

    ⑹ 如何用php开发微信支付接口

    appid //公众号后台开发者中心获得(和邮件内的一样) mchid//邮件内获得 key//商户后台自己设置 appsecret //公众号开发者中心获得
    两个证书文件,邮件内获得 apiclient_cert.pem apiclient_key.pem
    注意事项:
    公众号后台微信支付-》开发配置-》新增测试目录和测试个人微信号。
    开发者中心-》网页授权获取用户基本信息-》修改成你的测试域名。否则会出现redirect_uri 参数

    ⑺ php如何开发API接口

    比如一个自定义函数:function test(){echo ‘hello world’;}就可以叫做 api。api 既可以是单个的函数,也可以是封装在类里的方法,当然它们也是程序代码。开发一个 api 的流程可以很简单,也可以很复杂,视具体的编程任务而决定,并没有特定的规则。比如,你需要为自己建立一个常用的函数库,命名为 my.lib.php然后把你自己编写的自定义函数,全部写在这个文件里面,那么,你就拥有了自己的api。开发的时候,只需要引入 my.lib.php,你就可以调用自己的 api 了。这是一个比较简单的例子。稍微复杂一点的,你可以把函数封装在类里面,方便继承和重用,还可以根据函数名称做一些程序设计,这个一句话说不清楚,给一个简单的例子吧:class mylib{function showmy(){echo ‘这是我的一个类方法’;}}调用的时候,先要实例化类,然后再调用方法。再复杂一点的就是使用类接口,区别就是接口里面定义的只是方法原型,而你需要通过具体的类来实现接口中的函数,具体请参考 php 手册

    热点内容
    锐志哪个配置性价比最高 发布:2025-02-12 17:38:43 浏览:918
    智能推送算法 发布:2025-02-12 17:38:41 浏览:835
    拍照上传器 发布:2025-02-12 17:34:29 浏览:652
    androidweb框架 发布:2025-02-12 17:32:45 浏览:76
    安卓编程贺卡 发布:2025-02-12 17:32:44 浏览:838
    php获取数据库的字段 发布:2025-02-12 17:29:02 浏览:766
    服务器地址消失 发布:2025-02-12 17:23:36 浏览:951
    后台执行php脚本 发布:2025-02-12 17:21:45 浏览:471
    spring编程式事务 发布:2025-02-12 17:16:55 浏览:398
    nginx禁止ip访问 发布:2025-02-12 17:15:14 浏览:274