php介面開發教程
⑴ 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 手冊