下面由Laravel教程欄目給大家介紹關(guān)于實(shí)現(xiàn)PHP請求模擬的一件趣事,希望對大家有所幫助!
通過簡單實(shí)現(xiàn) PHP 請求模擬賺了 50 元
這個(gè)周末發(fā)生了一件有趣的事情:在群里看到有人需要做 PHP 開發(fā)的協(xié)助,并承諾有報(bào)酬,我自薦后解決了問題,獲得了 50 元。
接下來我詳細(xì)的說說整個(gè)事情的經(jīng)過。
周六下班后打開了 QQ,在瀏覽群消息的時(shí)候看到這樣一句話:“群里有沒有會寫 PHP 代碼的,有償”。我立馬添加他的 QQ,并告訴他我是做 PHP 開發(fā)的,我可以提供幫助。
周日早上收到了他的回復(fù),他給了我一個(gè)文檔,讓我看看是否能實(shí)現(xiàn),我仔細(xì)瀏覽了整個(gè)文檔,發(fā)現(xiàn)是第三方接口文檔,我告訴他對接這種接口很簡單,想知道他的具體業(yè)務(wù)是什么,而他告訴我只需要幫忙調(diào)通就行,以下是我們的對話截圖:
php入門到就業(yè)線上直播課:進(jìn)入學(xué)習(xí)
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調(diào)試工具:點(diǎn)擊使用
雖然他出的錢并不多,但是當(dāng)時(shí)我恰好沒有什么事情,就接了,我拷貝了之前寫的代碼,然后再改一下,很快就調(diào)通了,截圖給他看,他確認(rèn)沒有問題后給我發(fā)了 50 元的紅包,我也把文件發(fā)給他了,整個(gè)事情就結(jié)束了。
接下來我要說的是這個(gè)事情背后的技術(shù)問題。
首先他是懂 PHP 開發(fā)的,是在開發(fā)中遇到了難題,不知道是他懶得去搜索還是沒有搜索到解決方案,而這個(gè)難題實(shí)際上就是一個(gè) PHP 實(shí)現(xiàn)請求模擬的小問題。
現(xiàn)在我把整個(gè)文件代碼分享出來,希望對遇到同樣問題的人有一些幫助,實(shí)現(xiàn)代碼:
<?php class HttpClientUtil { public function sendRequest($type = '', $url = '', $data = [], $timeout = 60) { try { $type = strtoupper($type); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url);//設(shè)置請求鏈接 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//不直接輸出頁面 curl_setopt($curl, CURLOPT_HEADER, 0);//獲取響應(yīng)頭向下 curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); //請求超時(shí)時(shí)間,單位:秒 curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1'); if (substr($url, 0, 5) == 'https') { //自動(dòng)判斷是否是https提交 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // https請求 不驗(yàn)證證書和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狀態(tài)才返回?cái)?shù)據(jù) 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);
推薦學(xué)習(xí):《PHP視頻教程》