首頁  >  文章  >  後端開發  >  關於我用PHP實作請求模擬的一件趣事!

關於我用PHP實作請求模擬的一件趣事!

藏色散人
藏色散人轉載
2022-10-26 17:19:234516瀏覽

以下由php教學專欄跟大家介紹實作PHP請求模擬的一件趣事,希望對大家有幫助!

透過簡單實作PHP 請求模擬賺了50 元

#這個週末發生了一件有趣的事:在群組裡看到有人需要做PHP 開發的協助,並承諾有報酬,我自薦後解決了問題,獲得了50 元。

接下來我詳細的說說整個事情的經過。

週六下班後打開了 QQ,在瀏覽群組訊息的時候看到這樣一句話:「群組有沒有會寫 PHP 程式碼的,有償」。我立刻加入他的 QQ,並告訴他我是做 PHP 開發的,我可以幫忙。

週日早上收到了他的回复,他給了我一個文檔,讓我看看是否能實現,我仔細瀏覽了整個文檔,發現是第三方接口文檔,我告訴他對接這種介面很簡單,想知道他的具體業務是什麼,而他告訴我只需要幫忙調通就行,以下是我們的對話截圖:

關於我用PHP實作請求模擬的一件趣事!

關於我用PHP實作請求模擬的一件趣事!

雖然他出的錢不多,但是當時我剛好沒有什麼事情,就接了,我拷貝了之前寫的程式碼,然後再改一下,很快就調通了,截圖給他看,他確認沒有問題後給我發了50 元的紅包,我也把文件發給他了,整個事情就結束了。

接下來我要說的是這個事情背後的技術問題。

首先他是懂PHP 開發的,是在開發中遇到了難題,不知道是他懶得去搜尋還是沒有搜尋到解決方案,而這個難題其實就是一個PHP 實作請求模擬的小問題。

現在我把整個檔案程式碼分享出來,希望對遇到同樣問題的人有一些幫助,實作程式碼:

<?php
class HttpClientUtil
{
    public function sendRequest($type = &#39;&#39;, $url = &#39;&#39;, $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, &#39;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1&#39;);
            if (substr($url, 0, 5) == &#39;https&#39;) { //自动判断是否是https提交
                curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);  // https请求 不验证证书和hosts
                curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
            }
            curl_setopt($curl, CURLOPT_HTTPHEADER, [&#39;Content-Type:application/json&#39;]);
            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[&#39;http_code&#39;] == 200) { //只有200状态才返回数据
                return json_decode($result, true);
            }
            return false;
        } catch (\Exception $e) {
            throw new \Exception($e->getMessage());
        }
    }
    public function createSign($data){
        // 拼接
        $dataStr = &#39;&#39;;
        foreach ($data as $key=>$value){
            $dataStr.="{$key}={$value}&";
        }
        // 拼接商户密钥
        $dataStr.=&#39;access_token=***B8&#39;;
        // 加密
        $sign =strtoupper(MD5($dataStr));
        $data[&#39;sign&#39;]=$sign;
        return $data;
    }
}
$api = new HttpClientUtil();
$url = &#39;http://***/order/pay&#39;;
$data=[
    &#39;userName&#39;=>&#39;test&#39;,
    &#39;version&#39;=>&#39;2.0&#39;,
    &#39;cardName&#39;=>&#39;张三&#39;,
    &#39;cardNum&#39;=>&#39;20932402940189310293&#39;,
    &#39;openBank&#39;=>&#39;招商银行&#39;,
    &#39;amount&#39;=>&#39;10.00&#39;,
    &#39;outOrderId&#39;=>&#39;JD123123123&#39;,
    &#39;returnUrl&#39;=>&#39;/&#39;,
];
$res = $api->sendRequest(&#39;post&#39;,$url,$api->createSign($data));
print_r($res);

推薦學習:《PHP影片教學

以上是關於我用PHP實作請求模擬的一件趣事!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除