一、福禄平台介绍

产品介绍

开放平台提供专业的数字权益商品标准化接口和免费接入服务,数字权益商品涵盖话费、流量、游戏、Q币、视频会员、加油卡、礼品卡等多种品类,可满足使用者多方面的业务需求,丰富企业的产品内容、提升竞争优势。

产品功能

  • 商品管理:提供API商户可以进行对接的商品类目和编号。
  • 订单管理:订单明细查询、充值记录核对等。
  • 应用配置:密钥管理、账号绑定、IP白名单添加、参数配置。

使用场景

拥有一定技术团队的企业,接入充值API,用于手机App、PC客户端、微信公众号、小程序、支付宝生活号等多种场景,为自己的用户提供在线充值服务,丰富服务内容,促进流量变现。

产品优势

  • 接口稳定性高,充值秒到账:专业技术团队保证接口安全、稳定,用户从下单到充值成功仅需3秒。
  • 货源丰富,涵盖全品类:多达千种数字权益商品,全品类覆盖,可满足不同行业、不同场景需求。
  • 强势资源,保障低价:凭借雄厚资金实力,整合行业优势资源,与超过20个总代品牌合作,保障产品优质低价。

业务场景

    • 在线直充
      通过直储充值的方式,为客户提供文娱会员等数字权益,可用于即时获取权益的场景。
    • 话费充值
      高质量的话费充值渠道,稳定到账,为客户提供满意的话费充值体验。
    • 卡密采购
      通过卡密充值的方式,为客户提供数字权益。

手册地址

    • 文档地址:

      https://docs.open.fulu.com/home

    • 接入说明:

      https://docs.open.fulu.com/apiDocument?productSolutionId=86ce7354-c80f-42df-8043-7aaf4b1d7d68&id=30bc78e4-1d39-4496-8cbc-d6ca840926c3

    • 沙箱测试:

      https://docs.open.fulu.com/apitest?catalogueId=52615a59-7362-4f17-86b4-7fbccd310c7d&menuClass=%E5%95%86%E5%93%81API

 

二、 PHP代码封装

<?php
/**
 * Created by PhpStrom
 * @author: 刘阳<liucysun@163.com>
 * User: LiuYang
 * Date: 2023/8/24
 * Time: 14:39
 */

/**
 * Class ThirdPartyService
 * 调用第三方服务
 * 使用方式:
 *  (new ThirdPartyService)
 *      ->setApiUrl("https://www.baidu.com") // 设置地址
 *      ->setMethod() // 设置请求方式
 *      ->setHeaders() // 设置header头
 *      ->sendRequest(); // 发送请求
 */
class ThirdPartyService {
    private $apiUrl;
    private $method = 'POST';
    private $headers = [];
    private $proxy;

    public function __construct() {}

    /**
     * 设置第三方请求地址
     * @param string $apiUrl
     */
    public function setApiUrl(string $apiUrl){
        $this->apiUrl = $apiUrl;
    }

    /**
     * 设置请求方式
     * @param string $method
     */
    public function setMethod(string $method){
        if(in_array($method,['GET', 'POST', 'PUT', 'DELETE'])){
            $this->method = $method;
        }
    }

    /**
     * 设置请求头
     * @param array $headers
    array(
    'Content-Type: application/json',
    'Authorization: Bearer your-token'
    )
     */
    public function setHeaders(array $headers){
        $this->headers = $headers;
    }

    /**
     * 设置请求代理地址
     * @param string $proxy
     */
    public function setProxy(string $proxy){
        $this->proxy = $proxy;
    }

    /**
     * 请求第三方服务
     * @param array $requestData
     * @param object $obj
     * @param string $fun
     * @return mixed
     */
    public function sendRequest(array $requestData, object $obj, string $fun = 'commonParam') {
        // 构建请求参数
        $requestParams = ($obj)->$fun($requestData);

        // 发送请求
        $response = $this->makeRequest($this->apiUrl, $requestParams);

        // 处理响应
        $responseData = $this->processResponse($response);

        return $responseData;
    }

