php怎麼實現話費充值

2022-10-20 18:01:05

php實現話費充值的方法:1、開通話費充值介面;2、引入封裝好的程式碼類;3、設定介面基本資訊;4、提交話費充值訂單;5、將狀態資訊推播給相應的URL;6、根據手機及面額查詢是否支援充值;7、通過「if ($local_sign == $sign) {...}」方式進行業務邏輯處理即可。

php入門到就業線上直播課:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API偵錯工具:

本教學操作環境: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

推播引數:

f45eee5240571a92f5a4a8b366c7c6b.jpg

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 完整程式碼

<?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怎麼實現話費充值的詳細內容,更多請關注TW511.COM其它相關文章!