PHP 支付宝支付接入

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhizhuo0915/article/details/82117571

注,我这里用的是 ThinkCmf5.0  与 Thinkphp5.0 有微小的差异,我会标注出来

1、先去支付宝官网把Demo 下载了,然后打开根目录中的“config.php”,把里面的参数填写,然后上传到extent目录,我起文件夹名为 "wapPay"

2.第二步进入支付宝开发者中心,把相关开发设置的参数填了

3、前端 HTML 代码

<!doctype html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>订单支付</title>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
        <link rel="stylesheet" href="__TMPL__/public/style/qczl/css/mui.min.css"  />
        <link rel="stylesheet" href="__TMPL__/public/style/qczl/css/pay.css" />
        <link rel="stylesheet" href="__TMPL__/public/style/qczl/css/iconfont1.css" />
        <script  type="text/javascript"  src="__TMPL__/public/style/js/jquery-1.9.1.min.js"></script>
    </head>

    <body>
        <header id="header" class="mui-bar mui-bar-nav">
            <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
            <h1 class="mui-title">支付订单</h1>
        </header>
        <div id="content" class="mui-content">
            <div id="money">
                <i class="iconfont icon-renminbi"></i><span>订单总金额</span><span>¥{$order_price} </span>
            </div>
            <span class="way">付款方式</span>
            <ul class="mui-table-view mui-table-view-radio">
              
                <li class="mui-table-view-cell mui-selected">
                    <a class="mui-navigate-right"><i class="iconfont icon-alipay"></i><span>支付宝</span></a>
                </li>
            </ul>
            <div id="question">
                <a href="#">
                    <span>支付遇到问题</span>
                    <i class="iconfont icon-wenhao"></i>
                </a>
            </div>

            <center style="margin-top: 15%;">
                <button  onclick="pay()" style="width:100%;background-color: #00a65a;color: #FFF">
                    <span >支 付</span>
                </button>
            </center>

            <div id="null"></div>

        </div>
        <script src="__TMPL__/public/style/qczl/js/mui.min.js"></script>
    </body>
     <script>
           function pay() {
               location.href = "{:cmf_url('Order/baoPay',array('order_id'=>$order_id))}";
           }
     </script>

</html>

4、PHP 代码

 // 调起支付宝支付
    public function baoPay(){

        $order_id = $this->request->param('order_id');
        $order_info = Db::name("server_order")
            ->alias('a')
            ->join('shop_server b','a.server_id = b.s_id')
            ->where(['a.o_id'=>$order_id])
            ->field('a.order_price,a.order_num,b.s_name')
            ->find();

        // 引入支付宝第三方sdk类库    Thinkphp5.0 用 Loader::import()    引入
        import('wapPay.wappay.service.AlipayTradeService',EXTEND_PATH);
        import('wapPay.wappay.buildermodel.AlipayTradeWapPayContentBuilder',EXTEND_PATH);

        $config = array (
            //应用ID,您的APPID。
            'app_id' => "2018030702332021",
            //商户私钥,您的原始格式RSA私钥  自己用官方给的程序生成的
            'merchant_private_key' => "MIIEow**************",

            //异步通知地址
            'notify_url' => "http://www.ljian.com.cn/simplewind/extend/wapPay/notify_url.php",

            //同步跳转
            'return_url' => "http://www.ljian.com.cn/public/portal/Order/return_url.html",

            //编码格式
            'charset' => "UTF-8",

            //签名方式
            'sign_type'=>"RSA2",

            //支付宝网关
            'gatewayUrl' => "https://openapi.alipay.com/gateway.do",

            //支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。这个不是自己生成的,是系统给的
         
            'alipay_public_key' => "MIIBIjANBgkqhkiG9w0BAQEF****************AAOCAQ8AMIIBCgKCAQEAkMV",


        );

        //商户订单号,商户网站订单系统中唯一订单号,必填
        $out_trade_no = $order_info['order_num'];

        //订单名称,必填
        $subject = $order_info['s_name'];

        //付款金额,必填
        $total_amount = $order_info['order_price'];

        //商品描述,可空
        $body = '';

        //超时时间
        $timeout_express="1m";
        $payRequestBuilder = new \AlipayTradeWapPayContentBuilder();
        $payRequestBuilder->setBody($body);                       //   商品描述
        $payRequestBuilder->setSubject($subject);                 //   订单名称
        $payRequestBuilder->setOutTradeNo($out_trade_no);         //   订单号
        $payRequestBuilder->setTotalAmount($total_amount);        //   付款金额
        $payRequestBuilder->setTimeExpress($timeout_express);     //   超时时间

        $payResponse = new \AlipayTradeService($config);
        $result = $payResponse->wapPay($payRequestBuilder,$config['return_url'],$config['notify_url']);
        return ;


    }

    // 支付宝授权回调函数
    public function return_url(){


        // 引入支付宝第三方sdk类库
        import('wapPay.wappay.service.AlipayTradeService',EXTEND_PATH);

        $config = array (
            //应用ID,您的APPID。
            'app_id' => "2018030702332021",
            //商户私钥,您的原始格式RSA私钥
            'merchant_private_key' => "MIIEowIBAAKC******************AQEAwS/mYtS",

            //异步通知地址
            'notify_url' => "http://www.ljian.com.cn/simplewind/extend/wapPay/notify_url.php",

            //同步跳转
            'return_url' => "http://www.ljian.com.cn/public/portal/Order/return_url.html",

            //编码格式
            'charset' => "UTF-8",

            //签名方式
            'sign_type'=>"RSA2",

            //支付宝网关
            'gatewayUrl' => "https://openapi.alipay.com/gateway.do",

            //支付宝公钥, 非自己生成  查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
              'alipay_public_key' => "MIIBIjANBgkqhkiG9w0BAQEF****************AAOCAQ8AMIIBCgKCAQEAkMV",

        );

        $arr=$_GET;

        $alipaySevice = new \AlipayTradeService($config);
        $result = $alipaySevice->check($arr);

        /* 实际验证过程建议商户添加以下校验。
        1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
        2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
        3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)
        4、验证app_id是否为该商户本身。
        */
        if($result) {  //验证成功

            //商户订单号
            $out_trade_no = $arr['out_trade_no'];

            //支付宝交易号
            $trade_no = $arr['trade_no'];

            //交易状态
            //$trade_status = $arr['trade_status'];


            //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

            //请在这里加上商户的业务逻辑程序代
            Db::name("server_order")->where(['order_num'=>$out_trade_no])->update(['is_pay'=>1,'is_del'=>0]);

            echo "success";        //请不要修改或删除
            return $this->redirect('Order/payform');

        }else {
            //验证失败
            echo "fail";    //请不要修改或删除

        }
    }
 

猜你喜欢

转载自blog.csdn.net/zhizhuo0915/article/details/82117571