這篇文章主要介紹“php如何實現(xiàn)話費充值”,在日常操作中,相信很多人在php如何實現(xiàn)話費充值問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”php如何實現(xiàn)話費充值”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)公司是一家專注于成都做網(wǎng)站、網(wǎng)站設(shè)計與策劃設(shè)計,鳳岡網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:鳳岡等地區(qū)。鳳岡做網(wǎng)站價格咨詢:13518219792
php實現(xiàn)話費充值的方法:1、開通話費充值接口;2、引入封裝好的代碼類;3、配置接口基本信息;4、提交話費充值訂單;5、將狀態(tài)信息推送給相應(yīng)的URL;6、根據(jù)手機及面額查詢是否支持充值;7、通過“if ($local_sign == $sign) {...}”方式進行業(yè)務(wù)邏輯處理即可。
php怎么實現(xiàn)話費充值?
基于PHP的聚合話費充值接口示例
一、接口申請開通
本代碼是基于聚合數(shù)據(jù)的話費充值A(chǔ)PI實現(xiàn)的話費充值功能,使用前需要:
通過https://www.juhe.cn/docs/api/id/85?s=cpphpcn
申請開通話費接口服務(wù)。
與聚合簽訂相關(guān)服務(wù)合同后,才能正式使用。前期您也可以申請開通測試環(huán)境,進行對接測試。
詳細的接口說明,可參考聚合官方文檔。
二、接口使用
2.1、引入封裝好的代碼類
include "JuheHuaFei.class.php";
2.2、配置一些必須的參數(shù)
// 接口基本信息配置
$env = 1; // 接口環(huán)境類型,1:正式環(huán)境接口 2:測試環(huán)境接口
$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') {
// 訂單提交成功,根據(jù)實際業(yè)務(wù)邏輯進行處理
echo "訂單提交成功,訂單號:" . $submitOrderResult['result']['sporder_id'];
print_r($submitOrderResult);
} else {
// 提交返回碼error_code非正常狀態(tài),依據(jù)官方文檔錯誤碼說明,進行邏輯處理
// 比如:10014,系統(tǒng)異常 / 208516,重復(fù)的訂單號 等,需要進行二次查詢/人工確認處理,不要直接失敗處理,避免造成不必要的損失
print_r($submitOrderResult);
}
} else {
// 可能網(wǎng)絡(luò)異常等問題,未獲得正確響應(yīng)結(jié)果,建議進行二次查單/人工確認,不要直接失敗處理,避免造成不必要的損失
// 依據(jù)自己的業(yè)務(wù)邏輯進行處理
echo "請求異常,請確認";
}
請求結(jié)果:
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、訂單狀態(tài)查詢
除主動查詢訂單狀態(tài),你還可以向聚合提供狀態(tài)回調(diào)通知URL,訂單狀態(tài)有變化,聚合將會主動將狀態(tài)信息推送給相應(yīng)的URL。
// 話費訂單充值狀態(tài)查詢
$orderId = '111111111'; // 需要查詢的訂單號,即提交訂單時傳遞的orderId
$orderStatusResult = $juheHuaFei->queryOrderStatus($orderId);
if ($orderStatusResult) {
// 打印返回結(jié)果
print_r($orderStatusResult);
// 根據(jù)實際業(yè)務(wù)邏輯進行處理
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 {
//查詢狀態(tài)失敗,可能訂單號不存在等情況
echo "查詢失敗:" . $orderStatusResult['reason'] . "(" . $orderStatusResult['error_code'] . ")";
}
} else {
// 可能網(wǎng)絡(luò)異常等問題,未獲得正確響應(yīng)結(jié)果,建議進行二次查詢
// 依據(jù)自己的業(yè)務(wù)邏輯進行處理
echo "請求異常,請確認";
}
返回結(jié)果:
Array
(
[reason] => 查詢成功
[result] => Array
(
[uordercash] => 1.060
[sporder_id] => J2011251629516xxxxxxxxxx
[game_state] => 9
)
[error_code] => 0
)
2.5、根據(jù)手機及面額查詢是否支持充值
主要通過號段進行判斷是否支持充值,實際業(yè)務(wù)中可以不使用本小接口。
// 根據(jù)手機號碼及面額查詢是否支持充值
$mobile = '1342966xxxx'; // 手機號碼
$perValue = '10'; // 話費面值
$telCheckResult = $juheHuaFei->telCheck($mobile, $perValue);
if ($telCheckResult) {
if($telCheckResult['error_code'] == '0'){
//說明支持充值,可以繼續(xù)充值操作,以下可以根據(jù)實際需求修改
echo "OK";
}else{
//暫不支持充值,以下可以根據(jù)實際需求修改
echo "對不起,該面額暫不支持充值";
}
} else {
// 可能網(wǎng)絡(luò)異常等問題,未獲得正確響應(yīng)結(jié)果,建議進行二次查詢
// 依據(jù)自己的業(yè)務(wù)邏輯進行處理
echo "請求異常,請確認";
}
2.6、根據(jù)手機和面額獲取商品信息
實際業(yè)務(wù)中可以不使用本小接口。
// 根據(jù)手機號碼和面額獲取商品信息
$mobile = '1342966xxxx'; // 手機號碼
$perValue = '10'; // 話費面值
$telQueryResult = $juheHuaFei->telQuery($mobile, $perValue);
if ($telQueryResult) {
if($telQueryResult['error_code'] == '0'){
// 查詢成功,可以根據(jù)實際邏輯修改
print_r($telQueryResult);
}else{
// 查詢失敗,可以根據(jù)實際邏輯修改
print_r($telQueryResult);
}
} else {
// 可能網(wǎng)絡(luò)異常等問題,未獲得正確響應(yīng)結(jié)果,建議進行二次查詢
// 依據(jù)自己的業(yè)務(wù)邏輯進行處理
echo "請求異常,請確認";
}
返回結(jié)果:
Array
(
[reason] => 查詢成功
[result] => Array
(
[cardid] => 10880
[cardname] => 浙江移動話費10元
[inprice] => 10.2
[game_area] => 浙江杭州移動
)
[error_code] => 0
)
2.7、訂單狀態(tài)通知
推送URL地址:自行提供給聚合進行配置 (為了更安全,你也可以將聚合推送服務(wù)器的IP進行加白名單處理)
推送方式:POST
推送參數(shù):
PHP接收異步通知(回調(diào))參考代碼:
登錄后復(fù)制/**
* 接受話費\加油卡\流量充值業(yè)務(wù) 異步通知參數(shù) 參考示例
*/
$appkey = "b842820xxxxxxxxxxxxxxxxxx"; //您申請的數(shù)據(jù)的APIKey
$sporder_id = addslashes($_POST['sporder_id']); //聚合訂單號
$orderid = addslashes($_POST['orderid']); //商戶的單號
$sta = addslashes($_POST['sta']); //充值狀態(tài)
$sign = addslashes($_POST['sign']); //校驗值
$local_sign = md5($appkey.$sporder_id.$orderid); //本地sign校驗值
if ($local_sign == $sign) {
if ($sta == '1') {
//充值成功,根據(jù)自身業(yè)務(wù)邏輯進行后續(xù)處理
} elseif ($sta =='9') {
//充值失敗,根據(jù)自身業(yè)務(wù)邏輯進行后續(xù)處理
}
}
2.8、JuheHuaFei.class.php
JuheHuaFei.class.php 完整代碼
<?php
//----------------------------------
// 聚合數(shù)據(jù)-手機話費充值A(chǔ)PI調(diào)用類--示例代碼
// 官方接口文檔:https://www.juhe.cn/docs/api/id/85
//----------------------------------
class JuheHuaFei
{
private $appkey;
private $openid;
// 提交訂單接口URL
private $submitUrl;
// 訂單狀態(tài)查詢接口URL
private $orderStatusUrl;
// 檢測手機號碼是否能充值URL
private $telCheckUrl;
// 根據(jù)手機號和面值查詢商品URL
private $telQueryUrl;
/**
* JuheHuaFei constructor.
* @param [string] $appkey [接口密鑰]
* @param [string] $openid [賬號openid]
* @param [int] [$env 接口環(huán)境類型 1:正式環(huán)境 2:測試環(huán)境]
*/
public function __construct($appkey, $openid, $env = 1)
{
$this->appkey = $appkey; // 申請到的話費接口請求key
$this->openid = $openid; // OpenID在聚合個人中心查詢
if ($env == 1) {
// 正式環(huán)境,接口地址
$this->submitUrl = 'http://op.juhe.cn/ofpay/mobile/onlineorder'; // 提交訂單接口URL
$this->orderStatusUrl = 'http://op.juhe.cn/ofpay/mobile/ordersta'; // 訂單狀態(tài)查詢接口URL
$this->telCheckUrl = 'http://op.juhe.cn/ofpay/mobile/telcheck'; // 檢測手機號碼是否能充值URL
$this->telQueryUrl = 'http://op.juhe.cn/ofpay/mobile/telquery'; // 根據(jù)手機號和面值查詢商品URL
} else {
// 測試環(huán)境,接口地址
$this->submitUrl = 'http://test-v.juhe.cn/ofpay/mobile/onlineorder'; // 提交訂單接口URL
$this->orderStatusUrl = 'http://test-v.juhe.cn/ofpay/mobile/ordersta'; // 訂單狀態(tài)查詢接口URL
$this->telCheckUrl = 'http://test-v.juhe.cn/ofpay/mobile/telcheck'; // 檢測手機號碼是否能充值URL
$this->telQueryUrl = 'http://test-v.juhe.cn/ofpay/mobile/telquery'; // 根據(jù)手機號和面值查詢商品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);
}
/**
* 查詢訂單的充值狀態(tài)
* @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);
}
/**
* 根據(jù)手機號碼及面額查詢是否支持充值
* @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);
}
/**
* 根據(jù)手機號碼和面額獲取商品信息
* @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內(nèi)容轉(zhuǎn)為數(shù)據(jù),并返回
* @param string $content [內(nèi)容]
* @return array
*/
public function _returnArray($content)
{
return json_decode($content, true);
}
/**
* 請求接口返回內(nèi)容
* @param string $url [請求的URL地址]
* @param string $params [請求的參數(shù)]
* @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;
}
到此,關(guān)于“php如何實現(xiàn)話費充值”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
網(wǎng)站題目:php如何實現(xiàn)話費充值
本文網(wǎng)址:http://www.rwnh.cn/article38/pgcgpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、服務(wù)器托管、關(guān)鍵詞優(yōu)化、外貿(mào)網(wǎng)站建設(shè)、企業(yè)建站、移動網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)