本文實例講述了php實現的支付寶網頁支付功能。分享給大家供大家參考,具體如下:
1.提交支付請求
require_once './payment/zfb/pagepay/service/AlipayTradeService.php';
require_once './payment/zfb/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';
$payInfo=Db::name('pay_type')->where(['pay_id'=>1])->find();
$zfb=json_decode($payInfo['pay_json'],true);
$config=[
'app_id'=>$zfb['app_id'],
'merchant_private_key'=>$zfb['merchant_private_key'],
'notify_url'=>config('z_notify_url'),
'return_url'=>config('z_return_url'),
'charset'=>config('charset'),
'sign_type'=>config('sign_type'),
'gatewayUrl'=>config('gatewayUrl'),
'alipay_public_key'=>$zfb['alipay_public_key']
];
//商品訂單號
$out_trade_no=$orderData['order_number'];
//訂單名稱,必填
$subject='充值訂單';
//付款金額
$total_amount=$money;
//商品描述
$body = $out_trade_no . '-' . $this->agent_id.'-'.$money;
$payRequestBuilder = new \AlipayTradePagePayContentBuilder();
$payRequestBuilder->setBody($body);
$payRequestBuilder->setSubject($subject);
$payRequestBuilder->setTotalAmount($total_amount);
$payRequestBuilder->setOutTradeNo($out_trade_no);
$aop = new \AlipayTradeService($config);
$response = $aop->pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']);
echo $response;
2.異步回調支付寶參數認證
$pay=Db::name('pay_type')->where(['pay_id'=>1])->find();
$zfb=json_decode($pay['pay_json'],true);
$config = [
'app_id' => $zfb['app_id'],
'merchant_private_key' => $zfb['merchant_private_key'],
'notify_url' => config('z_notify_url'),
'return_url' => config('z_return_url'),
'charset' => config('charset'),
'sign_type' => config('sign_type'),
'gatewayUrl' => config('gatewayUrl'),
'alipay_public_key' => $zfb['alipay_public_key']
];
$arr=$_POST;
$alipaySevice = new \AlipayTradeService($config);
$alipaySevice->writeLog(var_export($_POST,true));
$result = $alipaySevice->check($arr);
/* 實際驗證過程建議商戶添加以下校驗。
1、商戶需要驗證該通知數據中的out_trade_no是否為商戶系統中創建的訂單號,
2、判斷total_amount是否確實為該訂單的實際金額(即商戶訂單創建時的金額),
3、校驗通知中的seller_id(或者seller_email) 是否為out_trade_no這筆單據的對應的操作方(有的時候,一個商戶可能有多個seller_id/seller_email)
4、驗證app_id是否為該商戶本身。
*/
if($result) {//驗證成功
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//請在這里加上商戶的業務邏輯程序代
//——請根據您的業務邏輯來編寫程序(以下代碼僅作參考)——
//獲取支付寶的通知返回參數,可參考技術文檔中服務器異步通知參數列表
//商戶訂單號
$out_trade_no = $_POST['out_trade_no'];
//支付寶交易號
$trade_no = $_POST['trade_no'];
//交易狀態
$trade_status = $_POST['trade_status'];
//交易金額
$total_amount = $_POST['total_amount'];
if($_POST['trade_status'] == 'TRADE_FINISHED') {
//判斷該筆訂單是否在商戶網站中已經做過處理
//如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,并執行商戶的業務程序
//請務必判斷請求時的total_amount與通知時獲取的total_fee為一致的
//如果有做過處理,不執行商戶的業務程序
//注意:
//退款日期超過可退款期限后(如三個月可退款),支付寶系統發送該交易狀態通知
} else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
//判斷該筆訂單是否在商戶網站中已經做過處理
//如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,并執行商戶的業務程序
//請務必判斷請求時的total_amount與通知時獲取的total_fee為一致的
//如果有做過處理,不執行商戶的業務程序
//注意:
//付款完成后,支付寶系統發送該交易狀態通知
//此處應該更新一下訂單狀態,商戶自行增刪操作
這里寫你的邏輯程序
}
//——請根據您的業務邏輯來編寫程序(以上代碼僅作參考)——
echo 'success';
}else {
//驗證失敗
echo "fail";
}
}
3.同步回調頁面跳轉處理 同步只是做一個跳轉處理 不要寫任何數據處理
$pay=Db::name('pay_type')->where(['pay_id'=>1])->find();
$zfb=json_decode($pay['pay_json'],true);
$config = [
'app_id' => $zfb['app_id'],
'merchant_private_key' => $zfb['merchant_private_key'],
'notify_url' => config('z_notify_url'),
'return_url' => config('z_return_url'),
'charset' => config('charset'),
'sign_type' => config('sign_type'),
'gatewayUrl' => config('gatewayUrl'),
'alipay_public_key' => $zfb['alipay_public_key']
];
$arr=$_GET;
$alipaySevice = new \AlipayTradeService($config);
$result = $alipaySevice->check($arr);
/* 實際驗證過程建議商戶添加以下校驗。
1、商戶需要驗證該通知數據中的out_trade_no是否為商戶系統中創建的訂單號,
2、判斷total_amount是否確實為該訂單的實際金額(即商戶訂單創建時的金額),
3、校驗通知中的seller_id(或者seller_email) 是否為out_trade_no這筆單據的對應的操作方(有的時候,一個商戶可能有多個seller_id/seller_email)
4、驗證app_id是否為該商戶本身。
*/
if($result) {//驗證成功
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//請在這里加上商戶的業務邏輯程序代碼
//——請根據您的業務邏輯來編寫程序(以下代碼僅作參考)——
//獲取支付寶的通知返回參數,可參考技術文檔中頁面跳轉同步通知參數列表
//商戶訂單號
$out_trade_no = htmlspecialchars($_GET['out_trade_no']);
//支付寶交易號
$trade_no = htmlspecialchars($_GET['trade_no']);
$this->success("支付成功",url('Index/index'));
//——請根據您的業務邏輯來編寫程序(以上代碼僅作參考)——
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
else {
//驗證失敗
echo "驗證失敗";
}
更多關于thinkPHP相關內容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結》、《ThinkPHP常用方法總結》、《codeigniter入門教程》、《CI(CodeIgniter)框架進階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術總結》。
希望本文所述對大家基于ThinkPHP框架的PHP程序設計有所幫助。
您可能感興趣的文章:- PHP支付寶當面付2.0代碼
- php實現單筆轉賬到支付寶功能
- php app支付寶回調(異步通知)詳解
- php支付寶APP支付功能
- PHP實現QQ、微信和支付寶三合一收款碼實例代碼
- PHP實現支付寶即時到賬功能
- thinkPHP框架對接支付寶即時到賬接口回調操作示例
- PHP接入支付寶接口失效流程詳解