程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> 支付寶接口開發集成支付環境小結

支付寶接口開發集成支付環境小結

編輯:PHP綜合

關於支付寶的接口集成氣死是很簡單,目前大概有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,可以同時記錄在自己的訂單中。

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved