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