PHP 支付宝支付接入

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

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

PHP 支付宝支付接入_第1张图片

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

PHP 支付宝支付接入_第2张图片

3、前端 HTML 代码


    
        
        订单支付
        
        
        
        
        
    

    
        


        

            

                订单总金额¥{$order_price}
            

            付款方式
            

                  
                    

  •                     支付宝
                    

  •             

            

            


                
            

            

        


        
    
     

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' => "201821XXXXXX",
            //商户私钥,您的原始格式RSA私钥  自己用官方给的程序生成的
            'merchant_private_key' => "MIIEow**************",

            //异步通知地址
            'notify_url' => "http://你的网址/simplewind/extend/wapPay/notify_url.php",

            //同步跳转
            'return_url' => "http://你的网址/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://你的网址/simplewind/extend/wapPay/notify_url.php",

            //同步跳转
            'return_url' => "http://你的网址/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";    //请不要修改或删除

        }
    }
 

 

你可能感兴趣的:(Thinkphp,支付宝)