>首页> IT >

php怎么实现话费充值

时间:2022-10-20 15:49:10       来源:PHP中文网

本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。


【资料图】

php怎么实现话费充值?

基于PHP的聚合话费充值接口示例

一、接口申请开通

本代码是基于聚合数据的话费充值API实现的话费充值功能,使用前需要:

通过https://www.juhe.cn/docs/api/id/85?s=cpphpcn申请开通话费接口服务。

与聚合签订相关服务合同后,才能正式使用。前期您也可以申请开通测试环境,进行对接测试。

详细的接口说明,可参考聚合官方文档。

二、接口使用

2.1、引入封装好的代码类

include "JuheHuaFei.class.php";
登录后复制

2.2、配置一些必须的参数

// 接口基本信息配置$env = 1; // 接口环境类型,1:正式环境接口 2:测试环境接口$appKey = "b842820xxxxxxxxxxxxxxxxxx"; //从聚合申请的话费充值接口key$openId = "JHb0d92d94ce6axxxxxxxxxxx"; //注册聚合账号就会分配的openid,在个人中心可以查看// 初始化$juheHuaFei = new JuheHuaFei($appKey, $openId, $env);
登录后复制

2.3、提交话费充值订单

// 提交话费充值订单$orderId = "111111111"; //自己定义一个订单号,需要保证唯一$mobile = "189xxxxxxxx"; // 需要充值的手机号码$perValue = "1"; // 话费面值,可以选择的面额1、2、5、10、20、30、50、100、300$submitOrderResult = $juheHuaFei->submitOrder($mobile, $perValue, $orderId);if ($submitOrderResult) {    if ($submitOrderResult["error_code"] == "0") {        // 订单提交成功,根据实际业务逻辑进行处理        echo "订单提交成功,订单号:" . $submitOrderResult["result"]["sporder_id"];        print_r($submitOrderResult);    } else {        // 提交返回码error_code非正常状态,依据官方文档错误码说明,进行逻辑处理        // 比如:10014,系统异常 / 208516,重复的订单号 等,需要进行二次查询/人工确认处理,不要直接失败处理,避免造成不必要的损失        print_r($submitOrderResult);    }} else {    // 可能网络异常等问题,未获得正确响应结果,建议进行二次查单/人工确认,不要直接失败处理,避免造成不必要的损失    // 依据自己的业务逻辑进行处理    echo "请求异常,请确认";}
登录后复制

请求结果:

Array(    [reason] => 订单提交成功,等待充值    [result] => Array        (            [cardid] => 10423            [cardnum] => 1            [ordercash] => 1.06            [cardname] => 江苏电信话费1元            [sporder_id] => J201125162114667xxxxxxxx            [uorderid] => 111111111            [game_userid] => 189xxxxxxxx            [game_state] => 0        )    [error_code] => 0)
登录后复制

2.4、订单状态查询

除主动查询订单状态,你还可以向聚合提供状态回调通知URL,订单状态有变化,聚合将会主动将状态信息推送给相应的URL。

// 话费订单充值状态查询$orderId = "111111111"; // 需要查询的订单号,即提交订单时传递的orderId$orderStatusResult = $juheHuaFei->queryOrderStatus($orderId);if ($orderStatusResult) {    // 打印返回结果    print_r($orderStatusResult);    // 根据实际业务逻辑进行处理    if ($orderStatusResult["error_code"] == "0") {        //查询成功        if ($orderStatusResult["result"]["game_state"] == "1") {            // 订单充值成功了            echo "订单充值成功";        } elseif ($orderStatusResult["result"]["game_state"] == "9") {            // 订单充值失败            echo "订单充值失败";        } elseif ($orderStatusResult["result"]["game_state"] == "0") {            // 订单充值中            echo "订单充值中";        } elseif ($orderStatusResult["result"]["game_state"] == "-1") {            //订单受理失败,可能是如运营商维护、账户余额不足等情况            echo "订单受理失败";        }    } else {        //查询状态失败,可能订单号不存在等情况        echo "查询失败:" . $orderStatusResult["reason"] . "(" . $orderStatusResult["error_code"] . ")";    }} else {    // 可能网络异常等问题,未获得正确响应结果,建议进行二次查询    // 依据自己的业务逻辑进行处理    echo "请求异常,请确认";}
登录后复制

