溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php如何實(shí)現(xiàn)支付寶在線支付接口

發(fā)布時(shí)間:2021-09-01 09:41:19 來(lái)源:億速云 閱讀:181 作者:小新 欄目:開(kāi)發(fā)技術(shù)

小編給大家分享一下php如何實(shí)現(xiàn)支付寶在線支付接口,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1.什么是第三方支付

  所謂第三方支付,就是一些和各大銀行簽約、并具備一定實(shí)力和信譽(yù)保障的第三方獨(dú)立機(jī)構(gòu)提供的交易支持平臺(tái)。在通過(guò)第三方支付平臺(tái)的交易中,買方選購(gòu)商品后,使用第三方平臺(tái)提供的賬戶進(jìn)行貨款支付,由第三方通知賣家貨款到達(dá)。

  目前提供第三方支付的機(jī)構(gòu)很多,常見(jiàn)的有支付寶、財(cái)付通、快錢、網(wǎng)銀在線、易寶支付、云網(wǎng)等各大支付平臺(tái)。網(wǎng)站如果需要實(shí)現(xiàn)第三方支付首先應(yīng)該向第三方支付平臺(tái)申請(qǐng)一個(gè)賬號(hào)并簽署協(xié)議,協(xié)議生效后第三方支付平臺(tái)將為其開(kāi)通在線支付功能,通過(guò)程序?qū)⒔涌诩傻骄W(wǎng)站中。

  為什么要使用第三方支付?因?yàn)榈谌街Ц镀脚_(tái)已經(jīng)與各大銀行進(jìn)行簽約,網(wǎng)站主只需要在此平臺(tái)申請(qǐng)一個(gè)賬號(hào)即可支持幾乎所有的種類的銀行卡信用卡的交易。

2.第三方支付原理

php如何實(shí)現(xiàn)支付寶在線支付接口

以上簡(jiǎn)要說(shuō)明了支付過(guò)程,當(dāng)然其中省略了一些步驟(比如購(gòu)物車,訂單等),我們重點(diǎn)來(lái)看支付流程。

  2.1用戶向商城網(wǎng)站發(fā)起確認(rèn)訂單的請(qǐng)求

  2.2商城網(wǎng)站接收到請(qǐng)求保存訂單數(shù)據(jù)到數(shù)據(jù)庫(kù)或其他存儲(chǔ)介質(zhì)

  2.3返回訂單確認(rèn)頁(yè)面,頁(yè)面上應(yīng)該顯示訂單金額等信息

  2.4用戶確認(rèn)支付,發(fā)起支付請(qǐng)求。注:支付請(qǐng)求是發(fā)送到支付網(wǎng)關(guān)(比如支付寶、網(wǎng)銀在線)而不是發(fā)送到商城網(wǎng)站。

  2.5顯示支付頁(yè)面

  2.6用戶填寫(xiě)認(rèn)證信息(賬號(hào)密碼等)提交

  2.7這里有兩個(gè)步驟一個(gè)是扣款成功后頁(yè)面跳轉(zhuǎn)到支付結(jié)果頁(yè)面(展示給用戶),另一個(gè)是支付通知,這兩步?jīng)]有先后順序可能同時(shí)執(zhí)行,商城網(wǎng)站接收到支付通知后根據(jù)驗(yàn)證規(guī)則驗(yàn)證信息的有效性,并作出相應(yīng)的更改操作(例:有效則更改訂單為已付款狀態(tài),無(wú)效則記錄非法請(qǐng)求信息)。

  以支付寶為例:如果實(shí)現(xiàn)在網(wǎng)站中集成支付寶接口,首先要有一個(gè)支付寶賬號(hào),接下來(lái)向支付寶申請(qǐng)?jiān)诰€支付業(yè)務(wù),簽署協(xié)議。協(xié)議生效后有支付寶一方會(huì)給網(wǎng)站方一個(gè)合作伙伴ID,和安全校驗(yàn)碼,有了這兩樣?xùn)|西就可以按照支付寶接口文檔開(kāi)發(fā)支付寶接口了,在上圖的幾個(gè)步驟中只有4和7兩個(gè)步驟在商城與支付網(wǎng)關(guān)之間有信息交互。在步驟4中指將數(shù)據(jù)發(fā)送到支付網(wǎng)關(guān)(支付寶),在步驟7中是的通知驗(yàn)證部分,驗(yàn)證網(wǎng)關(guān)請(qǐng)求網(wǎng)站某地址,網(wǎng)站按驗(yàn)證規(guī)則對(duì)信息進(jìn)行驗(yàn)證記錄并作出響應(yīng),我們幾乎在開(kāi)發(fā)任何支付接口時(shí),重點(diǎn)是這兩部分的開(kāi)發(fā),明白支付接口原理,開(kāi)發(fā)支付接口就不難了。

3.支付寶接口開(kāi)發(fā)

  3.1接口簡(jiǎn)介與測(cè)試

  支付寶目前提供了,擔(dān)保交易、標(biāo)準(zhǔn)即時(shí)到帳、雙功能等幾種接口,只是在功能上有些差異,網(wǎng)站集成方式是一樣的。以標(biāo)準(zhǔn)即時(shí)到帳接口為例,在與支付寶簽署協(xié)議后,還需要幾個(gè)步驟才能完成集成。

