tp支付寶接口

1、下載支付寶接口包

下載地址:
https://doc.open.alipay.com/doc2/detail?treeId=62&articleId=103566&docType=1
具體如何下載,我就不在羅嗦了~~html

解壓後放到框架的Vendor目錄中便可~api

2、從新整理接口包文件,這一步應該算是比較關鍵的(我的認爲)

下載下來的接口包文件有不少語言的源碼,

咱們選擇 create_direct_pay_by_user-PHP-UTF-8 這個名稱的接口文件。裏面包括以下文件:

images文件裏是支付寶相關的一些標誌的圖片,咱們暫無論他,lib文件很重要,是整個接口的核心類文件;
alipay.config.php是相關參數的配置文件
alipayapi.php 是支付寶接口入口文件
notify_url.php 是服務器異步通知頁面文件;
return_url.php 是頁面跳轉同步通知文件;數組

在ThinkPHP的框架文件下,找到Extend 進入,再進入Vendor,在Vendor文件夾下,新建文件夾Alipay,把支付寶做爲第三方類庫引入。而後,複製支付寶接口文件包中lib文件裏的全部文件。一共4個文件,以下:

如今對以上文件進行重命名,
alipay_core.function.php重命名爲:Corefunction.php;
alipay_md5.function.php重命名爲:Md5function.php;
alipay_notify.class.php重命名爲:Notify.php;
alipay_submit.class.php重命名爲:Submit.php;服務器

而後,打開Submit.php文件,把如下代碼去掉;框架

一樣,打開Notify.php文件,把如下兩段代碼去掉異步

 

 

爲何要去掉以上兩個文件中的這兩段代碼,由於在項目中調用接口文件的時候,我把全部4個核心文件都經過vendor來進行引入。因此,這再也不須要導入。函數

到此,支付寶接口包相關核心類庫的整理基本完成。如今開始在項目中調用;post

3、在項目中調用支付寶接口

調用分兩步:
一、在配置文件中Conf/Config.php文件中對支付寶相關參數進行配置:ui

二、新建一個PayAction控制器代碼以下:

三、這裏有幾個支付處理過程當中須要用到的函數,我把這些函數寫到了項目的Common/common.php中,這樣不用手動調用,便可直接使用這些函數,代碼以下:

 

4、總結幾點

一、接口包中lib文件中的文件複製到Vendor後,重命名爲TP規範的命名規則,爲的是調用方便,固然你要改爲其餘名稱也能夠;
二、把執行支付操做(doalipay),處理異步返回結果(notifyurl),處理跳轉返回結果(returnurl)三個支付接口的核心頁面寫到一個PayAction控制器中。
三、提交支付的頁面中,能夠在提交以前先把一些參數要傳遞的內容先經過隱藏域的方法組合好,好比金額先計算好,訂單名稱,訂單描述等先用字符串組合好。而後提交表單,這樣,在doalipay方法中只要直接構造傳遞參數,直接進行提交就行過了。
四、支付返回後的處理由於要在異步和跳轉兩個方法中都要進行相應的判斷和處理,因此,把這些判斷和處理寫到一個自定義函數中,這樣只要調用函數便可,使得代碼更加清晰明瞭。
五、notify_url和return_url兩種模式的返回url必須使用http://xxxxxxx這樣的絕對路徑,由於裏是從支付寶平臺返回到你的項目頁面。不能使用相對路徑。

以上代碼在ThinkPHP3.0中正常使用!!

————————修正補充!!2013.08.13——————————
在第三部分中Orderlist數據表結構中,我有一個字段是OrdCode,這個字段是我係統中用來發送短信給客戶的消費密碼,也就是客戶憑手機短信來消費時就要驗證這個字段。
其實,你們在作系統的時候,能夠把這個字段忽略,能夠不用他。代碼最後部分中,有一個獲取一個隨機且惟一的訂單號的函數 getordcode(),這裏我其實寫錯了,不是獲取訂單號,是ordcode,也就是消費密碼,這個函數也不須要。系統中的訂單號(ordid字段),我用的是時間戳。
在此修正!

——————–解決簽名錯誤問題 修正 13-08-16————————
有人說在在調試時,簽名出現沒法經過的問題,產生問題的緣由是在返回的URL地址中返回的參數中,可能存在__URL__這樣的字符串。致使沒法正確過濾參數。

解決辦法:
方法1:
在向支付寶提交須要的參數時,不要使用__URL__,__PUBLIC__等TP中的模版替換變量,若是TP對這些變量解析不成功,會直接傳遞過去,因此,在這些地方直接使用原始的URL地址。

方法2:
在接口的Core文件中,加入改造後的過濾函數,以下:

相關文章
相關標籤/搜索