PHP を使用したリクエストのシミュレーションに関する興味深い点がありました。

藏色散人
リリース: 2023-04-11 08:20:01
転載
4504 人が閲覧しました

次の 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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:learnku.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!