• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

PHP实现请求模拟

武飞扬头像
PHP中文网
帮助23

通过简单实现 PHP 请求模拟赚了 50 元

这个周末发生了一件有趣的事情:在群里看到有人需要做 PHP 开发的协助,并承诺有报酬,我自荐后解决了问题,获得了 50 元。

接下来我详细的说说整个事情的经过。

周六下班后打开了 QQ,在浏览群消息的时候看到这样一句话:“群里有没有会写 PHP 代码的,有偿”。我立马添加他的 QQ,并告诉他我是做 PHP 开发的,我可以提供帮助。

周日早上收到了他的回复,他给了我一个文档,让我看看是否能实现,我仔细浏览了整个文档,发现是第三方接口文档,我告诉他对接这种接口很简单,想知道他的具体业务是什么,而他告诉我只需要帮忙调通就行,以下是我们的对话截图:

学新通技术网

学新通技术网

虽然他出的钱并不多,但是当时我恰好没有什么事情,就接了,我拷贝了之前写的代码,然后再改一下,很快就调通了,截图给他看,他确认没有问题后给我发了 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);

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanfcjga
系列文章
更多 icon
同类精品
更多 icon
继续加载