PHP支付寶支付開發流程
2.1使用者向商城網站發起確認訂單的請求
2.2商城網站接收到請求儲存訂單資料到資料庫或其他儲存介質
2.3返回訂單確認頁面,頁面上應該顯示訂單金額等資訊
2.4使用者確認支付,發起支付請求。注:支付請求是傳送到支付閘道器(比如支付寶、網銀線上)而不是傳送到商城網站。
2.5顯示支付頁面
2.6使用者填寫認證資訊(賬號密碼等)提交
2.7這裡有兩個步驟一個是扣款成功後頁面跳轉到支付結果頁面(展示給使用者),另一個是支付通知,這兩步沒有先後順序可能同時執行,商城網站接收到支付通知後根據驗證規則驗證資訊的有效性,並作出相應的更改操作(例:有效則更改訂單為已付款狀態,無效則記錄非法請求資訊)。
以支付寶為例:如果實現在網站中整合支付寶介面,首先要有一個支付寶賬號,接下來向支付寶申請線上支付業務,簽署協議。協議生效後有支付寶一方會給網站方一個合作伙伴ID,和安全校驗碼,有了這兩樣東西就可以按照支付寶介面文件開發支付寶介面了,在上圖的幾個步驟中只有4和7兩個步驟在商城與支付閘道器之間有資訊互動。在步驟4中指將資料傳送到支付閘道器(支付寶),在步驟7中是的通知驗證部分,驗證閘道器請求網站某地址,網站按驗證規則對資訊進行驗證記錄並作出響應,我們幾乎在開發任何支付介面時,重點是這兩部分的開發,明白支付介面原理,開發支付介面就不難了。
選擇“我要自助整合”接下來會看到的連結,點選下載技術文件。
在下載後的檔案中有標準支付寶交易服務介面、商家工具、介面整合指南等接文件,另外還有幾種語言寫的demo.我們可以根據介面文件按規則全新開發,也可以再demo基礎上修改整合到網站,需要注意的是開發支付介面需要在公網(伺服器必須可以通過外網訪問)才可以完成整個除錯過程,如果伺服器在外網訪問不到,則無法接收到支付通知。
create_direct_pay_by_user-php-UTF-8
│
├lib┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈類資料夾
│ │
│ ├alipay_core.function.php ┈┈┈┈┈┈支付寶介面公用函式檔案
│ │
│ ├alipay_notify.class.php┈┈┈┈┈┈┈支付寶通知處理類檔案
│ │
│ ├alipay_submit.class.php┈┈┈┈┈┈┈支付寶各介面請求提交類檔案
│ │
│ └alipay_md5.function.php┈┈┈┈┈┈┈支付寶介面MD5函式檔案
│
├log.txt┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈日誌檔案
│
├alipay.config.php┈┈┈┈┈┈┈┈┈┈┈┈基礎配置類檔案
│
├alipayapi.php┈┈┈┈┈┈┈┈┈┈┈┈┈┈支付寶介面入口檔案
│
├notify_url.php ┈┈┈┈┈┈┈┈┈┈┈┈┈伺服器非同步通知頁面檔案
│
├return_url.php ┈┈┈┈┈┈┈┈┈┈┈┈┈頁面跳轉同步通知檔案
│
├cacert.pem ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈用於CURL中校驗SSL的CA證照檔案
│
└readme.txt ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈使用說明文字
這裡已經下載好了(見資源目錄pay資料夾),為了便於除錯增加修改了若干檔案,並增加了一張資料表儲存訂單資訊,我們修改一下配置檔案完成一個測試過程。
alipay_config.php是基礎資訊配置檔案,我們需要將在支付寶後臺獲取的PID與Key寫入到配置檔案中。
配置項:
其中方框內的資料是我們需要重點修改的。支付通知地址與返回地址的區別,前面已經提到,在步驟7中有兩項:支付結果頁面與支付通知資訊,支付結果頁面是使用者支付完成後會自動跳轉到這個地址這裡是返回地址($return_url)。
//↓↓↓↓↓↓↓↓↓↓請在這裡配置您的基本資訊↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
//合作身份者ID,簽約賬號,以2088開頭由16位純數字組成的字串,檢視地址:https://b.alipay.com/order/pidAndKey.htm
$alipay_config['partner'] = '****************';
//收款支付寶賬號,以2088開頭由16位純數字組成的字串,一般情況下收款賬號就是簽約賬號
$alipay_config['seller_id'] = $alipay_config['partner'];
// MD5金鑰,安全檢驗碼,由數字和字母組成的32位字串,檢視地址:https://b.alipay.com/order/pidAndKey.htm
$alipay_config['key'] = '****************************';
// 伺服器非同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義引數,必須外網可以正常訪問
$alipay_config['notify_url'] = "http://".$host."/paycallback/notify";
// 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義引數,必須外網可以正常訪問
$alipay_config['return_url'] = "http://".$host."/paycallback/return";
$alipay_config['exter_invoke_ip'] = "182.92.27.46";
資料庫中增加了一條“訂單資訊”.
如果點選“確認支付”按鈕或者確認支付 連結將會跳轉到支付寶頁面,點選按鈕時通過表單POST方式將資訊提交到支付閘道器,由於支付請求資料無需讓使用者看到,這裡都寫在隱藏域中了。確認支付 連結是通過URL傳參,因為支付寶介面允許以POST或者GET方式提交,所以兩種方式都可以。把引數提交給支付閘道器後,頁面跳轉到到支付頁面。我們看到如下圖所示:
我們看到支付寶為我們提供了兩種支付方式,一種是通過支付寶賬戶支付,另一種是通過銀行卡支付。例如選擇使用銀行卡支付,填寫郵箱或手機號跳轉到如下頁面:
注:測試時如果沒有在外網測試(即支付通知地址無法在外網訪問)則支付通知無法被請求到,無法自動完成訂單狀態的修改。
3.2支付寶介面規範與程式碼分析
支付寶介面規範可參考/pay/doc/標準支付寶交易服務介面(專用於防釣魚網站)。Pdf,裡面已經有了比較詳細的說明。
3.2.1如何建立支付請求
在前面的測試中我們點選了“確認支付”將資訊將資訊提交到了支付寶的支付閘道器,我們可以思考一下應該傳送哪些引數給支付閘道器。關於請求引數列表可以參考標準支付寶交易服務介面(專用於防釣魚網站)。Pdf中的3.2.2.需要注意的是並不是我們把這些引數原封不動的提交到支付寶就可以了,為了保證資料安全支付寶目前使用的是MD5簽名防止資料篡改機制。
在提交資料前需要將需要提交的資料以一定規則(見介面文件)組裝成字串,加上安全校驗碼(Key)組成一個新字串,通過MD5生成一個32位元組的簽名,我們提交支付請求時還需要把這個簽名也提交過去。看一下表單原始碼
支付寶接收到引數後會進行驗證請求引數的合法性,驗證無誤後將顯示支付頁面,否則提示錯誤。
3.2.2 如何驗證支付通知
在使用者支付完成後,支付寶會請求網站支付通知地址(這個地址應在建立支付請求時作為引數傳遞過去)。返回引數列表參見標準支付寶交易服務介面(專用於防釣魚網站)。Pdf3.3.1.支付寶的返回資料中同樣有一個簽名串(採取和支付請求同樣的簽名方式),在支付通知檔案中首先要對資料進行簽名驗證。除了驗證簽名,還需要將引數中的notify_id提交到支付寶的驗證閘道器支付寶系統這個通知的真實性,通知驗證。支付寶系統判斷通知是否是自己傳送,如果是以字串格式返回 true,否則返回false,我們通過驗證伺服器返回的資料驗證請求的真實性,如果都驗證通過則可以進行更改訂單資料、給使用者傳送郵件通知等操作。關於驗證簽名可以看一下通知檔案中的原始碼。帶demo中將引數中的notify_id提交到支付寶是通過POST方式提交併取得返回資料,程式碼片段:
重點就是fsockopen函式,在傳送電子郵件時我們已經接觸過,通過此函式開啟套接字連線,類似於以前學過的fopen函式返回的是一個檔案控制程式碼,之後可以使用檔案函式( fgets()、fgetss()、fputs()、fclose() feof()等)對其進行操作,程式碼中使用了fputs()(同fwrite())函式,寫入資料來模擬表單以POST方式提交資料,最後通過fgets()函式獲取返回的資料儲存到陣列中,最後進行驗證,具體參照原始碼。
相關文章
- Android 支付寶支付開發流程Android
- IDEA支付寶小程式開發流程——支付Idea
- iOS 最新版本支付寶支付開發流程iOS
- 微信和支付寶的支付流程,以及開發中遇到的坑?
- 支付寶介面開發
- IDEA支付寶小程式開發流程——專案搭建Idea
- IDEA支付寶小程式開發流程——授權登入Idea
- PHP-Laravel支付寶支付和微信支付PHPLaravel
- 支付開發填坑記之支付寶
- 支付寶線上支付介面開發教程與總結
- PHP微信支付開發PHP
- Stripe開發使用指南--國際支付(含支付寶)
- 玩轉 iOS 開發:整合 AliPay – 支付寶iOS
- 支付寶介面對接開發過程
- 支付寶小程式開發準備工作
- 玩轉 iOS 開發:整合 AliPay - 支付寶iOS
- Android 微信支付開發流程Android
- php 支付寶 SDK 單筆轉賬PHP
- 支付寶“手機網站支付”開發的相關文件和工具網站
- [後端開發]支付寶支付介面除錯 (Python v3.6)後端除錯Python
- 支付寶支付開發的防釣魚的時代已經到來
- Java 支付寶支付,退款,單筆轉賬到支付寶賬戶(支付寶訂單退款)Java
- 支付寶線上支付介面
- 淺談支付系統開發基本流程
- C# 專案中【支付寶】介面開發整合案例C#
- 一個PHP檔案搞定支付寶系列之電腦網站支付PHP網站
- 支付寶alipay移動支付
- Java接入支付寶支付教程Java
- Django呼叫支付寶支付介面Django
- vue-仿支付寶支付Vue
- 支付寶App支付全解析APP
- 支付寶開放平臺支付更新升級全解析
- 沙箱環境開發支付寶支付,收不到非同步通知(使用Ngrok內網穿透)非同步內網穿透
- 支付寶支付產品介面文件地址和支付寶代金券理解
- 支付寶的快捷支付實現“支付”了
- pc端實現支付寶支付
- iOS支付寶支付主要程式碼iOS
- Android整合支付寶支付功能Android