返回结果:

Array(    [reason] => 查询成功    [result] => Array        (            [uordercash] => 1.060            [sporder_id] => J2011251629516xxxxxxxxxx            [game_state] => 9        )    [error_code] => 0)
登录后复制

2.5、根据手机及面额查询是否支持充值

主要通过号段进行判断是否支持充值,实际业务中可以不使用本小接口。

// 根据手机号码及面额查询是否支持充值$mobile = "1342966xxxx"; // 手机号码$perValue = "10"; // 话费面值$telCheckResult = $juheHuaFei->telCheck($mobile, $perValue);if ($telCheckResult) {    if($telCheckResult["error_code"] == "0"){        //说明支持充值,可以继续充值操作,以下可以根据实际需求修改        echo "OK";    }else{        //暂不支持充值,以下可以根据实际需求修改        echo "对不起,该面额暂不支持充值";    }} else {    // 可能网络异常等问题,未获得正确响应结果,建议进行二次查询    // 依据自己的业务逻辑进行处理    echo "请求异常,请确认";}
登录后复制

2.6、根据手机和面额获取商品信息

实际业务中可以不使用本小接口。

// 根据手机号码和面额获取商品信息$mobile = "1342966xxxx"; // 手机号码$perValue = "10"; // 话费面值$telQueryResult = $juheHuaFei->telQuery($mobile, $perValue);if ($telQueryResult) {    if($telQueryResult["error_code"] == "0"){        // 查询成功,可以根据实际逻辑修改        print_r($telQueryResult);    }else{        // 查询失败,可以根据实际逻辑修改        print_r($telQueryResult);    }} else {    // 可能网络异常等问题,未获得正确响应结果,建议进行二次查询    // 依据自己的业务逻辑进行处理    echo "请求异常,请确认";}
登录后复制

返回结果:

Array(    [reason] => 查询成功    [result] => Array        (            [cardid] => 10880            [cardname] => 浙江移动话费10元            [inprice] => 10.2            [game_area] => 浙江杭州移动        )    [error_code] => 0)
登录后复制

2.7、订单状态通知

推送URL地址:自行提供给聚合进行配置 (为了更安全,你也可以将聚合推送服务器的IP进行加白名单处理)

推送方式:POST

推送参数:

PHP接收异步通知(回调)参考代码:

/** * 接受话费\加油卡\流量充值业务 异步通知参数 参考示例 */$appkey = "b842820xxxxxxxxxxxxxxxxxx"; //您申请的数据的APIKey $sporder_id = addslashes($_POST["sporder_id"]); //聚合订单号$orderid = addslashes($_POST["orderid"]); //商户的单号$sta = addslashes($_POST["sta"]); //充值状态$sign = addslashes($_POST["sign"]); //校验值 $local_sign = md5($appkey.$sporder_id.$orderid); //本地sign校验值 if ($local_sign == $sign) {    if ($sta == "1") {        //充值成功,根据自身业务逻辑进行后续处理    } elseif ($sta =="9") {        //充值失败,根据自身业务逻辑进行后续处理    }}
登录后复制

2.8、JuheHuaFei.class.php

JuheHuaFei.class.php 完整代码

