thinkphp5实现支付宝支付

本文详细介绍了如何在项目中集成支付宝支付功能,包括订单信息的处理、支付金额的获取及支付方式的选择。同时,深入解析了支付宝回调的实现过程,如接收数据、验证签名及更新订单状态等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目上需要用到支付宝支付,然后匆忙的看了下教程和网上分享的方法,整理了下,现在分享出来

 			$order_id=Request::instance()->param("id");//订单号
            if(empty($order_id))
            {
                return json(['code'=>2,'msg'=>'参数错误','data'=>'']);
            }
            //查询订单信息
            $order_info = Db::name('ns_order')->where('order_id',$order_id)->find();
            if(empty($order_info))
            {
                return json(['code'=>3,'msg'=>'无订单信息','data'=>'']);
            }
            if($order_info['order_status'] != 0)
            {
                return json(['code'=>4,'msg'=>'此订单已关闭,请重新下单','data'=>'']);
            }
            $reoderSn = $order_info['order_no'];
            //获取支付方式
            //获取支付金额
            $money = $order_info['pay_money'];
            //判断支付方

            $alipay = new \think\Alipay();

            //异步回调地址
            //$url = '**********/alipay_notify';
            $url = str_replace("/index.php", '', __URL__);
            $url = str_replace("index.php", '', $url);
            $url = $url . "/notify.php";
            $body='订单支付';
            $array = $alipay ->alipay($body, $money, $reoderSn,$url);
            //$a=$alipay->alipayRefund();
            if ($array) {
                return json(['code'=>1,'msg'=>'成功','data'=>$array]);
            } else {
                return json(['code'=>0, 'msg'=>'对不起请检查相关参数','data'=>'']);
            }

支付宝回调地址需要用到支付宝中设置的域名
回调方法

 Log::write("支付宝------------------------------------进入回调用");
        import('.alipay.aop.AopClient', '', '.php');
        Log::write("支付宝------------------------------------开始第一步引入");
        $data = $_POST;
        Log::write("支付宝------------------------------------第二步接收");
        $aop = new \AopClient;
        $aop->alipayrsaPublicKey = \think\Config::get('alipay')['rsaPublicKey'];
        $flag = $aop->rsaCheckV1($data, NULL, "RSA2");
        Log::write("支付宝------------------------------------第三步验证签名");
        Log::write('$data',"czx111");
        if($flag = 0)
        {
            echo 000;
            exit;
        }else{
            if( $_POST['trade_status'] == 'TRADE_SUCCESS')
            {
                $order_id = $_POST['out_trade_no'];//商户订单号
               
                $order=Db::name('ns_order')->where('order_no',$order_id)->find();
          
                    $result=Db::name('ns_order')->where('order_no',$order_id)->update(['order_status'=>1]);//修改订单状态,支付宝单号到数据库
                    $results=Db::name('ns_order')->where('order_no',$order_id)->update(['payment_type'=>2]);//修改订单支付状态,支付宝单号到数据库
                    if($result) {
                        echo "success";    //返回给支付宝系统,请不要修改或删除
                  }
            }else{
                echo "fail";
            }
        }
/*
    * 支付宝支付
    * $body            名称
    * $total_amount    价格
    * $product_code    订单号
    * $notify_url      异步回调地址
    */
    public function alipay($body, $total_amount, $product_code, $notify_url)
    {

        /**
         * 调用支付宝接口。
         */
        Loader::import('.alipay.aop.AopClient', '', '.php');
        Loader::import('.alipay.aop.request.AlipayTradeAppPayRequest', '', '.php');
        $aop = new \AopClient();
        $aop->gatewayUrl            = Config::get('alipay')['gatewayUrl'];
        $aop->appId                 = Config::get('alipay')['appId'];
        $aop->rsaPrivateKey         = Config::get('alipay')['rsaPrivateKey'];
        $aop->format                = Config::get('alipay')['format'];
        $aop->charset               = Config::get('alipay')['charset'];
        $aop->signType              = Config::get('alipay')['signType'];
        $aop->alipayrsaPublicKey    = Config::get('alipay')['alipayrsaPublicKey'];
        $request = new \AlipayTradeAppPayRequest();
        $arr['body']                = $body;
        $arr['subject']             = $body;
        $arr['out_trade_no']        = $product_code;
        $arr['timeout_express']     = '30m';
        $arr['total_amount']        = floatval($total_amount);
        $arr['product_code']        = 'QUICK_MSECURITY_PAY';

        $json = json_encode($arr);
        $request->setNotifyUrl($notify_url);
        $request->setBizContent($json);

        $response = $aop->sdkExecute($request);
        //print_r($request);die;
        return $response;

    }

以上就是支付宝支付的方法,测试没问题

<?php /**  * 支付宝支付  */ return [         //应用ID,您的APPID。         'app_id' => "",         //商户私钥, 请把生成的私钥文件中字符串拷贝在此         'merchant_private_key' => "",         //异步通知地址         'notify_url' => "",         //同步跳转         'return_url' => "",         //编码格式         'charset' => "UTF-8",         //签名方式         'sign_type'=>"RSA2",         //支付宝网关         'gatewayUrl' => "https://openapi.alipay.com/gateway.do",         //支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。         'alipay_public_key' => "", ];ThinkPHP5 支付宝支付扩展库, 包括手机网站支付、电脑网站支付支付查询、退款、退款查询、对账单等。用法电脑网站支付 Pagepay.php调用 \alipay\Pagepay::pay($params) 即可手机网站支付 Wappay.php调用 \alipay\Wappay::pay($params) 即可交易查询接口 Query.php调用 \alipay\Query::exec($query_no) 即可交易退款接口 Refund.php调用 \alipay\Refund::exec($params) 即可退款统一订单查询 RefundQuery.php调用 \alipay\RefundQuery::exec($params) 即可交易关闭接口 Close.php调用 \alipay\Close::exec($query_no) 即可查询账单下载地址接口 Datadownload.php调用 \alipay\Datadownload::exec($bill_type, $bill_date) 即可验签 Notify.php调用 \alipay\Notify::checkSign($params) 即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值