日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

php yii2支付宝开发,yii2 支付宝支付教程 [ 2.0 版本 ]

發布時間:2023/11/27 生活经验 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php yii2支付宝开发,yii2 支付宝支付教程 [ 2.0 版本 ] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

yii2 支付寶支付教程?[ 2.0 版本 ]

支付寶支付流程個人理解大致就這三步

1.前臺頁面將支付信息數據通過立即支付按鈕 ajax提交到訂單處理層

2.在訂單處理層引用支付寶的接口 將支付數據寫入 支付寶會拋出一個from表單 action 到支付寶的付款頁面

3.用戶完成付款后會調用到同步回調和異步回調進行業務邏輯的處理

第一步 前端界面

/*支付按鈕點擊*/

$(‘body‘).on(‘click‘, ‘.payBtn‘, function () {

var money = $(‘.moneylist .current‘).attr(‘data-money‘);

var author_id = $(this).attr(‘data-author-id‘);

var itemid = $(this).attr(‘data-itemid‘);

var pay_type = $(‘.payType .current‘).attr(‘data-pay-type‘);

//pay_type 是區分微信和支付寶的 先無視掉pay_type ==1 的

if (pay_type == 1) {

//pay_type 是區分微信和支付寶的 先無視掉pay_type ==1 的

} else {

$.ajax({

type: "POST",

url: "/alipay/pay",//這個就是進入到第二步將數據帶入支付寶類庫進行處理

data: params,//數據

async: false,

success: function success(data) {

$(‘#payform‘).html(data);

}

});

}

});

第二步 將支付數據帶入到支付寶類庫中處理

先放一張數據庫字段的圖片

/**

* Created by PhpStorm.

* User: jayrui612

* Date: 2017/5/11

* Time: 14:27

*/

namespace frontend\controllers;

use frontend\components\payment\alipay\lib\AlipaySubmit;

use frontend\components\payment\alipay\lib\AlipayNotify;

use common\models\SanDbSponsor;

use yii\web\Controller;

use Yii;

class AlipayController extends Controller

{

public $enableCsrfValidation = false;

public function actionPay()

{

//商戶訂單號,商戶網站訂單系統中唯一訂單號,必填

$out_trade_no = $_POST[‘WIDout_trade_no‘];

//訂單名稱,必填

$subject = $_POST[‘WIDsubject‘];

//付款金額,必填

$total_fee = $_POST[‘WIDtotal_amount‘];

//商品描述,可空

$body = $_POST[‘WIDbody‘];

//創建支付訂單

$db = Yii::$app->db;

try {

$sponsorData = $_POST[‘sponsor_params‘];

$sponsorData[‘pay_type‘] = 2; // 支付方式。(1:微信 ,2:支付寶)

$sponsorData[‘pay_status‘] = 0; // 支付狀態。(0:未支付,1:支付成功,2:支付失敗)

$sponsorData[‘price‘] = $total_fee;

$sponsorData[‘out_trade_no‘] = $out_trade_no;

$sponsorData[‘create_time‘] = time();

$db->createCommand()->insert(‘supe_sponsor‘, $sponsorData)->execute();

} catch(\Exception $e) {

//throw $e;

return $this->redirect(Yii::$app->urlManager->createUrl(["news/detail", ‘itemid‘ => $_POST[‘sponsor_params‘][‘itemid‘]]))->send();

}

$parameter = array(

"service" => Yii::$app->params[‘pc_alipay‘][‘service‘],

"partner" => Yii::$app->params[‘pc_alipay‘][‘partner‘],

"seller_id" => Yii::$app->params[‘pc_alipay‘][‘seller_id‘],

"payment_type"=> Yii::$app->params[‘pc_alipay‘][‘payment_type‘],

"notify_url"=> Yii::$app->params[‘pc_alipay‘][‘notify_url‘],

"return_url"=> Yii::$app->params[‘pc_alipay‘][‘return_url‘],

"anti_phishing_key"=>Yii::$app->params[‘pc_alipay‘][‘anti_phishing_key‘],

"exter_invoke_ip"=>Yii::$app->params[‘pc_alipay‘][‘exter_invoke_ip‘],

"out_trade_no"=> $out_trade_no,

"subject"=> $subject,

"total_fee"=> $total_fee,

"body"=> $body,

"_input_charset" => trim(strtolower(Yii::$app->params[‘pc_alipay‘][‘input_charset‘]))

);

//建立請求

$alipaySubmit = new AlipaySubmit(Yii::$app->params[‘pc_alipay‘]);

$html_text = $alipaySubmit->buildRequestForm($parameter,"get", "確認");

echo $html_text;

}

第三步 用戶付款 同步回調和異步回調

這里做下說明 支付付款頁面 用戶付款后會自動調用 同步回調actionReturn_sync_ali 和異步回調actionReturn_async_ali

同步回調是做頁面跳轉之類的事情 異步回調是主要的 做訂單狀態的邏輯操作

下面的方法也是 在class AlipayController extends Controller下面

/**

* 支付寶同步回調通知

*/

public function actionReturn_sync_ali()

{

$alipayNotify = new AlipayNotify(Yii::$app->params[‘pc_alipay‘]);

$verify_result = $alipayNotify->verifyReturn();

if($verify_result) {//驗證成功

//商戶訂單號

$out_trade_no = htmlspecialchars($_GET[‘out_trade_no‘]);

//收款方id

$seller_id = htmlspecialchars($_GET[‘seller_id‘]);

//支付寶交易號

$trade_no = $_GET[‘trade_no‘];

//交易狀態

$trade_status = $_GET[‘trade_status‘];

if($trade_status == ‘TRADE_FINISHED‘ || $trade_status == ‘TRADE_SUCCESS‘) {

return $this->redirect(Yii::$app->urlManager->createUrl(["news/detail"]))->send();

} else {

echo ‘‘;

}

}

else {

echo "驗證失敗";

}

}

/**

* 支付寶異步回調地址

*/

public function actionReturn_async_ali()

{

$alipayNotify = new AlipayNotify(Yii::$app->params[‘pc_alipay‘]);

$verify_result = $alipayNotify->verifyNotify();

if($verify_result) {//驗證成功

// 本站訂單號

$out_trade_no = $_POST[‘out_trade_no‘];

// 支付寶交易號

$trade_no = $_POST[‘trade_no‘];

// 交易狀態

$trade_status = $_POST[‘trade_status‘];

// 訂單金額

$total_amount = $_POST[‘total_fee‘];

// 實收金額

$receipt_amount = $_POST[‘price‘];

// 回調通知的發送時間

$notify_time = $_POST[‘notify_time‘];

if ($_POST[‘trade_status‘] == ‘TRADE_SUCCESS‘) {

//判斷該筆訂單是否在商戶網站中已經做過處理

//如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,并執行商戶的業務程序

//請務必判斷請求時的total_amount與通知時獲取的total_fee為一致的

//如果有做過處理,不執行商戶的業務程序

//注意:

//付款完成后,支付寶系統發送該交易狀態通知

if ($_POST[‘seller_id‘] == Yii::$app->params[‘pc_alipay‘][‘seller_id‘]

&& $receipt_amount != 0 && ($total_amount == $receipt_amount))

{

$hasRecord = SanDbSponsor::find()

->where([‘out_trade_no‘ => $out_trade_no])

->one();

// update

if ($hasRecord && $hasRecord->pay_status != 1)

{

$hasRecord->pay_status = 1; // 支付狀態。(1:支付成功 )

$hasRecord->create_time = strtotime($notify_time);

$hasRecord->save();

}

}

}

//——請根據您的業務邏輯來編寫程序(以上代碼僅作參考)——

echo "success";//請不要修改或刪除

} else {

//驗證失敗

echo "fail";//請不要修改或刪除

}

}

大致就是這樣了 還有配置文件和支付寶的類庫文件沒有貼上

return [

// PC 端 贊賞支付寶配置

‘pc_alipay‘ => [

// 簽約賬號

‘partner‘ => ‘111111‘,

// 收款支付寶賬號,一般情況下收款賬號就是簽約賬號

‘seller_id‘ => ‘111111‘,

//商戶的私鑰,

‘private_key‘ => ‘xxxxxxxx‘,

//支付寶的公鑰

‘alipay_public_key‘ => ‘yyyyyyyyyyyyyy‘,

// 異步通知頁面路徑

‘notify_url‘ => ‘http://www.jay.com/alipay/return_async_ali.php‘,

// 頁面跳轉同步通知頁面路徑

‘return_url‘ => "http://www.jay.com/alipay/return_sync_ali.php",

//簽名方式

‘sign_type‘ => strtoupper(‘RSA‘),

//字符編碼格式 目前支持 gbk 或 utf-8

‘input_charset‘ => strtolower(‘utf-8‘),

// ca證書路徑地址,用于curl中ssl校驗

// 請保證cacert.pem文件在當前文件夾目錄中

‘cacert‘ => getcwd().‘\\cacert.pem‘,

// 訪問模式

‘transport‘ => ‘http‘,

// 支付類型 ,無需修改

‘payment_type‘ => ‘1‘,

// 產品類型,無需修改

‘service‘ => "create_direct_pay_by_user",

// 以下防釣魚信息,如果沒開通防釣魚功能,為空即可

‘anti_phishing_key‘ => ‘‘,

‘exter_invoke_ip‘ => ‘‘

],

];

類庫文件的截圖

文章轉自他人,文章寫的很清晰,只供本人學習之用

總結

以上是生活随笔為你收集整理的php yii2支付宝开发,yii2 支付宝支付教程 [ 2.0 版本 ]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。