天天看點

tp簡單實作沙箱應用完成支付,正式環境,隻需要替換,配置資訊,即可以完成支付sdk結合項目路徑html控制器方法調用結果頁

tp5實作簡單的支付功能。

思路:

1、下載下傳支付寶提供的sdk,

2、打開支付寶開放平台,尋找沙箱應用,

3、将sdk放到自己的項目路徑中,

4、編寫簡單的一個支付調用

5、建立控制器方法,調用sdk方法

6、編寫同步跳轉位址,因為異步跳轉需要向我們的伺服器上發送通知,是以暫時就不做了。

sdk結合項目路徑

将sdk包放到public/plugins,目錄下,然後修改config.php的檔案,配置好環境。

tp簡單實作沙箱應用完成支付,正式環境,隻需要替換,配置資訊,即可以完成支付sdk結合項目路徑html控制器方法調用結果頁

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
    <title>支付寶支付</title>
</head>
<body>

<div style="margin:300px auto;width: 1200px;text-align: center;">
    <form action="{:url('home/order/pay')}" method="post" class="form">
        商品名稱:<input type="text" name="username" id="username">
        <br>
        <br>
        商品數量:<input type="number" name="number" id="number">
        <br>
        <br>
        商品價格:<input type="number" name="price" id="price">
        <br>
        <br>
        <button class="btn" type="button">購買</button>
    </form>
</div>
</body>
</html>
<script>
    $(function(){
        $(".btn").click(function(){
            var flag = true;
            if($("#username").val() == ""){
                alert("商品名稱不允許為空");
                flag = false;
            }
            if($("#number").val() == ""){
                alert("商品數量不允許為空");
                flag = false;
            }
            if($("#price").val() == ""){
                alert("商品價格不允許為空");
                flag = false;
            }
            if(flag){
                $(".form").submit();
            }
        })
    })
</script>
           

控制器方法

// 跳轉到支付接口
public function pay(Request $request)
    {
        $data = $request->param();

        $OrderNum = mt_rand(100000000000,999999999999);

        $price = $data['price'];
        $number = $data['number'];

        $sum = $price * $number;

        // 支付寶支付跳轉
        $html = "<form name='alipayment' id='alipay' action='/plugins/alipay/pagepay/pagepay.php' method='post' style='display:none'>
                    <!-- 訂單編号 -->
                    <input id='WIDout_trade_no' name='WIDout_trade_no' value='{$OrderNum}'/>
                    <!-- 商場 -->
                    <input id='WIDsubject' name='WIDsubject' value='默生'/>
                    <!-- 總金額 -->
                    <input id='WIDtotal_amount' name='WIDtotal_amount' value='{$sum}'/>
                    <!-- 商品資訊 -->
                    <input id='WIDbody' name='WIDbody' value='哈哈哈'/>
                    <button class='new-btn-login' type='submit' style='text-align:center;'>付 款</button>
		        </form><script>document.getElementById('alipay').submit()</script>";
        echo $html;
    }

    // 支付結果頁 支付寶的同步跳轉位址 成功之後跳轉的位址
    public function payResult(Request $request)
    {
        # 接受參數
        $data = $request->param();

        // 驗證是否支付成功
        require_once("./plugins/alipay/config.php");
        require_once './plugins/alipay/pagepay/service/AlipayTradeService.php';

        $alipaySevice = new \AlipayTradeService($config);

        $result = $alipaySevice->check($data);

        // 支付成功傳回的頁面
        if($result){

            // 驗簽成功傳回的界面
            //支付寶交易号
            $trade_no = htmlspecialchars($data['trade_no']);
            echo "success"."<br />"."支付寶交易号:".$trade_no;
            die;
        }else{
            // 支付驗簽失敗傳回的頁面
            echo "驗證失敗";
            die;
        }
    }
    // 支付寶異步跳轉位址  再本地并不可以調用成功,因為這是支付寶發送伺服器端的。
    public function payRe(){
        // 支付成功之後 支付寶的伺服器端向我們的伺服器端發送的一個通知,會傳遞一下參數,我們通過這些參數進行驗證然後修改訂單狀态。
        // 接受參數
        $data = request()->param();
        // 驗簽
        require_once './plugins/alipay/config.php';
        require_once './plugins/alipay/pagepay/service/AlipayTradeService.php';

        $alipaySevice = new \AlipayTradeService($config);
        // 記錄日志
        $alipaySevice->writeLog(var_export($_POST,true));
        // 傳回的支付結果
        $result = $alipaySevice->check($data);

        // 判斷支付結果
        if($result){
            // 驗簽成功之後的結果
            // 判斷交易狀态
            if($data['trade_status'] == "TRADE_SUCCESS"){
                // 交易支付成功


                echo "success";
                die;

            }else if($data['trade_status'] == "TRADE_FINISHED"){
                # 交易結束,不可退款
                echo "fail";
                die;
            }
            echo "success";
            die;
        }else{
            # 驗簽失敗
            $alipaySevice->writeLog("驗簽失敗");
            // 失敗傳回的結果
            echo "fail";die;
        }
    }
           

調用結果頁

tp簡單實作沙箱應用完成支付,正式環境,隻需要替換,配置資訊,即可以完成支付sdk結合項目路徑html控制器方法調用結果頁

基本的一套支付流程就算完成,但是最主要的還是裡面的配置需要好好修改,我這個是超簡單的一個支付流程。不過,回了這個了解怎麼支付,到時候結合實際項目就會好做很多了,要優化的地方還是很多。

如果想要正式的支付環境流程, 隻需要在支付開放平台中,申請一個應用,同時開啟線上支付的協定,即可完成正式支付。還算是蠻簡單的,

tp簡單實作沙箱應用完成支付,正式環境,隻需要替換,配置資訊,即可以完成支付sdk結合項目路徑html控制器方法調用結果頁
嘗試使用一下,同步,異步位址更換,修改配置資訊,因為本身現在做的項目php版本是5.4的,而下載下傳的sdk的版本支援的是5.5及以上的,是以需要調整一下。