支付寶介面開發整合支付環境小結_php執行個體

來源:互聯網
上載者:User

關於支付寶的介面整合氣死是很簡單,目前大概有3種類型,即時到帳、雙功能、擔保交易,只需要整合一次擔保交易,其他的比如即時到帳整合很容易,擔保交易的狀態有幾種,比如:是否支付成功,賣家是否發貨,買家確認收穫等。而即時到帳只有一種,就是是否已付款!最多還有個退款的功能。一般都沒用到。

    通過之前做項目:配資平台,有個預付費的功能,用到了支付寶的雙功能收款,其實就是提供兩種付款條件,即時到帳和擔保交易。一般買家謹慎會選擇擔保。

    下面說下具體的整合過程,第一:下載對應的整合介面包,比如即時到帳就下載即時到帳,擔保下載擔保,非常不建議將即時到帳修改成擔保或者反之。案例中我下載的 雙功能介面檔案,utf8-php介面。

    下載來的檔案都大同小異,即時到帳和擔保的檔案也相差不大,反正可以肯定的說,只要配置一次擔保支付寶介面,就能配置即時到帳。

    我們需要修改的檔案有如下:alipay.config.php[設定檔,只是用於修改配置介面開發人員id和key]

    alipayapi.php[主調檔案,將需要發送的post資料交給該檔案,然後負責跳轉到支付頁面]
    index.php[demo示範頁面,可以不做修改,但是其中傳遞的參數名陳需要看懂]
    notify_url.php 返回資料頁面,在其中將返回交易的狀態,更具狀態我們可以更改資料庫訂單資訊,該檔案是通過post方式接受。
    return_url.php 返回資料頁面,在其中將返回交易的狀態,更具狀態我們可以更改資料庫訂單資訊,該檔案是通過GET方式。

    具體過程:

    第一步,修改配置資訊:

複製代碼 代碼如下:

   $alipay_config['partner']       = 'xxx8511073xxxxxxxx';
   //安全檢驗碼,以數字和字母組成的32位字元
   $alipay_config['key']           ='xxxxxxxxnow07oajbflskxxxxxxxxxx';

 
     第二:拼post資料,一般只需要修改請求參數

複製代碼 代碼如下:

 /**************************請求參數**************************/
         //支付類型
         $payment_type = "1";
         //必填,不能修改
         //伺服器非同步通知頁面路徑
         $notify_url = "http://你的網域名稱/alipay/notify_url.php";
         //需http://格式的完整路徑,不能加?id=123這類自訂參數
         //頁面跳轉同步通知頁面路徑
         $return_url = "http://你的網域名稱/alipay/return_url.php";
         //需http://格式的完整路徑,不能加?id=123這類自訂參數,不能寫成http://localhost/
         //賣家支付寶帳戶
         $seller_email = $_POST['WIDseller_email'];//demo[index.php]傳過來的
         //必填
         //商戶訂單號
         $out_trade_no = $_POST['WIDout_trade_no'];//傳過來的
         //商戶網站訂單系統中唯一訂單號,必填
         //訂單名稱
         $subject = $_POST['WIDsubject'];//同上
         //必填
         //付款金額
         $price = $_POST['WIDprice'];//傳過來的,是你的表單中填寫的值
         //必填
         //商品數量
         $quantity = "1";
         //必填,建議預設為1,不改變值,把一次交易看成是一次下訂單而非購買一件商品
         //物流費用
         $logistics_fee = "0.00";
         //必填,即運費
         //物流類型
         $logistics_type = "EXPRESS";
         //必填,三個值可選:EXPRESS(快遞)、POST(平郵)、EMS(EMS)
         //物流支付方式
         $logistics_payment = "SELLER_PAY";
         //必填,兩個值可選:SELLER_PAY(賣家承擔運費)、BUYER_PAY(買家承擔運費)
         //訂單描述
         $body = $_POST['WIDbody'];
         //商品展示地址
         $show_url = $_POST['WIDshow_url'];
         //需以http://開頭的完整路徑,如:http://www.ya-jing.cn
         //收貨人姓名
         $receive_name = '螢火';
         //如:張三
         //收貨人地址
         $receive_address = $_POST['WIDreceive_address'];
         //如:XX省XXX市XXX區XXX路XXX小區XXX棟XXX單元XXX號
         //收貨人郵編
         $receive_zip = $_POST['WIDreceive_zip'];
         //如:123456
         //收貨人電話號碼
         $receive_phone = $_POST['WIDreceive_phone'];
         //如:0571-88158090
         //收貨人手機號碼
         $receive_mobile = $_POST['WIDreceive_mobile'];
         //如:13312341234

 
     第三:資料構造完成後就可以在頁面上付款,測試能不能正確的開啟支付頁面。如果能開啟,這時候就可以進行付款了,但是買家付款的狀態我們還無法獲知,比如有沒有成功付款,賣家是否已經發貨等。那麼接下來開始做返回狀態的商務邏輯處理。

開啟return_url.php檔案,根據提示修改,做對因的處理。

