當前位置:首頁 » 編程語言 » 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 手冊

    熱點內容
    ftp匿名帳號 發布:2025-02-12 18:04:32 瀏覽:763
    銳志哪個配置性價比最高 發布: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