> 백엔드 개발 > PHP 문제 > PHP로 전화요금 충전하는 방법

PHP로 전화요금 충전하는 방법

藏色散人
풀어 주다: 2023-03-17 07:30:01
원래의
1880명이 탐색했습니다.

PHP에서 전화 충전을 구현하는 방법: 1. 전화 충전 인터페이스를 엽니다. 2. 캡슐화된 코드 클래스를 소개합니다. 3. 인터페이스의 기본 정보를 구성합니다. 4. 전화 충전 주문을 제출합니다. 6. 휴대폰 및 금액 기준으로 충전이 지원되는지 확인합니다. 7. "if ($local_sign == $sign) {...}"를 통해 비즈니스 로직 처리를 수행합니다.

PHP로 전화요금 충전하는 방법

이 튜토리얼의 운영 환경: Windows 7 시스템, PHP 버전 8.1, Dell G3 컴퓨터.

PHP에서 전화 요금을 충전하는 방법은 무엇입니까?

PHP 기반 통합 전화요금 충전 인터페이스 예시

1. 인터페이스 활성화를 위한 애플리케이션

이 코드는 전화요금 충전 기능을 구현하기 위해 집계 데이터 기반의 전화요금 충전 API를 기반으로 합니다. :

  • https://www.juhe.cn/docs/api/id/85?s=cpphpcn서브를 통해 통화요금 인터페이스를 열려면 신청하세요.

  • 어그리게이션과 관련 서비스 계약을 체결한 후에만 정식으로 사용할 수 있습니다. 초기 단계에서는 테스트 환경 오픈 및 도킹 테스트를 신청할 수도 있습니다.

  • 자세한 인터페이스 설명은 집계 공식 문서를 참조하세요.

2. 인터페이스 사용법

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로 전화요금 충전하는 방법

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 = &#39;http://op.juhe.cn/ofpay/mobile/onlineorder&#39;; // 提交订单接口URL
            $this->orderStatusUrl = &#39;http://op.juhe.cn/ofpay/mobile/ordersta&#39;; // 订单状态查询接口URL
            $this->telCheckUrl = &#39;http://op.juhe.cn/ofpay/mobile/telcheck&#39;; // 检测手机号码是否能充值URL
            $this->telQueryUrl = &#39;http://op.juhe.cn/ofpay/mobile/telquery&#39;; // 根据手机号和面值查询商品URL
        } else {
            // 测试环境,接口地址
            $this->submitUrl = &#39;http://test-v.juhe.cn/ofpay/mobile/onlineorder&#39;; // 提交订单接口URL
            $this->orderStatusUrl = &#39;http://test-v.juhe.cn/ofpay/mobile/ordersta&#39;; // 订单状态查询接口URL
            $this->telCheckUrl = &#39;http://test-v.juhe.cn/ofpay/mobile/telcheck&#39;; // 检测手机号码是否能充值URL
            $this->telQueryUrl = &#39;http://test-v.juhe.cn/ofpay/mobile/telquery&#39;; // 根据手机号和面值查询商品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(
            &#39;key&#39; => $this->appkey,
            &#39;phoneno&#39; => $mobile,
            &#39;cardnum&#39; => $pervalue,
            &#39;orderid&#39; => $orderid,
            &#39;sign&#39; => $sign
        );
        $content = $this->juheHttpRequest($this->submitUrl, $params, 1);
        return $this->_returnArray($content);
    }
    /**
     * 查询订单的充值状态
     * @param  [string] $orderid [自定义单号]
     * @return  [array]
     */
    public function queryOrderStatus($orderid)
    {
        $params = &#39;key=&#39; . $this->appkey . &#39;&orderid=&#39; . $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 = &#39;key=&#39; . $this->appkey . &#39;&phoneno=&#39; . $mobile . &#39;&cardnum=&#39; . $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 = &#39;key=&#39; . $this->appkey . &#39;&phoneno=&#39; . $mobile . &#39;&cardnum=&#39; . $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, &#39;JuheData&#39;);
        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 . &#39;?&#39; . $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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