php如何實(shí)現(xiàn)支付寶在線支付接口

  選擇“我要自助集成”接下來(lái)會(huì)看到的鏈接,點(diǎn)擊下載技術(shù)文檔。

  在下載后的文件中有標(biāo)準(zhǔn)支付寶交易服務(wù)接口、商家工具、接口集成指南等接文檔,另外還有幾種語(yǔ)言寫(xiě)的demo.我們可以根據(jù)接口文檔按規(guī)則全新開(kāi)發(fā),也可以再demo基礎(chǔ)上修改集成到網(wǎng)站,需要注意的是開(kāi)發(fā)支付接口需要在公網(wǎng)(服務(wù)器必須可以通過(guò)外網(wǎng)訪問(wèn))才可以完成整個(gè)調(diào)試過(guò)程,如果服務(wù)器在外網(wǎng)訪問(wèn)不到,則無(wú)法接收到支付通知。

  看一下demo中每個(gè)文件的作用:

php如何實(shí)現(xiàn)支付寶在線支付接口

  這里已經(jīng)下載好了(見(jiàn)資源目錄pay文件夾),為了便于調(diào)試增加修改了若干文件,并增加了一張數(shù)據(jù)表保存訂單信息,我們修改一下配置文件完成一個(gè)測(cè)試過(guò)程。

  alipay_config.php是基礎(chǔ)信息配置文件,我們需要將在支付寶后臺(tái)獲取的PID與Key寫(xiě)入到配置文件中。

  配置項(xiàng):

php如何實(shí)現(xiàn)支付寶在線支付接口

  其中方框內(nèi)的數(shù)據(jù)是我們需要重點(diǎn)修改的。支付通知地址與返回地址的區(qū)別,前面已經(jīng)提到,在步驟7中有兩項(xiàng):支付結(jié)果頁(yè)面與支付通知信息,支付結(jié)果頁(yè)面是用戶支付完成后會(huì)自動(dòng)跳轉(zhuǎn)到這個(gè)地址這里是返回地址($return_url)。

php如何實(shí)現(xiàn)支付寶在線支付接口

  支付通知地址同樣是用戶支付完成后,支付寶會(huì)請(qǐng)求該地址($notify_url),但是支付通知是支付寶服務(wù)器直接請(qǐng)求,不會(huì)被用戶看到。這兩個(gè)地址必須是以http開(kāi)頭的完整路徑格式為了完成測(cè)試過(guò)程,這里已經(jīng)將/pay/alipay/notify_url.php改寫(xiě),將$notify_url設(shè)置為可訪問(wèn)到此文件的URL即可。這幾項(xiàng)配置好后再根據(jù)數(shù)據(jù)庫(kù)腳本(pay/orders.sql)創(chuàng)建一張數(shù)據(jù)表。并根據(jù)數(shù)據(jù)庫(kù)的配置信息修改mysql_config.php.通過(guò)對(duì)支付寶提供的demo做簡(jiǎn)單修改就可以完成創(chuàng)建支付請(qǐng)求(步驟4)了,這里更改了支付首頁(yè)等頁(yè)面(見(jiàn)源碼包pay目錄)。我們先測(cè)試一下:

php如何實(shí)現(xiàn)支付寶在線支付接口

  數(shù)據(jù)庫(kù)中增加了一條“訂單信息”.

  如果點(diǎn)擊“確認(rèn)支付”按鈕或者確認(rèn)支付 鏈接將會(huì)跳轉(zhuǎn)到支付寶頁(yè)面,點(diǎn)擊按鈕時(shí)通過(guò)表單POST方式將信息提交到支付網(wǎng)關(guān),由于支付請(qǐng)求數(shù)據(jù)無(wú)需讓用戶看到,這里都寫(xiě)在隱藏域中了。確認(rèn)支付 鏈接是通過(guò)URL傳參,因?yàn)橹Ц秾毥涌谠试S以POST或者GET方式提交,所以兩種方式都可以。把參數(shù)提交給支付網(wǎng)關(guān)后,頁(yè)面跳轉(zhuǎn)到到支付頁(yè)面。我們看到如下圖所示:

php如何實(shí)現(xiàn)支付寶在線支付接口

  我們看到支付寶為我們提供了兩種支付方式,一種是通過(guò)支付寶賬戶支付,另一種是通過(guò)銀行卡支付。例如選擇使用銀行卡支付,填寫(xiě)郵箱或手機(jī)號(hào)跳轉(zhuǎn)到如下頁(yè)面:

php如何實(shí)現(xiàn)支付寶在線支付接口

  我們開(kāi)單支付寶幾乎支持所有的銀行卡支付,同時(shí)有信用卡和網(wǎng)點(diǎn)方式付款,選擇對(duì)應(yīng)的銀行下一步按提示付款即可。付款完成后頁(yè)面會(huì)返回到我們?cè)谂渲梦募信渲玫?return_url地址,同時(shí)“訂單狀態(tài)”也會(huì)發(fā)生改變。