複製代碼 代碼如下:

 //——請根據您的商務邏輯來編寫程式(以下代碼僅作參考)——
     //擷取支付寶的通知返回參數,可參考技術文檔中頁面跳轉同步通知參數列表
     //商戶訂單號 $out_trade_no = $_GET['out_trade_no'];
     //支付寶交易號    $trade_no = $_GET['trade_no'];
     //交易狀態
     $trade_status = $_GET['trade_status'];
     if($_GET['trade_status'] == 'WAIT_SELLER_SEND_GOODS') {//狀態為成功
     //處理自己網站的商務邏輯
         if(!$order['status']){//判斷本機資料庫中的訂單是否已經處理
             db_update("stx_recharge",array("status"=>1),array("oid"=>$_GET
 ['out_trade_no']));//如果沒處理就將狀態改成已經處理。
             //金錢的增加
             $zd = db_line("stx_terminal",array("id"=>$order['ztid']));
             db_update("stx_terminal",array("money"=>$zd['money']+$order
 ['money']),array("id"=>$order['ztid']));//增加餘額到該使用者的賬戶上。
         }
     }
     else if($_GET['trade_status'] == 'TRADE_FINISHED') {
         //判斷該筆訂單是否在商戶網站中已經做過處理
             //如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統
 中查到該筆訂單的詳細,並執行商戶的業務程式
             //如果有做過處理,不執行商戶的業務程式
     }
     else {
       echo "trade_status=".$_GET['trade_status'];
     }
     echo "驗證成功<br />";
     echo "trade_no=".$trade_no;

     notify_url.php也是一樣,根據狀態來編寫對應的代碼!notify_url.php檔案中的狀態要多一些。

複製代碼 代碼如下:

 //——請根據您的商務邏輯來編寫程式(以下代碼僅作參考)——
     //擷取支付寶的通知返回參數,可參考技術文檔中伺服器非同步通知參數列表
     //商戶訂單號
     $out_trade_no = $_POST['out_trade_no'];
     //支付寶交易號
     $trade_no = $_POST['trade_no'];
     //交易狀態
     $trade_status = $_POST['trade_status'];
     if($_POST['trade_status'] == 'WAIT_BUYER_PAY') {
     //該判斷表示買家已在支付寶交易管理中產生了交易記錄,但沒有付款
         //判斷該筆訂單是否在商戶網站中已經做過處理
             //如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程式
             //如果有做過處理,不執行商戶的業務程式
         echo "success";    //請不要修改或刪除
         //調試用,寫文本函數記錄程式運行情況是否正常
         //logResult("這裡寫入想要調試的代碼變數值,或其他啟動並執行結果記錄");
     }
     else if($_POST['trade_status'] == 'WAIT_SELLER_SEND_GOODS') {
     //該判斷表示買家已在支付寶交易管理中產生了交易記錄且付款成功,但賣家沒有發貨
         if(!$order['status']){
             db_update("stx_recharge",array("status"=>1),array("oid"=>$_POST['out_trade_no']));
             //金錢的增加
             $zd = db_line("stx_terminal",array("id"=>$order['ztid']));
             db_update("stx_terminal",array("money"=>$zd['money']+$order['money']),array("id"=>$order['ztid']));
         }
         echo "success";    //請不要修改或刪除
         //調試用,寫文本函數記錄程式運行情況是否正常
         //logResult("這裡寫入想要調試的代碼變數值,或其他啟動並執行結果記錄");
     }
     else if($_POST['trade_status'] =='WAIT_BUYER_CONFIRM_GOODS') {
     //該判斷表示賣家已經發了貨,但買家還沒有做確認收貨的操作
         if(!$order['status']){
             db_update("stx_recharge",array("status"=>1),array("oid"=>$_POST['out_trade_no']));
             //金錢的增加
             $zd = db_line("stx_terminal",array("id"=>$order['ztid']));
             db_update("stx_terminal",array("money"=>$zd['money']+$order['money']),array("id"=>$order['ztid']));
         }
         echo "success";    //請不要修改或刪除
         //調試用,寫文本函數記錄程式運行情況是否正常
         //logResult("這裡寫入想要調試的代碼變數值,或其他啟動並執行結果記錄");
     }
     else if($_POST['trade_status'] == 'TRADE_FINISHED') {
     //該判斷表示買家已經確認收貨,這筆交易完成
         //判斷該筆訂單是否在商戶網站中已經做過處理
             //如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程式
             //如果有做過處理,不執行商戶的業務程式
         echo "success";    //請不要修改或刪除
         //調試用,寫文本函數記錄程式運行情況是否正常
         //logResult("這裡寫入想要調試的代碼變數值,或其他啟動並執行結果記錄");
     }

由於我基本上沒有用到後續的發貨處理,所以在該狀態下未做處理,如果您的網站是購物網站秒就需要做對應的處理,比如更新狀態值為已發貨,或者未付款、已確認等。方便看到交易流程。同時在已付款的訂單中會產生支付寶的訂單id,可以同時記錄在自己的訂單中。

以上所述就是本文關於支付寶介面的全部內容了,希望能對大家熟練掌握支付寶介面支付的二次開發能夠有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.