最近入坑了yii2 感覺是個很強大的框架。使用yii做支付寶的移動支付的時候出了點問題,記錄下來避免以后忘記了。
使用的是支付寶立即到賬的功能,網上很多集成好的接口我就不重復了,找不到的話github上有。說一下下載下來后需要修改的地方。
下載下來的應該是這些文件。我這里使用的是yii2的基礎框架,首先把解壓好的文件夾放在網站根目錄下。
首先打開alipaypay.php
這兩個地方要對應的修改成app\yii2_alipay 和 app\yii2_alipay\Alipaysubmit
也就是把frontend\替換成app
其余文件也是這樣就不贅述了
修改后市這樣的
此外要注意AlipayCore.php中
這里也要修改成
這里就是我之前一直沒有成功的原因。
之后就只用修改alipaypay.php即可
這里是你自己在支付寶開放平台申請的,填上即可。
這里是你對應的同步回掉和異步回掉地址,注意一定是要公網可以訪問,不能有參數和localhost,因此建議把路徑替換成index.php/order/return這樣
網上我學習的教程帶有?r=這樣的形式,我沒驗證過是否可以
查看支付寶文檔可以知道,異步回掉是保證成功的,因此可以單獨只寫異步回掉,也可以把異步回掉同步回掉均寫一遍。
這個函數是傳遞一些支付寶必要的參數,具體可以查看文檔,這里我也不贅述了,各位可以根據自己的需要修改。以上是支付寶類需要修改的地方,各位可以根據自己的實際情況進行修改。
接下來就是寫自己的action方法了
首先,支付寶的異步回掉需要關掉csrf,如果有進行了登錄驗證最好關掉登錄驗證
上圖就是關閉csrf的方法
關閉登錄驗證可以直接使用access
$total = 0.01;//round($total,2);
$order_id = 123123123;//訂單號,必須唯一
$gift_name = "租賃書籍"; $money = $total; $body = "租賃書籍"; $show_url = 'lcoalhost'; $alipay = new AlipayPay(); $html = $alipay->requestPay($order_id, $gift_name, $money, $body, $show_url);
echo $html;
注意訂單號必須唯一,不然后一個訂單會直接顯示已經付過款,其余參數可以查詢手冊
異步回掉
$alipay = new AlipayPay();$verify_result = $alipay->verifyNotify(); if ($verify_result) {//驗證成功 //商戶訂單號 $out_trade_no = Yii::$app->request->post('out_trade_no'); //交易狀態 $trade_status = Yii::$app->request->post('trade_status'); if($trade_status == 'TRADE_FINISHED'||$trade_status == 'TRADE_SUCCESS') { //自己的處理代碼 } //返回狀態 return "success"; } else { //驗證失敗 return "fail"; }
同步回掉
//判斷結果,跳轉到不同頁面 $alipay = new AlipayPay();$result = $alipay->verifyReturn(); if ($result) { $success = $_GET['trade_status']; $out_trade_no = $_GET['out_trade_no']; if ($success == 'TRADE_SUCCESS'||$success == 'TRADE_FINISHED') { //自己的代碼 } else { echo 'no'; } } else { echo 'fail'; }
這個回掉挺簡單的,主要是用來處理付款成功后的一些,例如修改付款狀態啊什么的,主要是異步起作用,同步因為各種原因可能會出問題。
以上應該是全部的要點了