tp6 支付宝沙箱支付

tp6 支付宝沙箱支付,第1张

简介:
蚂蚁金服开放平台基于支付宝的海量用户,将强大的支付、营销、数据能力,通过接口等形式开放给第三方合作伙伴,帮助第三方合作伙伴创建更具竞争力的应用。


通过接入蚂蚁金服开放平台,第三方合作伙伴可以获得更多的流量、用户和收益,而第三方合作伙伴提供的服务也让用户获得了更丰富的体验,平台生态更加繁荣,最终实现多方共赢
开发文档 和介绍网站:https://docs.open.alipay.com

1注册一个沙箱号 网站https://open.alipay.com/platform/home.htm
使用真的支付宝扫描 进去 注册 沙箱支付宝


一、同步回调

1.支付宝支付需配置alipay/config.php配置文件:添加商户私钥,支付宝公钥,同步,异步跳转地址,网关

//去支付
    public function pay(Request $request)
    {
        //判断是否登录
        $uid = Cache::get('userinfo');
        if($uid==null){
            return redirect('login');
        }

        $data = $request->all();
        //判断是否重复提交
        $order = OrderModel::findOrder($data['order_sn']);
        if($order['order_status']==1){
            return fail("订单不能重复提交");
        }

        //判断订单是否延时
        $time = Cache::get('time');
        if(time()-strtotime($time)>300){
            return fail("订单超时,请重新下单");
        }

        if($data['payWay']==null){
            return fail(500,"请选择支付方式");
        }

        $goods_price = rtrim($data['goods_price'],"点");
        try {
            \app\admin\model\Order::where('order_sn',$data['order_sn'])->find();
        }catch (Exception $exception){
            throw new Exception("订单编号异常");
        }

        //判断支付方式
        switch ($data['payWay']){
            case 'alipay':{
                echo '
'; } } }

2.同步用于支付宝支付,路由用get方式提交

//同步回调
Route::get('rollBack','Order/rollBack');

3.支付流程:引入回调地址->验证参数->正确判断订单号是否存在->不存在返回失败->存在判断是否有误->修改订单状态

//同步回调
    public function rollBack()
    {
        try {
            $param = input();
            require_once("./plugins/alipay/config.php");
            require_once("./plugins/alipay/pagepay/service/AlipayTradeService.php");
            $alipaySevice = new \AlipayTradeService($config);
            $result = $alipaySevice->check($param);
            //验证成功
            if ($result) {
                //商户订单号
                $out_trade_no = $_GET['out_trade_no'];
                //查询订单是否存在
                $order = OrderModel::where('order_sn',$out_trade_no)->find()->toArray();
                if(!$order){
                    return fail();
                }
                //订单号一致
                if($order['order_sn']==$out_trade_no){
                    //若数据库状态为1,则已支付
                    if($order['order_status']==1){
                        return fail("订单已支付");
                    }else{
                        //否则修改数据库的状态
                        $res = OrderModel::where('id',$order['id'])->update(['order_status'=>1]);
                    }
                    //状态修改成功,则返回成功
                    if($res){
                        Log::record($result);
                        return  redirect('success');
                    }
                    return fail();
                }
            } else {
                return  redirect('fail');
            }
        }catch (Exception $exception){
            return fail($exception->getMessage());
        }
    }


二、异步回调

1.异步回调用户修改订单状态(要用post方式)

//异步回调
Route::post('notify','Order/notify');

2.控制器中

//异步回调
    public function notify()
    {
        $result = true;
        //记录日志
        Log::record(json_encode(\request()->post()));
        if($result) {
            //商户订单号
            $out_trade_no = $_POST['out_trade_no'];
            //查找订单号那条数据
            $order = OrderModel::where('order_sn',$out_trade_no)->find()->toArray();
            if(!$order){
                return fail();
            }

            //交易状态
            $trade_status = $_POST['trade_status'];
            //订单状态
            $status = $order['order_status'];

            if($_POST['trade_status'] == 'TRADE_FINISHED') {
                if($status == 1){
                    return fail("订单已支付");
                }else{
                    //修改数据库中的状态
                    $res = OrderModel::where('id',$order['id'])->update(['order_status'=>1]);
                }
                //判断修改后的状态
                if($res){
                    return success();
                }else{
                    return fail();
                }
            }
            return fail();
        }else {
            //验证失败
            return fail();
        }
    }

3.postman中测试

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/563425.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)

保存