appkey = $appkey; // 申请到的话费接口请求key        $this->openid = $openid; // OpenID在聚合个人中心查询        if ($env == 1) {            // 正式环境,接口地址            $this->submitUrl = "http://op.juhe.cn/ofpay/mobile/onlineorder"; // 提交订单接口URL            $this->orderStatusUrl = "http://op.juhe.cn/ofpay/mobile/ordersta"; // 订单状态查询接口URL            $this->telCheckUrl = "http://op.juhe.cn/ofpay/mobile/telcheck"; // 检测手机号码是否能充值URL            $this->telQueryUrl = "http://op.juhe.cn/ofpay/mobile/telquery"; // 根据手机号和面值查询商品URL        } else {            // 测试环境,接口地址            $this->submitUrl = "http://test-v.juhe.cn/ofpay/mobile/onlineorder"; // 提交订单接口URL            $this->orderStatusUrl = "http://test-v.juhe.cn/ofpay/mobile/ordersta"; // 订单状态查询接口URL            $this->telCheckUrl = "http://test-v.juhe.cn/ofpay/mobile/telcheck"; // 检测手机号码是否能充值URL            $this->telQueryUrl = "http://test-v.juhe.cn/ofpay/mobile/telquery"; // 根据手机号和面值查询商品URL        }    }    /**     * 提交话费充值订单     * @param  [string] $mobile   [手机号码]     * @param  [int] $pervalue [充值面额]     * @param  [string] $orderid  [自定义单号]     * @return  [array]     */    public function submitOrder($mobile, $pervalue, $orderid)    {        $sign = md5($this->openid . $this->appkey . $mobile . $pervalue . $orderid);// 校验值计算        $params = array(            "key" => $this->appkey,            "phoneno" => $mobile,            "cardnum" => $pervalue,            "orderid" => $orderid,            "sign" => $sign        );        $content = $this->juheHttpRequest($this->submitUrl, $params, 1);        return $this->_returnArray($content);    }    /**     * 查询订单的充值状态     * @param  [string] $orderid [自定义单号]     * @return  [array]     */    public function queryOrderStatus($orderid)    {        $params = "key=" . $this->appkey . "&orderid=" . $orderid;        $content = $this->juheHttpRequest($this->orderStatusUrl, $params);        return $this->_returnArray($content);    }    /**     * 根据手机号码及面额查询是否支持充值     * @param string $mobile [手机号码]     * @param int $pervalue [充值金额]     * @return  boolean     */    public function telCheck($mobile, $pervalue)    {        $params = "key=" . $this->appkey . "&phoneno=" . $mobile . "&cardnum=" . $pervalue;        $content = $this->juheHttpRequest($this->telCheckUrl, $params);        return $this->_returnArray($content);    }    /**     * 根据手机号码和面额获取商品信息     * @param string $mobile [手机号码]     * @param int $pervalue [充值金额]     * @return  array     */    public function telQuery($mobile, $pervalue)    {        $params = "key=" . $this->appkey . "&phoneno=" . $mobile . "&cardnum=" . $pervalue;        $content = $this->juheHttpRequest($this->telQueryUrl, $params);        return $this->_returnArray($content);    }    /**     * 将JSON内容转为数据,并返回     * @param string $content [内容]     * @return array     */    public function _returnArray($content)    {        return json_decode($content, true);    }    /**     * 请求接口返回内容     * @param string $url [请求的URL地址]     * @param string $params [请求的参数]     * @param int $ipost [是否采用POST形式]     * @return  string     */    public function juheHttpRequest($url, $params = false, $ispost = 0)    {        $httpInfo = array();        $ch = curl_init();        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);        curl_setopt($ch, CURLOPT_USERAGENT, "JuheData");        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);        curl_setopt($ch, CURLOPT_TIMEOUT, 30);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);        if ($ispost) {            curl_setopt($ch, CURLOPT_POST, true);            curl_setopt($ch, CURLOPT_POSTFIELDS, $params);            curl_setopt($ch, CURLOPT_URL, $url);        } else {            if ($params) {                curl_setopt($ch, CURLOPT_URL, $url . "?" . $params);            } else {                curl_setopt($ch, CURLOPT_URL, $url);            }        }        $response = curl_exec($ch);        if ($response === FALSE) {            //echo "cURL Error: " . curl_error($ch);            return false;        }        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);        $httpInfo = array_merge($httpInfo, curl_getinfo($ch));        curl_close($ch);        return $response;    }}
登录后复制

推荐学习:《PHP视频教程》

以上就是php怎么实现话费充值的详细内容,更多请关注php中文网其它相关文章!

关键词: 手机号码 话费充值 进行处理