php版新浪支付介面之回調介面筆記

來源:互聯網
上載者:User

所謂的新浪回調介面,就是當資金儲值成功之後,新浪會通知本網站一個資訊來告知已經儲值成功,並返回一組成功的數組,我們根據這些資料再進行一個本機資料庫的同步操作,比如更新本機資料庫是否儲值成功的狀態,由未支付改為已支付,然後再網站上面進行顯示,還有資金也會進行同步 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';; 
        } 
五,成功之後進行下面的操作。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.