天天看點

php實作銀聯支付

銀聯支付用的還是比較少的,而且開發中也沒接觸多少,不過因為工作項目用銀聯支付能降低費率,是以還是接入了銀聯支付。本文支付為銀聯網關和WAP支付接口。

官方網站SDK&DEMO:https://open.unionpay.com/ajweb/product/detail?id=66

産品API:https://open.unionpay.com/ajweb/product/newProApiShow?proId=1&apiId=63

API文檔https://open.unionpay.com/ajweb/help/api

在開始之前要仔細閱讀官方包裡的說明檔案,必要的證書和商戶資訊要提前擷取。

執行個體代碼及步驟:

修改demo/api_01_gateway/Form_6_2_FrontConsume.php(發送訂單參數,跳轉支付界面)

<?php

header ( \'Content-type:text/html;charset=utf-8\' );

include_once("../../../../include/config.inc.php");

include_once dirname ( __FILE__ ).DIRECTORY_SEPARATOR . \'./../../sdk/acp_service.php\';

/**

* 重要:聯調測試時請仔細閱讀注釋!

*

* 産品:跳轉網關支付産品<br>

* 交易:消費:前台跳轉,有前台通知應答和背景通知應答<br>

* 日期: 2015-09<br>

* 版本: 1.0.0

* 版權: 中國銀聯<br>

* 說明:以下代碼隻是為了友善商戶測試而提供的樣例代碼,商戶可以根據自己需要,按照技術文檔編寫。該代碼僅供參考,不提供編碼性能規範性等方面的保障<br>

* 提示:該接口參考文檔位置:open.unionpay.com幫助中心 下載下傳 産品接口規範 《網關支付産品接口規範》,<br>

* 《平台接入接口規範-第5部分-附錄》(内包含應答碼接口規範,全管道平台銀行名稱-簡碼對照表)<br>

* 《全管道平台接入接口規範 第3部分 檔案接口》(對賬檔案格式說明)<br>

* 測試過程中的如果遇到疑問或問題您可以:1)優先在open平台中查找答案:

* 調試過程中的問題或其他問題請在 https://open.unionpay.com/ajweb/help/faq/list幫助中心 FAQ 搜尋解決方案

* 測試過程中産生的7位應答碼問題疑問請在https://open.unionpay.com/ajweb/help/respCode/respCodeList輸入應答碼搜尋解決方案

* 2) 咨詢線上人工支援: open.unionpay.com注冊一個使用者并登陸在右上角點選“線上客服”,咨詢人工QQ測試支援。

* 交易說明:1)以背景通知或交易狀态查詢交易确定交易成功,前台通知不能作為判斷成功的标準.

* 2)交易狀态查詢交易(Form_6_5_Query)建議調用機制:前台類交易建議間隔(5分、10分、30分、60分、120分)發起交易查詢,如果查詢到結果成功,則不用再查詢。(失敗,進行中,查詢不到訂單均可能為中間狀态)。也可以建議商戶使用payTimeout(支付逾時時間),過了這個時間點查詢,得到的結果為最終結果。

*/

//接收支付資料

$order_data = trim(get_param("orderDa")); //訂單資料

if($order_data == "" ){

$mssage = "資料不能為空";

showinfo($mssage,\'\' ,3);

exit;

}

$result_order = json_decode(uc_authcode(base64_decode($order_data), \'DECODE\', ADMIN_KEY),true);

//商戶訂單号,商戶網站訂單系統中唯一訂單号,必填

$out_trade_no = $result_order[\'WIDout_trade_no\'];

//付款金額,必填(機關元)

$total_amount = $result_order[\'WIDtotal_amount\'];

//商戶代碼,請改自己的測試商戶号,此處預設取demo示範頁面傳遞的參數

//訂單發送時間

$send_time = date(\'YmdHis\',THIS_DATETIME);

//訂單逾時時間

$time_out = date(\'YmdHis\',strtotime(\'+15 minutes\',THIS_DATETIME));

//驗證資料

$pay_md5 = $result_order[\'infoPy\']; //訂單驗證

if($out_trade_no==\'\'){

$mssage = "訂單号不能為空";

showinfo($mssage,\'\' ,3);

exit;

}

if($total_amount==\'\' || $total_amount==0){

$mssage = "訂單金額不能為空";

showinfo($mssage,\'\' ,3);

exit;

}

//購買商品

if($result_order[\'flag\']==\'paycard\'){

//檢測是否有訂單号

$where = " and o_orderid = \'".$out_trade_no."\' and o_totalprice=\'".$total_amount."\' and o_status=4 ";

$info = get_info($GLOBALS["conn"],"game_order",array(),$where);

if( empty($info) ){

$mssage = "沒有此訂單!";

showinfo($mssage,\'\' ,3);

exit;

}

//驗證資料

$p_arr = array( \'uid\'=>$info[\'o_playerid\'], \'uorder\'=>$info[\'o_orderid\'], \'uprice\'=>$info[\'o_totalprice\'],);

$p_time = $info[\'o_addtime\'];

$p_key = ADMIN_KEY;

$p_md5 = md5($p_arr.$p_time.$p_key);

if( $p_md5 != $pay_md5 ){

$mssage = "請勿非法操作!";

showinfo($mssage,\'\' ,3);

exit;

}

}

//申請還款

if($result_order[\'flag\']==\'repayment\'){

//檢測是否有訂單号

$where = " and l_orderid = \'".$out_trade_no."\' and l_returnnum=\'".$total_amount."\' and l_status=3 ";

$info = get_info($GLOBALS["conn"],"game_loan_order",array(),$where);

if( empty($info) ){

$mssage = "沒有此訂單!";

showinfo($mssage,\'\' ,3);

exit;

}

//驗證資料

$p_arr = array( \'uid\'=>$info[\'l_playerid\'], \'uorder\'=>$info[\'l_orderid\'], \'uprice\'=>$info[\'l_returnnum\']);

$p_time = $info[\'l_addtime\'];

$p_key = ADMIN_KEY;

$p_md5 = md5($p_arr.$p_time.$p_key);

if( $p_md5 != $pay_md5 ){

$mssage = "請勿非法操作!";

showinfo($mssage,\'\' ,3);

exit;

}

}

//記錄要送出的訂單資訊到日志

$log_msg = "訂單内容:" . json_encode($result_order);

sys_log_write_content( $log_msg.__FILE__.__LINE__ ,"pay_log","jsapi");

$params = array(

//以下資訊非特殊情況不需要改動

\'version\' => com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->version, //版本号

\'encoding\' => \'utf-8\', //編碼方式

\'txnType\' => \'01\', //交易類型

\'txnSubType\' => \'01\', //交易子類

\'bizType\' => \'000201\', //業務類型

\'frontUrl\' => com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->frontUrl, //前台通知位址

\'backUrl\' => com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->backUrl, //背景通知位址

\'signMethod\' => com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->signMethod, //簽名方法

\'channelType\' => \'08\', //管道類型,07-PC,08-手機

\'accessType\' => \'0\', //接入類型

\'currencyCode\' => \'156\', //交易币種,境内商戶固定156

//TODO 以下資訊需要填寫

\'merId\' => \'\', //商戶代碼,請改自己的測試商戶号,此處預設取demo示範頁面傳遞的參數

\'orderId\' => $out_trade_no, //商戶訂單号,8-32位數字字母,不能含“-”或“_”,此處預設取demo示範頁面傳遞的參數,可以自行定制規則

\'txnTime\' => $send_time, //訂單發送時間,格式為YYYYMMDDhhmmss,取中原標準時間,此處預設取demo示範頁面傳遞的參數

\'txnAmt\' => $total_amount*100, //交易金額,機關分,此處預設取demo示範頁面傳遞的參數

// 訂單逾時時間。

// 超過此時間後,除網銀交易外,其他交易銀聯系統會拒絕受理,提示逾時。 跳轉銀行網銀交易如果逾時後交易成功,會自動退款,大約5個工作日金額返還到持卡人賬戶。

// 此時間建議取支付時的中原標準時間加15分鐘。

// 超過逾時時間調查詢接口應答origRespCode不是A6或者00的就可以判斷為失敗。

\'payTimeout\' => $time_out

// 請求方保留域,

// 透傳字段,查詢、通知、對賬檔案中均會原樣出現,如有需要請啟用并修改自己希望透傳的資料。

// 出現部分特殊字元時可能影響解析,請按下面建議的方式填寫:

// 1. 如果能确定内容不會出現&={}[]"\'等符号時,可以直接填寫資料,建議的方法如下。

// \'reqReserved\' =>\'透傳資訊1|透傳資訊2|透傳資訊3\',

// 2. 内容可能出現&={}[]"\'符号時:

// 1) 如果需要對賬檔案裡能顯示,可将字元替換成全角&={}【】“‘字元(自己寫代碼,此處不示範);

// 2) 如果對賬檔案沒有顯示要求,可做一下base64(如下)。

// 注意控制資料長度,實際傳輸的資料長度不能超過1024位。

// 查詢、通知等接口解析時使用base64_decode解base64後再對資料做後續解析。

// \'reqReserved\' => base64_encode(\'任意格式的資訊都可以\'),

//TODO 其他特殊用法請檢視 special_use_purchase.php

);

com\unionpay\acp\sdk\AcpService::sign ( $params );

$uri = com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->frontTransUrl;

$html_form = com\unionpay\acp\sdk\AcpService::createAutoFormHtml( $params, $uri );

echo $html_form;

?>

修改demo/api_01_gateway/FrontReceive.php(前台同步通知)

<?php

include_once("../../../../include/config.inc.php");

include_once dirname ( __FILE__ ).DIRECTORY_SEPARATOR . \'./../../sdk/acp_service.php\';

/**

* 交易說明: 前台類交易成功才會發送背景通知。背景類交易(有背景通知的接口)交易結束之後成功失敗都會發通知。

* 為保證安全,涉及資金類的交易,收到通知後請再發起查詢接口确認交易成功。不涉及資金的交易可以以通知接口respCode=00判斷成功。

* 未收到通知時,查詢接口調用時間點請參照此FAQ:https://open.unionpay.com/ajweb/help/faq/list?id=77&level=0&from=0

*/

$logger = com\unionpay\acp\sdk\LogUtil::getLogger();

$logger->LogInfo("receive front notify: " . com\unionpay\acp\sdk\createLinkString ( $_POST, false, true ));

//頁面回跳位址

$fail_back_url = WEBPATH_DIR_INC.\'enter-query.html\';

$succ_back_url = WEBPATH_DIR_INC.\'enter-query.html\';

//驗簽

if (isset ( $_POST [\'signature\'] )) {

$result = com\unionpay\acp\sdk\AcpService::validate ( $_POST );

if($result){//驗簽成功

$respCode = $_POST [\'respCode\'];//應答碼

if($respCode==\'00\' || $respCode==\'A6\'){//交易成功

//請在這裡加上商戶的業務邏輯程式代碼

//傳回參數

$orderId = $_POST [\'orderId\'];//商戶訂單号

$totalAmount = $_POST[\'txnAmt\'];//交易金額

$merId = $_POST[\'merId\'];//商戶代碼

$res = \'success\';

//判斷支付類型(提現還是借貸)

$type = substr($orderId,0,2);

//擷取對應訂單資訊

if($type==\'tx\'){

$order_info = get_order_info($orderId);

//驗證訂單資料

if(empty($order_info)){

$res = \'fail\';

}

if($totalAmount != $order_info[\'o_totalprice\']*100){

$res = \'fail\';

}

}

if($type==\'jd\'){

$order_info = get_loan_order_info($orderId);

//驗證訂單資料

if(empty($order_info)){

$res = \'fail\';

}

if($totalAmount != $order_info[\'l_returnnum\']*100){

$res = \'fail\';

}

}

//驗證商戶代碼

//TODO

}else{

$res = \'fail\';

}

}else{

$res = \'fail\';

}

} else {

$res = \'fail\';

}

?>

<html>

<head>

<meta http-equiv="content-type" content="text/html;charset=utf-8"/>

<meta name="viewport" content="width=device-width, initial-scale=1"/>

<title>銀聯支付-訂單支付</title>

<script type="text/javascript">

function callpay(){

var res = \'<?php echo $res;?>\';

if(res==\'success\'){

var Idiv = document.getElementById("pay_error2");

}else{

var Idiv = document.getElementById("pay_error");

}

Idiv.style.display = "block";

}

//頁面進入即進行支付

window.onload = function(){ callpay(); };

</script>

</head>

<body>

<style>

*{ margin:0; padding:0; background:#e1e1e1;}

#pay_error, #pay_error2{ display:none; width:90%; height:100%; text-align:center; color:#fe5f16; font-size:20px; padding:20px 0; font-weight:bolder; border:1px solid #ccc; margin:0 5%; height:100px; margin-top:50%; border-radius:10px; background:#fff;}

#pay_error p,#pay_error2 p{ background:#fff;}

#pay_error a,#pay_error2 a{ background:#83da49; color:#fff; text-decoration:none; display:block; padding:10px 0; width:60%; margin-left:20%; margin-top:20px;}

</style>

<div id="pay_error">

<p class="p1">支付失敗,請重新完成支付!</p>

<p class="bt"><a href="<?php echo $fail_back_url;?>">确定</a></p>

</div>

<div id="pay_error2">

<p class="p1">恭喜你,支付成功</p>

<p class="bt"><a href="<?php echo $succ_back_url;?>">确定</a></p>

</div>

</body>

</html>

修改demo/api_01_gateway/BackReceive.php(背景異步通知)

<?php

include_once("../../../../include/config.inc.php");

include_once dirname ( __FILE__ ).DIRECTORY_SEPARATOR . \'./../../sdk/acp_service.php\';

include_once "Form_6_5_Query.php";

/**

* 交易說明: 前台類交易成功才會發送背景通知。背景類交易(有背景通知的接口)交易結束之後成功失敗都會發通知。

* 為保證安全,涉及資金類的交易,收到通知後請再發起查詢接口确認交易成功。不涉及資金的交易可以以通知接口respCode=00判斷成功。

* 未收到通知時,查詢接口調用時間點請參照此FAQ:https://open.unionpay.com/ajweb/help/faq/list?id=77&level=0&from=0

*/

$logger = com\unionpay\acp\sdk\LogUtil::getLogger();

$logger->LogInfo("receive back notify: " . com\unionpay\acp\sdk\createLinkString ( $_POST, false, true ));

//驗簽

if (isset ( $_POST [\'signature\'] )) {

$result = com\unionpay\acp\sdk\AcpService::validate ( $_POST );

if($result){//驗簽成功

$respCode = $_POST [\'respCode\'];//應答碼

if($respCode==\'00\' || $respCode==\'A6\'){//交易成功

//傳回參數

$orderId = $_POST [\'orderId\'];//商戶訂單号

$totalAmount = $_POST[\'txnAmt\'];//交易金額

$merId = $_POST[\'merId\'];//商戶代碼

$txnTime = $_POST[\'txnTime\'];//訂單發送時間

$trade_no = $_POST[\'queryId\'];//銀聯流水号

//發起查詢交易接口

$check_res = check_Trade_Res($orderId,$merId,$txnTime,THIS_DATETIME);

if($check_res==\'200\'){

//成功

//請在這裡加上商戶的業務邏輯程式代碼

//判斷支付類型(提現還是借貸)

$type = substr($orderId,0,2);

//擷取對應訂單資訊

if($type==\'tx\'){

$order_info = get_order_info($orderId);

//驗證訂單資料

if(empty($order_info)){

echo \'fail\';

return;

}

if($totalAmount != $order_info[\'o_totalprice\']*100){

echo \'fail\';

return;

}

}

if($type==\'jd\'){

$order_info = get_loan_order_info($orderId);

//驗證訂單資料

if(empty($order_info)){

echo \'fail\';

return;

}

if($totalAmount != $order_info[\'l_returnnum\']*100){

echo \'fail\';

return;

}

}

//驗證商戶代碼

//TODO

//執行成功後的業務程式

if($type==\'tx\'){

if($order_info[\'o_status\']==4){

//執行業務處理

//取出禮包碼

$sql = "select sysid,gc_code from ".get_table("game_gift_code")." where gc_status=1 limit 1";

$query = $GLOBALS["conn"]->Query($sql);

$value = $GLOBALS[\'conn\']->FetchArray($query);

$up_arr = array(

\'o_status\' => 1,

\'o_trade_no\' => $trade_no,

\'o_giftcode\' => $value[\'gc_code\']

);

$up_where = " and o_orderid=\'".$orderId."\'";

$row = update_record($GLOBALS["conn"],\'game_order\',$up_arr,array(),$up_where);//更新訂單資料

if($row>0){

$msg = "訂單 ".$orderId." 已支付";

$log_msg = "call back:" . $msg;

sys_log_write_content( $log_msg.__FILE__.__LINE__ ,"pay_log","notify_order_success");

//更新禮包碼狀态

$up_gift = array(

\'gc_status\'=>2,

\'gc_time\' => THIS_DATETIME,

\'gc_orderid\' => $orderId

);

$gift_where = " and sysid=".$value[\'sysid\'];

update_record($GLOBALS["conn"],\'game_gift_code\',$up_gift,array(),$gift_where);

//更新商品出售數量

/*$where = " and og_sysid=\'".$orderId."\'";

$garr = get_info($GLOBALS[\'conn\'],"game_order_goods",array(\'og_goodsid\'),$where,\'\',true);

foreach($garr as $k=>$v){

$up_num = array(

\'g_sellnum\' => \'g_sellnum\'+1

);

$num_where = " and g_id=\'".$v."\'";

update_record($GLOBALS[\'conn\'],"game_goods",$up_num,array(),$num_where);//更新商品出售

}*/

//新增使用者消息

$title = \'付款成功,請試用後盡快退款\';//标題

$content = \'您的訂單[\'.$orderId.\']已經付款成功,<br>道具試用後可申請退款退回綁定借記卡,适合現金緊缺的玩家!系統贈送您的遊戲兌換碼:\'.$value[\'gc_code\'].\',可以在您的遊戲中進行使用,感謝您的支援!<br>如需幫助,請點選左上角【幫助】找到您的問題或者聯系客服進行人工服務,QQ:2013609564\';

add_player_msg($order_info[\'o_playerid\'],$title,$content);

}

}

}

if($type==\'jd\'){

if($order_info[\'l_status\']==3){

//執行業務處理

$up_arr = array(

\'l_status\' => 4,

\'l_trade_no\' => $trade_no,

\'l_returntime\' => THIS_DATETIME

);

$up_where = " and l_orderid=\'".$orderId."\'";

$row = update_record($GLOBALS["conn"],\'game_loan_order\',$up_arr,array(),$up_where);//更新訂單資料

if($row>0){

$msg = "訂單 ".$orderId." 已支付";

$log_msg = "call back:" . $msg;

sys_log_write_content( $log_msg.__FILE__.__LINE__ ,"pay_log","notify_order_success");

}

}

}

echo "success";

}else{

echo "fail";

}

}else{

echo \'fail\';

}

}else{

echo \'fail\';

}

} else {

echo \'fail\';

}

?>

封裝主動查詢交易結果接口方法

<?php

include_once("../../../../include/config.inc.php");

header ( \'Content-type:text/html;charset=utf-8\' );

//include_once $_SERVER [\'DOCUMENT_ROOT\'] . \'/upacp_demo_b2c/sdk/acp_service.php\';

/**

* 重要:聯調測試時請仔細閱讀注釋!

*

* 産品:跳轉網關支付産品<br>

* 交易:交易狀态查詢交易:隻有同步應答 <br>

* 日期: 2015-09<br>

* 版本: 1.0.0

* 版權: 中國銀聯<br>

* 說明:以下代碼隻是為了友善商戶測試而提供的樣例代碼,商戶可以根據自己需要,按照技術文檔編寫。該代碼僅供參考,不提供編碼性能及規範性等方面的保障<br>

* 該接口參考文檔位置:open.unionpay.com幫助中心 下載下傳 産品接口規範 《網關支付産品接口規範》,<br>

* 《平台接入接口規範-第5部分-附錄》(内包含應答碼接口規範,全管道平台銀行名稱-簡碼對照表)<br>

* 測試過程中的如果遇到疑問或問題您可以:1)優先在open平台中查找答案:

* 調試過程中的問題或其他問題請在 https://open.unionpay.com/ajweb/help/faq/list幫助中心 FAQ 搜尋解決方案

* 測試過程中産生的7位應答碼問題疑問請在https://open.unionpay.com/ajweb/help/respCode/respCodeList輸入應答碼搜尋解決方案

* 2) 咨詢線上人工支援: open.unionpay.com注冊一個使用者并登陸在右上角點選“線上客服”,咨詢人工QQ測試支援。

* 交易說明: 1)對前台交易發起交易狀态查詢:前台類交易建議間隔(5分、10分、30分、60分、120分)發起交易查詢,如果查詢到結果成功,則不用再查詢。(失敗,進行中,查詢不到訂單均可能為中間狀态)。也可以建議商戶使用payTimeout(支付逾時時間),過了這個時間點查詢,得到的結果為最終結果。

* 2)對背景交易發起交易狀态查詢:背景類資金類交易同步傳回00,成功銀聯有背景通知,商戶也可以發起 查詢交易,可查詢N次(不超過6次),每次時間間隔2N秒發起,即間隔1,2,4,8,16,32S查詢(查詢到03,04,05繼續查詢,否則終止查詢)。

* 背景類資金類同步返03 04 05響應碼及未得到銀聯響應(讀逾時)需發起查詢交易,可查詢N次(不超過6次),每次時間間隔2N秒發起,即間隔1,2,4,8,16,32S查詢(查詢到03,04,05繼續查詢,否則終止查詢)。

*/

function check_Trade_Res($orderId,$merId,$txnTime,$firTime=THIS_DATETIME){

$params = array(

//以下資訊非特殊情況不需要改動

\'version\' => com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->version, //版本号

\'encoding\' => \'utf-8\', //編碼方式

\'signMethod\' => com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->signMethod, //簽名方法

\'txnType\' => \'00\', //交易類型

\'txnSubType\' => \'00\', //交易子類

\'bizType\' => \'000000\', //業務類型

\'accessType\' => \'0\', //接入類型

\'channelType\' => \'07\', //管道類型

//TODO 以下資訊需要填寫

\'orderId\' => $orderId, //請修改被查詢的交易的訂單号,8-32位數字字母,不能含“-”或“_”,此處預設取demo示範頁面傳遞的參數

\'merId\' => $merId, //商戶代碼,請改自己的測試商戶号,此處預設取demo示範頁面傳遞的參數

\'txnTime\' => $txnTime,//請修改被查詢的交易的訂單發送時間,格式為YYYYMMDDhhmmss,此處預設取demo示範頁面傳遞的參數

);

com\unionpay\acp\sdk\AcpService::sign ( $params ); // 簽名

$url = com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->singleQueryUrl;

$result_arr = com\unionpay\acp\sdk\AcpService::post ( $params, $url);

if(count($result_arr)<=0) { //沒收到200應答的情況

//printResult ( $url, $params, "" );

return;

}

//printResult ($url, $params, $result_arr ); //頁面列印請求應答資料

if (!com\unionpay\acp\sdk\AcpService::validate ($result_arr) ){

return \'400\';

}

if ($result_arr["respCode"] == "00"){

if ($result_arr["origRespCode"] == "00"){

//交易成功

//TODO

//echo "交易成功。<br>\n";

return \'200\';

} else if ($result_arr["origRespCode"] == "03"

|| $result_arr["origRespCode"] == "04"

|| $result_arr["origRespCode"] == "05"){

//後續需發起交易狀态查詢交易确定交易狀态

//TODO

//echo "交易進行中,請稍微查詢。<br>\n";

//間隔查詢

ignore_user_abort(1);

set_time_limit(0);

$interval = 60*5;//5分鐘

sleep($interval);

do{

if(THIS_DATETIME-$firTime>60*120){

return \'400\';

}

check_Trade_Res($orderId,$merId,$txnTime);//再次查詢

}while(true);

} else {

//其他應答碼做以失敗處理

//TODO

//echo "交易失敗:" . $result_arr["origRespMsg"] . "。<br>\n";

return \'400\';

}

} else if ($result_arr["respCode"] == "03"

|| $result_arr["respCode"] == "04"

|| $result_arr["respCode"] == "05" ){

//後續需發起交易狀态查詢交易确定交易狀态

//TODO

//echo "處理逾時,請稍微查詢。<br>\n";

//間隔查詢

ignore_user_abort(1);

set_time_limit(0);

$interval = 60*5;//5分鐘

sleep($interval);

do{

if(THIS_DATETIME-$firTime>60*120){

return \'400\';

}

check_Trade_Res($orderId,$merId,$txnTime);//再次查詢

}while(true);

} else {

//其他應答碼做以失敗處理

//TODO

//echo "失敗:" . $result_arr["respMsg"] . "。<br>\n";

return \'400\';

}

}

/**

* 列印請求應答

*

* @param

* $url

* @param

* $req

* @param

* $resp

*/

function printResult($url, $req, $resp) {

echo "=============<br>\n";

echo "位址:" . $url . "<br>\n";

echo "請求:" . str_replace ( "\n", "\n<br>", htmlentities ( com\unionpay\acp\sdk\createLinkString ( $req, false, true ) ) ) . "<br>\n";

echo "應答:" . str_replace ( "\n", "\n<br>", htmlentities ( com\unionpay\acp\sdk\createLinkString ( $resp , false, false )) ) . "<br>\n";

echo "=============<br>\n";

}

---------------------

作者:xxd_hr

原文:https://blog.csdn.net/qq603283912/article/details/78720960