    /**
     * 发起请求
     * @param string $url
     * @param array $params
     * @return bool|string
     */
    private function makeRequest(string $url, array $params) {
        // 发送 HTTP 请求,可以使用 cURL 或其他 HTTP 请求库

        // 假设使用 cURL 发送请求
        $ch = curl_init();

        if ($this->headers) {
            // 若 $headers 存在,则设置为请求头
            curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers);
        }
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_URL, $url); // 添加请求地址

        if ($this->method == 'GET') {
            $urlParamStr = $this->getParamStr($params);
        } elseif ($this->method == 'POST') {
            $urlParamStr = $this->getParamStr($params, 2);
            curl_setopt($ch, CURLOPT_TIMEOUT, 3); // 设置3秒超时限制防止死循环
        }else{
            $urlParamStr = $params;
        }
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $this->method);// 请求方式 'GET', 'POST', 'PUT', 'DELETE'
        //        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $urlParamStr); // 提交的数据包

        if($this->proxy){
            curl_setopt($ch, CURLOPT_PROXY, $this->proxy);// 请求代理 'http://proxy.example.com:8080'
        }

        $response = curl_exec($ch); // 请求执行

        // 处理请求中的错误
        if (curl_errno($ch)) {
            return json_encode(['code' => curl_errno($ch), 'msg' => curl_error($ch), 'data' => $response], JSON_UNESCAPED_UNICODE);
        }

        curl_close($ch); // 关闭cURL请求

        return $response;
    }

    /**
     * 处理响应数据
     * @param $response
     * @return mixed
     */
    private function processResponse($response) {
        // 处理响应数据,根据实际情况解析 JSON、XML 等格式的数据

        // 假设响应数据是 JSON 格式
        $responseData = json_decode($response, true);

        return $responseData;
    }

    /**
     * @param array $params 参数数组
     * @param int $type     参数构造类型:1:queryString  2:json
     * @return string
     */
    private function getParamStr(array $params, int $type):string {
        if (!$params) {
            return '';
        }
        $paramStr = '';
        if ($type == 1) {
            $paramArr = [];
            foreach ($params as $filed => $val) {
                $paramArr[] = $filed . '=' . $val;
            }
            $paramStr = implode('&', $paramArr);
        } elseif ($type == 2) {
            $paramStr = json_encode($params, true);
        }
        return $paramStr;
    }

}


/**
 * Class Common
 * 定义公共参数
 */
class Common{
    // 福禄网络-AppKey
    const FU_LU_APP_KEY = 'i4esv1l+76l/7NQCL3QudG90Fq+YgVfFGJAWgT+7qO1Bm9o/adG/1iwO2qXsAXNB';
    // 福禄网络-AppSecret
    const FU_LU_APP_SECRET = '0a091b3aa4324435aab703142518a8f7';
    // 福禄网络-MemberCode
    const FU_LU_MEMBER_CODE = '9000358';
    // 测试/生产环境IP:47.110.196.112、118.31.170.160
    const FU_LU_URL = 'https://pre-openapi.fulu.com/api/getway';

