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

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

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

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

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

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

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

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

原文最先在我的个人博客上发布

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 1年前 自动加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 35

我上次更离谱,一个也是qq群加的,他让我帮他启动下nginx,给我宝塔地址,我登进去一看,好家伙nginx这不是启动着吗(因为按钮显示启动状态),于是我就跟他说启动好了,他就微信转了80给我,全程不到3分钟

1年前 评论
我爱大可乐 1年前

活太多的时候,能分点做吗? :flushed:

1年前 评论
SevDot (楼主) 1年前

我做群里接过一个 在页面按钮点击的时候加个layer的弹窗 30块 :joy:

1年前 评论
SevDot (楼主) 1年前

不错,一顿饭钱

1年前 评论

信息差真的好赚钱,我曾经给一个群友做一个cms官网,它本来主要2 3个页面就够了,结果我一顿操作直接给它干了一个cms 也用不了几个小时,但是微微说说了花一周,当时他看到效果的时候欣喜若狂(我是颜控 模板找了1个小时 而且我还帮忙切图 算0.3个设计师 效果相当不错),他说多少钱 我说你开价就好了 我就当交个朋友以后继续合作,他说5000怎么样,我一口答应了,现在还有联系,后面还做了好多套系统(基本都是套用或者开源,但是效果都很好),小赚小赚 哈哈哈哈(没有错我以前就是干外包的)

1年前 评论
易水 1年前
七年 (作者) 1年前

我去,你们赚钱真容易

1年前 评论
小李世界 1年前
qinghe 1年前

给 React Scratch GUI 埋点,带傻瓜文档,两三小时 600 块。 :flushed:

1年前 评论
巅峰互联

应该是 500 而不是50

1年前 评论
Bin

Postman的请求转化成代码,不用谢我,能分我20吗?😁

1年前 评论
aodaobi 1年前
SevDot (楼主) 1年前
aodaobi

我感觉我是黑心程序员,给人家做一个传奇官网8000(尾款1000没给呢,不过这个设计前端花了2000),然后帮忙对接支付宝微信支付要了3000.哈哈哈

1年前 评论
巅峰互联

你是中间商,良心中间商。正常收费把。

1年前 评论

谢谢你 早上起来就看到了。等于捡了50块 :heart_eyes:

1年前 评论
draven

让我想起来上次帮忙解决跨域挣了50块

1年前 评论

看着支付就知道是做灰产的

1年前 评论

我理解老哥的。 我也是出钱让别人做过一个JAVA的 IMAGE转HEX。

1年前 评论

我怎么没这样运气 :grin:

1年前 评论

不用 https,也不验证证书?

1年前 评论
UKNOW

干的漂亮,这样才能抬高程序员价格,不然都内卷 最后程序员都成白菜价了 哈哈

1年前 评论

我上次更离谱,一个也是qq群加的,他让我帮他启动下nginx,给我宝塔地址,我登进去一看,好家伙nginx这不是启动着吗(因为按钮显示启动状态),于是我就跟他说启动好了,他就微信转了80给我,全程不到3分钟

1年前 评论
我爱大可乐 1年前

mp.weixin.qq.com/s/aJWDKtie7CC4PXw... 这个站也是你的吗 :sweat_smile:我就说怎么看着有点熟悉。过来一看还真是

1年前 评论
SevDot (楼主) 1年前

有个疑问 为什么捕获了异常再抛出异常 :grin:

1年前 评论

我也有这种需求,有人接单吗?

1年前 评论
SevDot (楼主) 1年前

50块又可以去口红店爽一发了

1年前 评论

大家不要觉得自己的技术不值钱,都是大家努力学来的知识

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!