php怎麼實現話費儲值
php實現話費儲值的方法:1、開通話費儲值介面;2、引入封裝好的代碼類別;3、設定介面基本資訊;4、提交話費儲值訂單;5、將狀態資訊推送給對應的URL;6、根據手機及面額查詢是否支援儲值;7、透過「if ($local_sign == $sign) {...}」方式進行業務邏輯處理即可。
本教學操作環境: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
推送參數:
/** * 接受话费\加油卡\流量充值业务 异步通知参数 参考示例 */ $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') { //充值失败,根据自身业务逻辑进行后续处理 } }
<?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; /** * JuheHuaFei constructor. * @param [string] $appkey [接口密钥] * @param [string] $openid [账号openid] * @param [int] [$env 接口环境类型 1:正式环境 2:测试环境] */ 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 } } /** * 提交话费充值订单 * @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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。