    // 福禄网路-错误码-自定义错误码替换福禄平台状态吗
    const FU_LU_RET_DIC = [
        0    => ['code' =>         0, 'msg' => '接口调用成功',],
        1000 => ['code' => 100071000, 'msg' => '必须传入API接口名称',],
        1001 => ['code' => 100071001, 'msg' => '无效的API接口名称',],
        1002 => ['code' => 100071002, 'msg' => '必须传入时间戳',],
        1003 => ['code' => 100071003, 'msg' => '时间戳格式错误',],
        1004 => ['code' => 100071004, 'msg' => '时间戳已超过有效期',],
        1005 => ['code' => 100071005, 'msg' => '必须传入app_key',],
        1006 => ['code' => 100071006, 'msg' => '无效的app_key',],
        1007 => ['code' => 100071007, 'msg' => '必须传入版本号',],
        1008 => ['code' => 100071008, 'msg' => '版本号错误',],
        1009 => ['code' => 100071009, 'msg' => '必须传入format格式',],
        1010 => ['code' => 100071010, 'msg' => 'format格式错误',],
        1011 => ['code' => 100071011, 'msg' => '必须传入编码格式',],
        1012 => ['code' => 100071012, 'msg' => '编码格式错误',],
        1013 => ['code' => 100071013, 'msg' => '必须传入签名加密类型',],
        1014 => ['code' => 100071014, 'msg' => '签名加密类型错误',],
        1015 => ['code' => 100071015, 'msg' => '必须传入签名',],
        1016 => ['code' => 100071016, 'msg' => '签名错误',],
        1017 => ['code' => 100071017, 'msg' => '必须传入请求参数集合',],
        1018 => ['code' => 100071018, 'msg' => '缺少必要参数',],
        1019 => ['code' => 100071019, 'msg' => '访问IP不在IP白名单内',],
        2000 => ['code' => 100072000, 'msg' => '商户不存在',],
        2001 => ['code' => 100072001, 'msg' => '商户已被禁用',],
        2002 => ['code' => 100072002, 'msg' => '无效的商户或应用',],
        2003 => ['code' => 100072003, 'msg' => '商户或应用配置异常',],
        2004 => ['code' => 100072004, 'msg' => '商户余额不足',],
        2114 => ['code' => 100072114, 'msg' => '必须传入对账单获取单号',],
        2115 => ['code' => 100072115, 'msg' => '必须传入对账单主题',],
        2116 => ['code' => 100072116, 'msg' => '对账单主题格式错误',],
        2117 => ['code' => 100072117, 'msg' => '必须传入账单类型',],
        2118 => ['code' => 100072118, 'msg' => '账单类型错误',],
        2119 => ['code' => 100072119, 'msg' => '对账单excel列头错误',],
        2120 => ['code' => 100072120, 'msg' => '必须传入开始时间和结束时间',],
        2121 => ['code' => 100072121, 'msg' => '开始时间或结束时间错误',],
        3000 => ['code' => 100073000, 'msg' => '必须传入商品编号',],
        3001 => ['code' => 100073001, 'msg' => '商品不存在或无法购买',],
        3002 => ['code' => 100073002, 'msg' => '商品已下架',],
        3003 => ['code' => 100073003, 'msg' => '商品维护中',],
        3004 => ['code' => 100073004, 'msg' => '商品在维护期内',],
        3005 => ['code' => 100073005, 'msg' => '商品库存不足',],
        3006 => ['code' => 100073006, 'msg' => '必须传入商品模板编号',],
        3007 => ['code' => 100073007, 'msg' => '商品模板不存在',],
        3008 => ['code' => 100073008, 'msg' => '商品类型错误',],
        3009 => ['code' => 100073009, 'msg' => '商品异常,商品库存状态无法查询',],
        4000 => ['code' => 100074000, 'msg' => '必须传入外部订单号',],
        4001 => ['code' => 100074001, 'msg' => '购买数量必须大于0',],
        4002 => ['code' => 100074002, 'msg' => '必须传入充值账号',],
        4003 => ['code' => 100074003, 'msg' => '充值账号不是手机号',],
        4004 => ['code' => 100074004, 'msg' => '充值账号在黑名单中',],
        4005 => ['code' => 100074005, 'msg' => '充值面值(数额)必须大于0',],
        4008 => ['code' => 100074008, 'msg' => '添加订单失败',],
        4009 => ['code' => 100074009, 'msg' => '执行下单超时,请查单确认下单结果',],
        4010 => ['code' => 100074010, 'msg' => '外部订单号已存在',],
        4011 => ['code' => 100074011, 'msg' => '订单不存在',],
        4012 => ['code' => 100074012, 'msg' => '查询异常,请重试',],
        5000 => ['code' => 100075000, 'msg' => '系统异常,订单可疑',],
        5001 => ['code' => 100075001, 'msg' => '系统异常',],
    ];

