ThinkPHP5.0集成支付寶掃碼支付


首先,下載支付寶提供的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>
 

  效果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM