這篇文章跟大家分享的內容是PHP如何實現支付寶支付的流程介紹,有著一定的參考價值,有需要的朋友可以參考一下
1 、首先我們先談談第三方支付
所謂第三方支付就是和一些各大銀行簽約,並具備一定實力和信譽保障的第三方獨立機構提供的交易平台
目前市面上常見的有支付寶,財付通,網銀,易寶支付等,網站需要實現第三方支付首先應向第三方申請帳號並簽署協議,協議生效後第三方支付平台為其開通線上支付功能。
2、第三方支付的原則
#2.1使用者向商城網站發起確認訂單的請求
2.2商城網站接收到請求保存訂單資料到資料庫或其他儲存媒體
2.3返回訂單確認頁面,頁面上應該顯示訂單金額等資訊
2.4用戶確認支付,發起支付請求。註:支付請求是發送到支付網關(例如支付寶、網銀線上)而不是發送到商城網站。
2.5顯示付款頁面
# 2.6使用者填寫認證資訊(帳號密碼等)提交
# 2.7這裡有兩個步驟一個是扣款成功後頁面跳到支付結果頁面(展示給用戶),另一個是支付通知,這兩步沒有先後順序可能同時執行,商城網站接收到支付通知後根據驗證規則驗證資訊的有效性,並作出相應的更改操作(例:有效則更改訂單為已付款狀態,無效則記錄非法要求資訊)。
以支付寶為例:如果實現在網站中集成支付寶接口,首先要有一個支付寶帳號,接下來向支付寶申請在線支付業務,簽署協議。協議生效後有支付寶一方會給網站方一個合作夥伴ID,和安全校驗碼,有了這兩樣東西就可以按照支付寶接口文檔開發支付寶接口了,在上圖的幾個步驟中只有4和7兩個步驟在商城與支付網關之間有資訊互動。在步驟4中指將資料傳送至支付網關(支付寶),在步驟7中是的通知驗證部分,驗證網關請求網站某地址,網站按驗證規則對資訊進行驗證記錄並作出回應,我們幾乎在開發任何支付接口時,重點是這兩部分的開發,要明白支付接口原理,開發支付接口就不難了。
其實看圖來說,我們所做的很有限,基本上在1~3之間,產生訂單數據,然後會透過支付寶內部進行認證(當然省略了一些購物車、訂單的步驟),基本一個流程結束。
3、支付寶介面開發
#3.1介面簡介與測試
#就目前來講,支付寶提供了擔保交易,標準即時到賬,雙功能等幾種接口,只是在功能上有些差異,集成方式都是一樣,以標準及時到帳介面為例,在與支付寶簽署協議後,還需要幾個步驟才能完成整合。
選擇“我要自助整合”接下來會看到的鏈接,點擊下載技術文件。
在下載後的文件中有標準支付寶交易服務接口、商家工具、接口集成指南等接文檔,另外還有幾種語言寫的demo.我們可以根據接口文檔依規則全新開發,也可以再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┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈日誌檔##ob ┈# ┈┈┈┈┈┈┈基礎設定類別檔案
│
├alipayapi.php┈┈┈┈┈┈┈┈┈┈4 php ┈┈┈┈┈┈┈┈┈┈┈┈┈伺服器異步通知頁檔案
│
├return_url.php ┈┈*∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔∔ ## │
├cacert.pem ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈用於CURL# ┈┈┈┈┈┈┈┈┈┈┈┈使用說明文字
這裡已經下載好了(請參閱資源目錄pay檔案夾),為了便於調試增加修改了若干文件,並增加了一張數據表保存訂單信息,我們修改一下配置文件完成一個測試過程。
設定項目:
#
其中方框內的資料是我們需要重點修改的。支付通知地址與返回地址的區別,前面已經提到,在步驟7中有兩項:支付結果頁面與支付通知信息,支付結果頁面是用戶支付完成後會自動跳轉到這個地址這裡是返回地址( $return_url)。
$host = $_SERVER['HTTP_HOST']; //↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ //合作身份者ID,签约账号,以2088开头由16位纯数字组成的字符串,查看地址: $alipay_config['partner'] = '****************'; //收款支付宝账号,以2088开头由16位纯数字组成的字符串,一般情况下收款账号就是签约账号 $alipay_config['seller_id'] = $alipay_config['partner']; // MD5密钥,安全检验码,由数字和字母组成的32位字符串,查看地址: $alipay_config['key'] = '****************************'; // 服务器异步通知页面路径 需 $alipay_config['notify_url'] = " // 页面跳转同步通知页面路径 需 $alipay_config['return_url'] = "http://".$host."/paycallback/return"; // 客户端的IP地址 非局域网的外网IP地址,如:221.0.0.1 $alipay_config['exter_invoke_ip'] = "182.92.27.46";
如果點擊「確認支付」按鈕或確認支付連結將會跳到支付寶頁面,點擊按鈕時透過表單POST方式將資訊提交到支付網關,由於支付請求資料無需讓使用者看到,這裡都寫在隱藏域中了。確認支付 連結是透過URL傳參,因為支付寶介面允許以POST或GET方式提交,所以兩種方式都可以。把參數提交給支付網關後,頁面跳到付款頁面。我們看到如下圖所示:
我們開單支付寶幾乎支援所有的銀行卡支付,同時有信用卡和分行方式付款,選擇對應的銀行下一步按提示付款即可。付款完成後頁面會回到我們在設定檔中配置的$return_url位址,同時「訂單狀態」也會改變。
附註:測試時如果沒有在外網測試(即支付通知地址無法在外網存取)則支付通知無法被要求到,無法自動完成訂單狀態的修改。
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()函數取得傳回的資料儲存到數組中,最後進行驗證,具體參考原始碼。 ######
以上是PHP如何實現支付寶支付的流程介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!