    // 福禄网路-API接口地址
    const FU_LU_REQUEST_URI = [
        101 => 'fulu.user.info.get', //获取用户信息接口
        201 => 'fulu.goods.list.get', //获取商品列表接口
        202 => 'fulu.goods.info.get', //获取商品信息接口
        203 => 'fulu.goods.template.get', //获取商品模板接口
        204 => 'fulu.goods.stock.check', //商品库存校验接口
        301 => 'fulu.order.direct.add', //直充下单接口
        302 => 'fulu.order.card.add', //卡密下单接口
        303 => 'fulu.order.mobile.add', //话费下单接口
        304 => 'fulu.order.info.get', //订单查询接口
        305 => 'fulu.order.extend.get', //订单扩展信息查询接口
        306 => 'fulu.order.record.get', //对账单申请接口
        401 => 'fulu.alipay.applet.pay', //支付宝小程序支付接口
        402 => 'fulu.alipay.app.pay', //支付宝App支付接口
        403 => 'fulu.alipay.h5.pay', //支付宝H5支付接口
        404 => 'fulu.alipay.h5.query', //支付宝查单接口
        405 => 'fulu.alipay.h5.refund', //支付宝退款接口
        406 => 'fulu.alipay.refund.query', //支付宝退款查询接口
        411 => 'fulu.wechatpay.applet.pay', //微信小程序支付接口
        412 => 'fulu.wechatpay.h5.pay', //微信H5支付接口
        413 => 'fulu.wechatpay.h5.query', //微信查单接口
        414 => 'fulu.wechatpay.h5.refund', //微信退款接口
        415 => 'fulu.wechatpay.refund.query', //微信退款查询接口
        501 => 'fulu.market.qqnickname.get', //QQ昵称查询接口
        502 => 'fulu.aiqiyi.user.check', //爱奇艺用户身份校验接口
        503 => 'fulu.mobile.maintain.check', //话费维护状态检查接口
        504 => 'fulu.mobile.info.get', //手机号归属地接口
    ];
}

/**
 * Class FuLuAPi
 * 福禄网路接口类封装
 */
class FuLuAPi{

    private $methodUri;
    /**
     * 设置接口地址
     * @param string $methodUri 'fulu.goods.list.get'
     */
    public function setMethodUri(string $methodUri){
        $this->methodUri = $methodUri;
    }

    /**
     * 福禄网络签名
     * @param $params
     * @return string
     */
    private function getSign(array $params):string {
        //签名步骤一:把字典json序列化
        $json = json_encode( $params, 320 );
        //签名步骤二:转化为数组
        $jsonArr = $this->mb_str_split( $json );
        //签名步骤三:排序
        sort( $jsonArr );
        //签名步骤四:转化为字符串
        $string = implode( '', $jsonArr );
        //签名步骤五:在string后加入secret
        $string = $string . Common::FU_LU_APP_SECRET;
        //签名步骤六:MD5加密
        $result_ = strtolower( md5( $string ) );
        return $result_;
    }

    /**
     * 可将字符串中中文拆分成字符数组
     */
    private function mb_str_split($str){
        return preg_split('/(?<!^)(?!$)/u', $str );
    }

    /**
     * 获取福禄请求参数
     * @param array $bizContentArr
     * @return string[]
     */
    public function commonParam( array $bizContentArr){
        $bizContent = $bizContentArr ? json_encode($bizContentArr, true) : '{}';
        $data = [ // @todo 福禄网络
            'app_key'        => Common::FU_LU_APP_KEY,
            'method'         => $this->methodUri,//'fulu.goods.list.get'
            'timestamp'      => date('Y-m-d H:i:s', time()),
            'version'        => '2.0',
            'format'         => 'json',
            'charset'        => 'utf-8',
            'sign_type'      => 'md5',
            'app_auth_token' => '',
            'biz_content'    => $bizContent,
        ];
        $data['sign'] = $this->getSign($data);
        return $data;
    }
}

