首先,下載支付寶提供的demo。
下載demo,目錄結構如下:

把 alipay.trade.wap.pay-PHP-UTF-8文件夾拿出來,放到tp5根目錄 vendor 文件夾下,重命名為alipay:

配置config.php內的內容
<?php $config = array ( //應用ID,您的APPID。 'app_id' => "2016102212345813", //商戶私鑰 'merchant_private_key' => "MIIEvQIBADAN HQL9bkGvrVR/R2QlXFMSBD+HTtH2qjY=", //異步通知地址 'notify_url' => "http://域名/Pay/Alipay/notifyUrl", //同步跳轉 'return_url' => "http://域名/Pay/Alipay/returnUrl", //編碼格式 'charset' => "UTF-8", //簽名方式 'sign_type'=>"RSA2", //支付寶網關 //'gatewayUrl' => "https://openapi.alipay.com/gateway.do",//正式支付地址 'gatewayUrl' => "https://openapi.alipaydev.com/gateway.do",//沙盒支付地址 //支付寶公鑰,查看地址:https://openhome.alipay.com/platform/keyManage.htm 對應APPID下的支付寶公鑰。 'alipay_public_key' => "MIIBIj gD3ogRaVNGHdQIDAQAB", );
添加Alipay.php控制器

<?php
namespace app\index\controller;
use think\Controller;
use think\Request;
use think\Db;
class Alipay extends Controller
{
public function index(Request $request){
header("Content-type:text/html;charset=utf-8");
require_once VENDOR_PATH.'/alipay/config.php';
require_once VENDOR_PATH.'/alipay/pagepay/service/AlipayTradeService.php';
require_once VENDOR_PATH.'/alipay/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';
$param = $request->param();
//商戶訂單號,商戶網站訂單系統中唯一訂單號,必填
$out_trade_no = trim($param['out_trade_no']);
//訂單名稱,必填
$subject = trim($param['subject']);
//付款金額,必填
$total_amount = trim($param['total_amount']);
//商品描述,可空
$body = trim($param['body']);
//公用回傳參數
// $passback_params = http_build_query($param['purchaseInfo']);
//$passback_params = urlencode($param['buyer']);
//構造參數
$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']);
//輸出表單
var_dump($response);
}
/**
* 異步
* @param Request $request
* @throws \Exception
*/
public function notifyUrl(Request $request){
$param = $request->param();
require_once VENDOR_PATH.'/alipay/config.php';
require_once VENDOR_PATH.'/alipay/pagepay/service/AlipayTradeService.php';
require_once VENDOR_PATH.'/alipay/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';
$alipaySevice = new \AlipayTradeService($config);
$alipaySevice->writeLog(var_export($param,true));
$result = $alipaySevice->check($param);
if($result) {
//驗證成功
$out_trade_no = urldecode($param['out_trade_no']);
if($param['trade_status'] == 'TRADE_SUCCESS') {
//判斷該筆訂單是否在商戶網站中已經做過處理
//如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程序
//請務必判斷請求時的total_amount與通知時獲取的total_fee為一致的
//如果有做過處理,不執行商戶的業務程序
//注意:
//付款完成后,支付寶系統發送該交易狀態通知
}
echo "success";
}else {
//驗證失敗
echo "fail";
}
}
/**
* 同步
* @param Request $request
* @throws \Exception
*/
public function returnUrl(Request $request){
$param = $request->param();
require_once VENDOR_PATH.'/alipay/config.php';
require_once VENDOR_PATH.'/alipay/pagepay/service/AlipayTradeService.php';
require_once VENDOR_PATH.'/alipay/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';
$alipaySevice = new \AlipayTradeService($config);
$result = $alipaySevice->check($param);
/* 實際驗證過程建議商戶添加以下校驗。
1、商戶需要驗證該通知數據中的out_trade_no是否為商戶系統中創建的訂單號,
2、判斷total_amount是否確實為該訂單的實際金額(即商戶訂單創建時的金額),
3、校驗通知中的seller_id(或者seller_email) 是否為out_trade_no這筆單據的對應的操作方(有的時候,一個商戶可能有多個seller_id/seller_email)
4、驗證app_id是否為該商戶本身。
*/
if($result) {
//驗證成功
echo "驗證成功";
}
else {
//驗證失敗
echo "驗證失敗";
}
}
}
?>
添加自己處理數據的方法
web頁面
<!DOCTYPE html>
<html>
<head>
<title>alipay_test</title>
</head>
<body>
<form name=alipayment action="{:url('Alipay/index')}" method="post" target="_blank">
商戶訂單號:<input type="text" name="out_trade_no" value="{$out_trade_no}" /><br/>
訂單名稱:<input type="text" name="subject" value="{$subject}"/><br/>
付款金額:<input type="text" name="total_amount" value="{$body}" /><br/>
商品描述:<input type="text" name="body" value="{$body}"/><br/>
<button type="submit">付 款</button>
</form>
</body>
</html>
效果:

