關於支付寶的接口集成氣死是很簡單,目前大概有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,可以同時記錄在自己的訂單中。
以上所述就是本文關於支付寶接口的全部內容了,希望能對大家熟練掌握支付寶接口支付的二次開發能夠有所幫助。