/**
 * Class FuLu
 * 使用福禄网络方法的调用
 */
class FuLu{
    /**
     * @var ThirdPartyService
        基础数据
        AppKey:i4esv1l+76l/7NQCL3QudG90Fq+YgVfFGJAWgT+7qO1Bm9o/adG/1iwO2qXsAXNB
        AppSecret:0a091b3aa4324435aab703142518a8f7
        MemberCode:9000358
        商户名称:OpenApi2.0对接专用商户
        测试/生产环境IP:47.110.196.112、118.31.170.160

        直充接口相关
        测试商品:
        1、10000586 视频/文娱直充测试商品-返回充值成功
        2、10000585 视频/文娱直充测试商品-返回充值失败
        3、10000586 网游直充测试商品(不带区服)-返回充值成功
        4、10000585 网游直充测试商品(不带区服)-返回充值失败
        5、10000589 网游直充测试商品(带区服)-返回充值成功
        6、10000588 网游直充测试商品(带区服)-返回充值失败
        7、10000000 视频/文娱直充测试商品-接口请求失败 错误码:3001(商品不存在或无法购买)
        8、12080016 视频/文娱直充测试商品-接口请求失败 错误码:3002(商品已下架)
        注意:直充类订单需按照对应商品才能返回“充值成功”、“充值失败”状态。

        卡密接口相关
        测试商品:
        1、10000587 卡密测试商品-返回卡号、字符串卡密
        2、11865227 卡密测试商品-返回卡号、链接卡密
        3、15325315 卡密测试商品-返回无卡号、字符串卡密
        4、11209851 卡密测试商品-返回无卡号、链接卡密

        话费接口相关
        手机账号:15972368779
        面值:100
        注:此账号+面值下单,订单状态默认返回“充值成功”状态。

        手机账号:15972368779
        面值:50
        注:此账号+面值下单,订单状态默认返回“充值失败”状态。

        流量接口相关
        手机账号:15972368779
        流量大小:1024
        流量性质:4
        注:此账号+流量大小+流量性质下单,订单状态默认返回“充值成功”状态。

        手机账号:13971553804
        流量大小:1024
        流量性质:4
        注:此账号+流量大小+流量性质下单,订单状态默认返回“充值失败”状态。

        文档地址:https://docs.open.fulu.com/home
     *  产品介绍:https://docs.open.fulu.com/apiDocument?productSolutionId=86ce7354-c80f-42df-8043-7aaf4b1d7d68&id=276259e0-7508-4721-a51b-a0de43998966
     *
     */
    private $thirdObj;
    private $thisObj;

    const RET_ORDER_STATUS = [
        'failed' => [
            'code' => 0,
            'msg'  => "充值失败", // 充值失败
            'state'  => "failed",
        ],
        'untreated' => [
            'code' => 101,
            'msg'  => "未处理", // 未处理
            'state'  => "untreated",
        ],
        'success' => [
            'code' => 0,
            'msg'  => "充值成功", // 充值成功
            'state'  => "success",
        ],
        'processing' => [
            'code' => 102,
            'msg'  => "处理中", // 处理中
            'state'  => "processing",
        ],
    ];

    public function __construct(){
        // 设置当前时区
        ini_set('date.timezone','PRC');
        // 创建 ThirdPartyService 实例
        $this->thirdObj = new ThirdPartyService();
        // 设置请求地址
        $this->thirdObj->setApiUrl(Common::FU_LU_URL);
        // 设置请求头
        $this->thirdObj->setHeaders(['Content-Type: application/json']);

        // 设置福禄网络请求
        $this->thisObj = new FuLuAPi;
    }

