《PHP實例:支付寶接口開發集成支付環境小結》要點:
本文介紹了PHP實例:支付寶接口開發集成支付環境小結,希望對您有用。如果有疑問,可以聯系我們。
關于支付寶的接口集成氣死是很簡單,目前大概有3種類型,即時到帳、雙功能、擔保交易,只需要集成一次擔保交易,其他的比如即時到帳集成很容易,擔保交易的狀態有幾種,比如:是否支付成功,賣家是否發貨,買家確認收獲等.而即時到帳只有一種,就是是否已付款!最多還有個退款的功能.一般都沒用到.PHP編程
??? 通過之前做項目:配資平臺,有個預付費的功能,用到了支付寶的雙功能收款,其實就是提供兩種付款方式,即時到帳和擔保交易.一般買家謹慎會選擇擔保.PHP編程
??? 下面說下具體的集成過程,第一:下載對應的集成接口包,比如即時到帳就下載即時到帳,擔保下載擔保,非常不建議將即時到帳修改成擔?;蛘叻粗?案例中我下載的 雙功能接口文件,utf8-php接口.PHP編程
??? 下載來的文件都大同小異,即時到帳和擔保的文件也相差不大,反正可以肯定的說,只要配置一次擔保支付寶接口,就能配置即時到帳.PHP編程
??? 我們需要修改的文件有如下:alipay.config.php[配置文件,只是用于修改配置接口開發者id和key]PHP編程
??? alipayapi.php[主調文件,將需要發送的post數據交給該文件,然后負責跳轉到支付頁面]
??? index.php[demo演示頁面,可以不做修改,但是其中傳遞的參數名陳需要看懂]
??? notify_url.php 返回數據頁面,在其中將返回交易的狀態,更具狀態我們可以更改數據庫訂單信息,該文件是通過post方式接受.
??? return_url.php 返回數據頁面,在其中將返回交易的狀態,更具狀態我們可以更改數據庫訂單信息,該文件是通過GET方式.PHP編程
??? 具體過程:PHP編程
??? 第一步,修改配置信息:PHP編程
代碼如下:
?? $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文件,根據提示修改,做對因的處理.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文件中的狀態要多一些.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,可以同時記錄在自己的訂單中.PHP編程
以上所述就是本文關于支付寶接口的全部內容了,希望能對大家熟練掌握支付寶接口支付的二次開發能夠有所贊助.PHP編程
維易PHP培訓學院每天發布《PHP實例:支付寶接口開發集成支付環境小結》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/11701.html