我的编程空间,编程开发者的网络收藏夹
学习永远不晚

php如何实现话费充值

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

php如何实现话费充值

这篇文章主要介绍“php如何实现话费充值”,在日常操作中,相信很多人在php如何实现话费充值问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php如何实现话费充值”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

php实现话费充值的方法:1、开通话费充值接口;2、引入封装好的代码类;3、配置接口基本信息;4、提交话费充值订单;5、将状态信息推送给相应的URL;6、根据手机及面额查询是否支持充值;7、通过“if ($local_sign == $sign) {...}”方式进行业务逻辑处理即可。

php怎么实现话费充值?

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

一、接口申请开通

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

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

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

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

二、接口使用

1、引入封装好的代码类

include "JuheHuaFei.class.php";

2、配置一些必须的参数

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

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)

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)

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

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

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

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)

7、订单状态通知

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

推送方式:POST

推送参数:

php如何实现话费充值

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') {        //充值失败,根据自身业务逻辑进行后续处理    }}

登录后复制

8、JuheHuaFei.class.php

JuheHuaFei.class.php 完整代码

<?php//----------------------------------// 聚合数据-手机话费充值API调用类--示例代码// 官方接口文档:https://www.juhe.cn/docs/api/id/85//----------------------------------class JuheHuaFei{    private $appkey;    private $openid;    // 提交订单接口URL    private $submitUrl;    // 订单状态查询接口URL    private $orderStatusUrl;    // 检测手机号码是否能充值URL    private $telCheckUrl;    // 根据手机号和面值查询商品URL    private $telQueryUrl;        public function __construct($appkey, $openid, $env = 1)    {        $this->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        }    }        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);    }        public function queryOrderStatus($orderid)    {        $params = 'key=' . $this->appkey . '&orderid=' . $orderid;        $content = $this->juheHttpRequest($this->orderStatusUrl, $params);        return $this->_returnArray($content);    }        public function telCheck($mobile, $pervalue)    {        $params = 'key=' . $this->appkey . '&phoneno=' . $mobile . '&cardnum=' . $pervalue;        $content = $this->juheHttpRequest($this->telCheckUrl, $params);        return $this->_returnArray($content);    }        public function telQuery($mobile, $pervalue)    {        $params = 'key=' . $this->appkey . '&phoneno=' . $mobile . '&cardnum=' . $pervalue;        $content = $this->juheHttpRequest($this->telQueryUrl, $params);        return $this->_returnArray($content);    }        public function _returnArray($content)    {        return json_decode($content, true);    }        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如何实现话费充值”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

php如何实现话费充值

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

php如何实现话费充值

这篇文章主要介绍“php如何实现话费充值”,在日常操作中,相信很多人在php如何实现话费充值问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php如何实现话费充值”的疑惑有所帮助!接下来,请跟着小编一起来学习吧
2023-07-04

php正则如何实现替换电话

本篇内容介绍了“php正则如何实现替换电话”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php正则实现替换电话的方法:1、创建一个PHP示例
2023-06-22

PHP如何用给定的值填充数组

本指南介绍了PHP中用给定值填充数组的四种方法:array_fill():指定起始和终止索引,使用给定值填充指定范围的索引。array_fill_keys():使用给定的键和填充值创建数组。array_map()和range():使用range()生成连续整数数组,然后使用array_map()填充值。array_pad():填充现有数组,使其达到所需的长度,并使用给定值填充新元素。这些方法提供了灵活性和效率,可满足各种数组填充需求。
PHP如何用给定的值填充数组
2024-04-02

php如何实现数值转ascii

小编给大家分享一下php如何实现数值转ascii,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!php实现数值转ascii的方法:1、创建一个PHP示例文件;2、通过“function NumToASCII($num) {.
2023-06-22

阿里云服务器充值了如何提现

阿里云服务器充值了可以提现。以下是提现的步骤:登录阿里云账户。在网站主页上,点击登录按钮或扫描二维码即可登录阿里云账户。选择提现银行账户。如果你是第一次提现,可以选择银行账户,并填写提现金额和提现时间。在填写银行信息时,应该尽可能准确地填写。填写提现申请信息。在银行信息输入框中,需要填写提现银行卡的相关信息。在填写完毕后,点击提交按钮。提交成功后,系统会提示你进行支付宝账户的提现申请。
2023-10-26

php如何实现字段值相加

本篇内容介绍了“php如何实现字段值相加”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php实现字段值相加的的方法:1、使用array_co
2023-06-22

PHP如何通过查询MySQL来处理用户充值

本篇内容主要讲解“PHP如何通过查询MySQL来处理用户充值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP如何通过查询MySQL来处理用户充值”吧!首先,我们需要确保我们已经正确安装了PH
2023-07-05

php如何实现数值转字母

本篇内容介绍了“php如何实现数值转字母”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php实现数值转字母的方法:1、创建一个php示例文件
2023-07-05

PHP如何使用指定的键和值填充数组

本文详细介绍了使用PHP指定键和值填充数组的方法,包括:使用构造函数、数组语法、+运算符、array_merge()函数、array_combine()函数和循环。该文章强调了键和值的数据类型限制,并提供了处理重复键和空值的方法。文中提供了多种示例,有助于读者轻松掌握这些技术。
PHP如何使用指定的键和值填充数组
2024-04-02

Cacti如何实现电话告警

Cacti是一套基于PHP,MySQL,SNMP及RRD Tool开发的网络流量监测图形分析工具。Cacti提供了一个快速轮询器,高级图表模板,多种数据采集方法和用户管理功能。所有这一切都被包装在一个直观的,易于使用的界面中,这对于局域网以
2023-06-04

php不重复唯一值如何实现

今天小编给大家分享一下php不重复唯一值如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。php实现不重复唯一值的方法:
2023-07-04

php如何实现数值转十进制

这篇文章主要介绍“php如何实现数值转十进制”,在日常操作中,相信很多人在php如何实现数值转十进制问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php如何实现数值转十进制”的疑惑有所帮助!接下来,请跟着小编
2023-06-25

在php中如何实现数值求和

这篇“在php中如何实现数值求和”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“在php中如何实现数值求和”文章吧。实现数值求
2023-06-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录