    /**
     * 获取用户信息
     * @return array|mixed
     */
    public function user_info_get(){
        // 设置接口地址
        $this->thisObj->setMethodUri(Common::FU_LU_REQUEST_URI[101]);

        // 发送请求并获取响应
        $requestData = array(
            // 请求数据
        );
        $responseData = $this->thirdObj->sendRequest($requestData, $this->thisObj);
        // 校验错误码,如果存在错误信息,抛出自定义信息
        if($responseData["code"]){
            return Common::FU_LU_RET_DIC[$responseData["code"]];
        }
        //如果返回成功,处理返回的数据result字段
        $responseData["result"] = json_decode($responseData["result"], true);
        // 处理响应数据
        return $responseData;
    }

    /**
     * 获取商品列表
     * @return array|mixed
     */
    public function goods_list_get(){
        // 设置接口地址
        $this->thisObj->setMethodUri(Common::FU_LU_REQUEST_URI[201]);
        // 发送请求并获取响应
        $requestData = array(
            // 请求数据
        );
        $responseData = $this->thirdObj->sendRequest($requestData, $this->thisObj);
        // 校验错误码,如果存在错误信息,抛出自定义信息
        if($responseData["code"]){
            return Common::FU_LU_RET_DIC[$responseData["code"]];
        }
        //如果返回成功,处理返回的数据result字段
        $responseData["result"] = json_decode($responseData["result"], true);
        // 处理响应数据
        return $responseData;
    }

    /**
     * 获取商品详情
     * @param int $productId 10000415
     * 测试成功的商品:10000413,10000415,10000416,10000420,10000422,10000423,10000426,10000430
     * 10000000 视频/文娱直充测试商品-接口请求失败 错误码:3001(商品不存在或无法购买)
     * 12080016 视频/文娱直充测试商品-接口请求失败 错误码:3002(商品已下架)
     * @return array|mixed
     * stock_status 库存状态:断货、警报、充足(商品接口显示的商品都是非断货状态的商品,断货商品会自动下架)
     * sales_status 销售状态:下架、上架、维护中、库存维护(商品信息接口显示的商品都是上架状态的商品)
     */
    public function goods_info_get(int $productId){
        // 设置接口地址
        $this->thisObj->setMethodUri(Common::FU_LU_REQUEST_URI[202]);
        // 发送请求并获取响应
        $requestData = array(
            // 请求数据
            "product_id" => $productId,//商品编号
        );
        $responseData = $this->thirdObj->sendRequest($requestData, $this->thisObj);
        // 校验错误码,如果存在错误信息,抛出自定义信息
        if($responseData["code"]){
            return Common::FU_LU_RET_DIC[$responseData["code"]];
        }
        //如果返回成功,处理返回的数据result字段
        $responseData["result"] = json_decode($responseData["result"], true);
        // 处理响应数据
        return $responseData;
    }

    /**
     * 查询商品库存
     * @param int $productId
     * @param int $num
     * @return array|mixed
     * stock_status 库存状态:断货、充足(商品接口显示的商品都是非断货状态的商品,断货商品会自动下架)
     */
    public function goods_stock_check(int $productId, int $num = 1){
        // 设置接口地址
        $this->thisObj->setMethodUri(Common::FU_LU_REQUEST_URI[204]);
        // 发送请求并获取响应
        $requestData = array(
            // 请求数据
            "buy_num" => $num,//购买数量
            "product_id" => $productId,//商品编号
        );
        $responseData = $this->thirdObj->sendRequest($requestData, $this->thisObj);
        // 校验错误码,如果存在错误信息,抛出自定义信息
        if($responseData["code"]){
            return Common::FU_LU_RET_DIC[$responseData["code"]];
        }
        //如果返回成功,处理返回的数据result字段
        $responseData["result"] = json_decode($responseData["result"], true);
        // 处理响应数据
        return $responseData;
    }

