通過簡單實現 PHP 請求模擬賺了 50 元
這個週末發生了一件有趣的事情:在群裡看到有人需要做 PHP 開發的協助,並承諾有報酬,我自薦後解決了問題,獲得了 50 元。
接下來我詳細的說說整個事情的經過。
週六下班後開啟了 QQ,在瀏覽群訊息的時候看到這樣一句話:「群裡有沒有會寫 PHP 程式碼的,有償」。我立馬新增他的 QQ,並告訴他我是做 PHP 開發的,我可以提供幫助。
週日早上收到了他的回覆,他給了我一個檔案,讓我看看是否能實現,我仔細瀏覽了整個檔案,發現是第三方介面檔案,我告訴他對接這種介面很簡單,想知道他的具體業務是什麼,而他告訴我只需要幫忙調通就行,以下是我們的對話截圖:
php入門到就業線上直播課:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API偵錯工具:
雖然他出的錢並不多,但是當時我恰好沒有什麼事情,就接了,我拷貝了之前寫的程式碼,然後再改一下,很快就調通了,截圖給他看,他確認沒有問題後給我發了 50 元的紅包,我也把檔案發給他了,整個事情就結束了。
接下來我要說的是這個事情背後的技術問題。
首先他是懂 PHP 開發的,是在開發中遇到了難題,不知道是他懶得去搜尋還是沒有搜尋到解決方案,而這個難題實際上就是一個 PHP 實現請求模擬的小問題。
現在我把整個檔案程式碼分享出來,希望對遇到同樣問題的人有一些幫助,實現程式碼:
<?php
class HttpClientUtil
{
public function sendRequest($type = '', $url = '', $data = [], $timeout = 60)
{
try {
$type = strtoupper($type);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);//設定請求連結
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//不直接輸出頁面
curl_setopt($curl, CURLOPT_HEADER, 0);//獲取響應頭向下
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); //請求超時時間,單位:秒
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1');
if (substr($url, 0, 5) == 'https') { //自動判斷是否是https提交
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // https請求 不驗證證書和hosts
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
}
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type:application/json']);
switch ($type) {
case "GET" :
curl_setopt($curl, CURLOPT_HTTPGET, true);
break;
case "POST":
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
break;
case "PUT" :
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
break;
case "DELETE":
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
break;
}
$result = curl_exec($curl);
$err_code = curl_errno($curl);
$curlInfo = curl_getinfo($curl);
curl_close($curl);
if ($err_code) {
return false;
}
if ($curlInfo['http_code'] == 200) { //只有200狀態才返回資料
return json_decode($result, true);
}
return false;
} catch (\Exception $e) {
throw new \Exception($e->getMessage());
}
}
public function createSign($data){
// 拼接
$dataStr = '';
foreach ($data as $key=>$value){
$dataStr.="{$key}={$value}&";
}
// 拼接商戶金鑰
$dataStr.='access_token=***B8';
// 加密
$sign =strtoupper(MD5($dataStr));
$data['sign']=$sign;
return $data;
}
}
$api = new HttpClientUtil();
$url = 'http://***/order/pay';
$data=[
'userName'=>'test',
'version'=>'2.0',
'cardName'=>'張三',
'cardNum'=>'20932402940189310293',
'openBank'=>'招商銀行',
'amount'=>'10.00',
'outOrderId'=>'JD123123123',
'returnUrl'=>'/',
];
$res = $api->sendRequest('post',$url,$api->createSign($data));
print_r($res);
登入後複製
推薦學習:《》
以上就是關於我用PHP實現請求模擬的一件趣事!的詳細內容,更多請關注TW511.COM其它相關文章!