tp简单实现沙箱应用完成支付,正式环境,只需要替换,配置信息,即可以完成支付

tp5实现简单的支付功能。
思路:
1、下载支付宝提供的sdk,
2、打开支付宝开放平台,寻找沙箱应用,
3、将sdk放到自己的项目路径中,
4、编写简单的一个支付调用
5、创建控制器方法,调用sdk方法
6、编写同步跳转地址,因为异步跳转需要向我们的服务器上发送通知,所以暂时就不做了。

sdk结合项目路径

将sdk包放到public/plugins,目录下,然后修改config.php的文件,配置好环境。
在这里插入图片描述

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;
        }
    }

调用结果页

在这里插入图片描述
基本的一套支付流程就算完成,但是最主要的还是里面的配置需要好好修改,我这个是超简单的一个支付流程。不过,回了这个了解怎么支付,到时候结合实际项目就会好做很多了,要优化的地方还是很多。

如果想要正式的支付环境流程, 只需要在支付开放平台中,申请一个应用,同时开启线上支付的协议,即可完成正式支付。还算是蛮简单的,

在这里插入图片描述

尝试使用一下,同步,异步地址更换,修改配置信息,因为本身现在做的项目php版本是5.4的,而下载的sdk的版本支持的是5.5及以上的,所以需要调整一下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值