    /**
     * 直冲下单接口
     * @param int $productId //福禄平台订单号,可以从商品列表中获取
     * @param string $orderId // 外部订单号
     * @param string $mobile // 充值手机号
     * @return array|mixed
     * order_state 订单状态: (success:成功,processing:处理中,failed:失败,untreated:未处理)
     */
    public function order_direct_add(int $productId, string $orderId, string $mobile){
        // 设置接口地址
        $this->thisObj->setMethodUri(Common::FU_LU_REQUEST_URI[301]);
        // 发送请求并获取响应
        $requestData = array(
            // 请求数据
            "product_id" => $productId,//商品编号
            "customer_order_no" => $orderId,//外部订单号
            "charge_account" => $mobile,//充值账号
            "buy_num" => "1",//购买数量
        );
        $responseData = $this->thirdObj->sendRequest($requestData, $this->thisObj);
        // 校验错误码,如果存在错误信息,抛出自定义信息
        if($responseData["code"]){
            return Common::FU_LU_RET_DIC[$responseData["code"]];
        }
        //如果返回成功,处理返回的数据result字段
        $responseData["result"] = json_decode($responseData["result"], true);
//        // 处理订单状态,如果失败返回订单失败错误码
//        if(self::RET_ORDER_STATUS[$responseData["result"]["order_state"]]){
//           return  self::RET_ORDER_STATUS[$responseData["result"]["order_state"]];
//        }
        // 处理响应数据
        return $responseData;
    }

    /**
     * 卡密下单接口
     * 测试商品:
        1、10000587 卡密测试商品-返回卡号、字符串卡密
        2、11865227 卡密测试商品-返回卡号、链接卡密
        3、15325315 卡密测试商品-返回无卡号、字符串卡密
        4、11209851 卡密测试商品-返回无卡号、链接卡密
     * @param int $productId //福禄平台订单号,可以从商品列表中获取
     * @param string $orderId // 外部订单号
     * @return array|mixed
     * order_state 订单状态: (success:成功,processing:处理中,failed:失败,untreated:未处理)
     */
    public function order_card_add(int $productId, string $orderId){
        // 设置接口地址
        $this->thisObj->setMethodUri(Common::FU_LU_REQUEST_URI[302]);
        // 发送请求并获取响应
        $requestData = array(
            // 请求数据
            "product_id" => $productId,//商品编号
            "customer_order_no" => $orderId,//外部订单号
            "buy_num" => "1",//购买数量
        );
        $responseData = $this->thirdObj->sendRequest($requestData, $this->thisObj);
        // 校验错误码,如果存在错误信息,抛出自定义信息
        if($responseData["code"]){
            return Common::FU_LU_RET_DIC[$responseData["code"]];
        }
        //如果返回成功,处理返回的数据result字段
        $responseData["result"] = json_decode($responseData["result"], true);
//        // 处理订单状态,如果失败返回订单失败错误码
//        if(self::RET_ORDER_STATUS[$responseData["result"]["order_state"]]){
//           return  self::RET_ORDER_STATUS[$responseData["result"]["order_state"]];
//        }
        // 处理响应数据
        return $responseData;
    }

    /**
     * 话费下单接口
     * 测试手机号
        手机账号:15972368779
        面值:100
        注:此账号+面值下单,订单状态默认返回“充值成功”状态。
     * ------------------------------------------------
        手机账号:15972368779
        面值:50
        注:此账号+面值下单,订单状态默认返回“充值失败”状态。
     * @param string $orderId
     * @param string $mobile
     * @param float $price
     * @return array|mixed
     * order_state 订单状态: (success:成功,processing:处理中,failed:失败,untreated:未处理)
     */
    public function order_mobile_add(string $orderId, string $mobile, float $price){
        // 设置接口地址
        $this->thisObj->setMethodUri(Common::FU_LU_REQUEST_URI[303]);
        // 发送请求并获取响应
        $requestData = array(
            // 请求数据
            "charge_phone" => $mobile,//充值手机号
            "charge_value" => $price,//充值金额
            "customer_order_no" => $orderId,//外部订单号
        );
        $responseData = $this->thirdObj->sendRequest($requestData, $this->thisObj);
        // 校验错误码,如果存在错误信息,抛出自定义信息
        if($responseData["code"]){
            return Common::FU_LU_RET_DIC[$responseData["code"]];
        }
        //如果返回成功,处理返回的数据result字段
        $responseData["result"] = json_decode($responseData["result"], true);
//        // 处理订单状态,如果失败返回订单失败错误码
//        if(self::RET_ORDER_STATUS[$responseData["result"]["order_state"]]){
//           return  self::RET_ORDER_STATUS[$responseData["result"]["order_state"]];
//        }
        // 处理响应数据
        return $responseData;
    }