php如何實(shí)現(xiàn)支付寶在線支付接口

  注:測(cè)試時(shí)如果沒(méi)有在外網(wǎng)測(cè)試(即支付通知地址無(wú)法在外網(wǎng)訪問(wèn))則支付通知無(wú)法被請(qǐng)求到,無(wú)法自動(dòng)完成訂單狀態(tài)的修改。

  3.2支付寶接口規(guī)范與代碼分析

  支付寶接口規(guī)范可參考/pay/doc/標(biāo)準(zhǔn)支付寶交易服務(wù)接口(專用于防釣魚(yú)網(wǎng)站)。Pdf,里面已經(jīng)有了比較詳細(xì)的說(shuō)明。

  3.2.1如何創(chuàng)建支付請(qǐng)求

  在前面的測(cè)試中我們點(diǎn)擊了“確認(rèn)支付”將信息將信息提交到了支付寶的支付網(wǎng)關(guān),我們可以思考一下應(yīng)該發(fā)送哪些參數(shù)給支付網(wǎng)關(guān)。關(guān)于請(qǐng)求參數(shù)列表可以參考標(biāo)準(zhǔn)支付寶交易服務(wù)接口(專用于防釣魚(yú)網(wǎng)站)。Pdf中的3.2.2.需要注意的是并不是我們把這些參數(shù)原封不動(dòng)的提交到支付寶就可以了,為了保證數(shù)據(jù)安全支付寶目前使用的是MD5簽名防止數(shù)據(jù)篡改機(jī)制。

  在提交數(shù)據(jù)前需要將需要提交的數(shù)據(jù)以一定規(guī)則(見(jiàn)接口文檔)組裝成字符串,加上安全校驗(yàn)碼(Key)組成一個(gè)新字符串,通過(guò)MD5生成一個(gè)32字節(jié)的簽名,我們提交支付請(qǐng)求時(shí)還需要把這個(gè)簽名也提交過(guò)去??匆幌卤韱卧创a

php如何實(shí)現(xiàn)支付寶在線支付接口

  支付寶接收到參數(shù)后會(huì)進(jìn)行驗(yàn)證請(qǐng)求參數(shù)的合法性,驗(yàn)證無(wú)誤后將顯示支付頁(yè)面,否則提示錯(cuò)誤。

  3.2.2 如何驗(yàn)證支付通知

  在用戶支付完成后,支付寶會(huì)請(qǐng)求網(wǎng)站支付通知地址(這個(gè)地址應(yīng)在創(chuàng)建支付請(qǐng)求時(shí)作為參數(shù)傳遞過(guò)去)。返回參數(shù)列表參見(jiàn)標(biāo)準(zhǔn)支付寶交易服務(wù)接口(專用于防釣魚(yú)網(wǎng)站)。Pdf3.3.1.支付寶的返回?cái)?shù)據(jù)中同樣有一個(gè)簽名串(采取和支付請(qǐng)求同樣的簽名方式),在支付通知文件中首先要對(duì)數(shù)據(jù)進(jìn)行簽名驗(yàn)證。除了驗(yàn)證簽名,還需要將參數(shù)中的notify_id提交到支付寶的驗(yàn)證網(wǎng)關(guān)支付寶系統(tǒng)這個(gè)通知的真實(shí)性,通知驗(yàn)證。支付寶系統(tǒng)判斷通知是否是自己發(fā)送,如果是以字符串格式返回 true,否則返回false,我們通過(guò)驗(yàn)證服務(wù)器返回的數(shù)據(jù)驗(yàn)證請(qǐng)求的真實(shí)性,如果都驗(yàn)證通過(guò)則可以進(jìn)行更改訂單數(shù)據(jù)、給用戶發(fā)送郵件通知等操作。關(guān)于驗(yàn)證簽名可以看一下通知文件中的源碼。帶demo中將參數(shù)中的notify_id提交到支付寶是通過(guò)POST方式提交并取得返回?cái)?shù)據(jù),代碼片段:

php如何實(shí)現(xiàn)支付寶在線支付接口

  這里重點(diǎn)就是fsockopen函數(shù),在發(fā)送電子郵件時(shí)我們已經(jīng)接觸過(guò),通過(guò)此函數(shù)打開(kāi)套接字連接,類似于以前學(xué)過(guò)的fopen函數(shù)返回的是一個(gè)文件句柄,之后可以使用文件函數(shù)( fgets()、fgetss()、fputs()、fclose() feof()等)對(duì)其進(jìn)行操作,代碼中使用了fputs()(同fwrite())函數(shù),寫(xiě)入數(shù)據(jù)來(lái)模擬表單以POST方式提交數(shù)據(jù),最后通過(guò)fgets()函數(shù)獲取返回的數(shù)據(jù)保存到數(shù)組中,最后進(jìn)行驗(yàn)證,具體參照源碼。

以上是“php如何實(shí)現(xiàn)支付寶在線支付接口”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI