所謂的新浪回調介面,就是當資金儲值成功之後,新浪會通知本網站一個資訊來告知已經儲值成功,並返回一組成功的數組,我們根據這些資料再進行一個本機資料庫的同步操作,比如更新本機資料庫是否儲值成功的狀態,由未支付改為已支付,然後再網站上面進行顯示,還有資金也會進行同步 update,好了,下面夏日部落格把日誌分享下來,接著上一篇新浪支付建立介面,一個簡單的新浪支付回調介面,這個非同步回調的資訊是通過日誌產生到ftp下面的,根據日誌進行本地的更新。
一,先查看記錄檔
說明:資料提交到新浪之後會產生新浪記錄檔,如下:
{"ctl":"collocation","act":"response_sina","call":"registercreditor","notify_time":"20160317112508","sign_type":"RSA","notify_type":"trade_status_sync","gmt_payment":"20160317111255","trade_status":"PAY_FINISHED","version":"1.0","sign":"ULbWNFkn1DhF1z9M5daaJHKcvlyTCHS1SmH3o7AMwAQnYylMQATfpNXzdloFh5R43cm3MTaTuaAxEddSRckMBzemZ+XlqEcERsu8x6HA0OnIZW5YVOgQhPfnz4lbH3MC4yjxPzq9dQgE\/fVLJ+pWnaeVtXJMiyRygohCdX+mT28=","gmt_create":"20160317111254","_input_charset":"utf-8","outer_trade_no":"7L3No20160317111143","trade_amount":"100.00","inner_trade_no":"101145818437424877398","notify_id":"82170f9981b84c40b50a634ed37a2afd"}
二,開啟 /app/lib/module/collocationModule.class.php,尋找 response_sina 方法,方法如下:
public function response_sina()
{
$content= $_REQUEST;
error_log( date ( "[YmdHis]" ) ."\t" . json_encode($content) . "\r\n", 3, '../'. date ( "Y-m-d" ) . '.log1' );
$class_name = getCollName();
require_once APP_ROOT_PATH."system/collocation/".$class_name."_collocation.php";
$collocation_class = $class_name."_collocation";
$collocation_object = new $collocation_class();
$collocation_code = $collocation_object->SinaNotify($_POST,$_REQUEST);
}
三,開啟 system/collocation/Sina_collocation.php 檔案,尋找 SinaNotify 方法,如下:
function SinaNotify($map,$data){
// $weibopay->write_log("擷取到refund_status_sync結果通知:單號:".json_encode($map).json_encode($data));
ksort ($map);
$weibopay = new Weibopay ();
error_log( date ( "[YmdHis]" ) ."\t" . json_encode($map). json_encode($data). "\r\n", 3, '../'. date ( "Y-m-d" ) . '.log10' );
if ($weibopay->checkSignMsg ($map,@$map ["sign_type"] )) {
switch ($map["notify_type"])
{
//交易結果通知
case "trade_status_sync":
//投標代收
if($data['call']=='registercreditor'){
require_once(APP_ROOT_PATH.'system/collocation/sina/SinaNotify.php');
registercreditor_status_sync($map);
}
if($data['call']=='dotrtrade'){
error_log( date ( "[YmdHis]" ) ."\t" . json_encode($map). "\r\n",4, '../'. date ( "Y-m-d" ) . '.log4' );
require_once(APP_ROOT_PATH.'system/collocation/sina/SinaNotify.php');
dotrtrade_status_sync($map);
}
if($data['call']=='dohktrade'){
error_log( date ( "[YmdHis]" ) ."\t" . json_encode($map). "\r\n", 5, '../'. date ( "Y-m-d" ) . '.log41' );
require_once(APP_ROOT_PATH.'system/collocation/sina/SinaNotify.php');
dohktrade_status_sync($map);
}
//按照自己的業務需求萃取對應參數進行儲存
// $weibopay->write_log("擷取到trade_status_sync結果通知:時間:".date("YmdHis"));
// $weibopay->write_log("擷取到trade_status_sync結果通知:單號:".json_encode($_REQUEST));
break;
//交易退款結果通知
case "refund_status_sync":
//按照自己的業務需求萃取對應參數進行儲存
$weibopay->write_log("擷取到refund_status_sync結果通知:時間:".date("YmdHis"));
$weibopay->write_log("擷取到refund_status_sync結果通知:單號:".json_encode($_REQUEST));
break;
//儲值結果通知
case "deposit_status_sync":
//done
require_once(APP_ROOT_PATH.'system/collocation/sina/SinaNotify.php');
deposit_status_sync($map);
break;
//提現結果通知
case "withdraw_status_sync":
$weibopay->write_log("擷取到batch_trade_status_sync結果通知:時間:".date("YmdHis"));
$weibopay->write_log("擷取到batch_trade_status_sync結果通知:單號:".json_encode($_REQUEST));
require_once(APP_ROOT_PATH.'system/collocation/sina/SinaNotify.php');
withdraw_status_sync($map);
break;
//批量代付結果通知
case "batch_trade_status_sync":
//按照自己的業務需求萃取對應參數進行儲存
$weibopay->write_log("擷取到batch_trade_status_sync結果通知:時間:".date("YmdHis"));
$weibopay->write_log("擷取到batch_trade_status_sync結果通知:單號:".json_encode($_REQUEST));
break;
//審核結果通知
case "audit_status_sync":
require_once(APP_ROOT_PATH.'system/collocation/sina/SinaNotify.php');
audit_status_sync($map);
//按照自己的業務需求萃取對應參數進行儲存
$weibopay->write_log("擷取到audit_status_sync結果通知:時間:".date("YmdHis"));
$weibopay->write_log("擷取到audit_status_sync結果通知:單號:".json_encode($_REQUEST));
break;
default:
$weibopay->write_log("擷取到未知結果通知:時間:".date("YmdHis"));
$weibopay->write_log("擷取到未知結果通知:單號:".json_encode($_REQUEST));
echo "通知類型錯誤!";
}
// 如果回調成功,需要輸出SUCCESS告知新浪回調伺服器,已經收到非同步通知。
echo 'success';
} else {
$msg="簽名錯誤 or 非法請求";
$weibopay->write_log($msg);
die ( "sign error" );
}
}
//資質提價
四,開啟 system/collocation/sina/SinaNotify.php 檔案,儲值回調。
if($map['trade_status']=='PAY_FINISHED'){
$pErrCode = 'MG00000F';
$data['pErrCode'] ='MG00000F';
$data['pErrMsg'] = 'MG00000F';;
}
五,成功之後進行下面的操作。