    /**
     * 查询订单处理状态
     * @param string $orderId // 外部订单号
     * @return array|mixed
     * order_state 订单状态: (success:成功,processing:处理中,failed:失败,untreated:未处理)
     */
    public function order_info_get(string $orderId){
        // 设置接口地址
        $this->thisObj->setMethodUri(Common::FU_LU_REQUEST_URI[304]);
        // 发送请求并获取响应
        $requestData = array(
            // 请求数据
            "customer_order_no" => $orderId,//商品编号,外部订单号
        );
        $responseData = $this->thirdObj->sendRequest($requestData, $this->thisObj);
        // 校验错误码,如果存在错误信息,抛出自定义信息
        if($responseData["code"]){
            return Common::FU_LU_RET_DIC[$responseData["code"]];
        }
        //如果返回成功,处理返回的数据result字段
        $responseData["result"] = json_decode($responseData["result"], true);
        // 处理订单状态,如果失败返回订单失败错误码
        if(self::RET_ORDER_STATUS[$responseData["result"]["order_state"]]){
           return  self::RET_ORDER_STATUS[$responseData["result"]["order_state"]];
        }
        // 处理响应数据
        return $responseData;
    }

    /**
     * 查询手机号归属地
     * @param $phone
     * @return array|mixed
     */
    public function mobile_info_get($phone){
        // 设置接口地址
        $this->thisObj->setMethodUri(Common::FU_LU_REQUEST_URI[504]);
        // 发送请求并获取响应
        $requestData = array(
            // 请求数据
            "phone" => $phone, // 手机号
        );
        $responseData = $this->thirdObj->sendRequest($requestData, $this->thisObj);
        // 校验错误码,如果存在错误信息,抛出自定义信息
        if($responseData["code"]){
            return Common::FU_LU_RET_DIC[$responseData["code"]];
        }
        //如果返回成功,处理返回的数据result字段
        $responseData["result"] = json_decode($responseData["result"], true);
        // 处理响应数据
        return $responseData;
    }


}

/**
 * 执行使用类包进行测试
 */

// 获取用户信息
//$retData = (new FuLu())->user_info_get();
//var_dump($retData);die;
// 获取商品列表
//$retData = (new FuLu())->goods_list_get();
//var_dump($retData);
// 获取商品列表
// 10000413,10000415,10000416,10000420,10000422,10000423,10000426,10000430
// 10000000(商品不存在),12080016(商品下架)
//$retData = (new FuLu())->goods_info_get(12080016);
//var_dump($retData);
//// 获取商品库存
//$retData = (new FuLu())->goods_stock_check(10000413, 1);
//var_dump($retData);
// 直冲下单
//$retData = (new FuLu())->order_direct_add(10000413, '12345', '15600779070');
//var_dump($retData);
// 卡密下单
//$retData = (new FuLu())->order_card_add(10000587, '202308251001');
//var_dump($retData);
// 话费下单 10000532,
//$retData = (new FuLu())->order_mobile_add('202308251003', '15972368779', '50');
//var_dump($retData);

// 订单状态查询
while(1){
    $retData = (new FuLu())->order_info_get('202308251003');
    if(!$retData["code"]) die($retData["msg"]);
    sleep(3); // 执行完毕睡眠3秒,降低访问压力
    var_dump($retData);
}

// 手机号归属地查询
//$retData = (new FuLu())->mobile_info_get('18737306903');
//var_dump($retData);

 

 

 

 

 

 

 

 

 

 

 

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/liucysun/p/17657266.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!