ThinkPHP5.0集成支付宝扫码支付


首先,下载支付宝提供的demo

下载demo,目录结构如下:

 

 

把 alipay.trade.wap.pay-PHP-UTF-8文件夹拿出来,放到tp5根目录 vendor 文件夹下,重命名为alipay:

 

 

配置config.php内的内容

<?php
$config = array (	 
		//应用ID,您的APPID。
		'app_id' => "2016102212345813",

		//商户私钥
		'merchant_private_key' => "MIIEvQIBADAN HQL9bkGvrVR/R2QlXFMSBD+HTtH2qjY=",

		//异步通知地址
		'notify_url' => "http://域名/Pay/Alipay/notifyUrl",

		//同步跳转
		'return_url' => "http://域名/Pay/Alipay/returnUrl",

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

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

		//支付宝网关
		//'gatewayUrl' => "https://openapi.alipay.com/gateway.do",//正式支付地址
		'gatewayUrl' => "https://openapi.alipaydev.com/gateway.do",//沙盒支付地址 

		//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
		'alipay_public_key' => "MIIBIj gD3ogRaVNGHdQIDAQAB",
);

添加Alipay.php控制器

 

 

<?php
namespace app\index\controller;

use think\Controller;
use think\Request;
use think\Db;


class Alipay extends Controller
{

    public function index(Request $request){ 
        header("Content-type:text/html;charset=utf-8"); 
        require_once VENDOR_PATH.'/alipay/config.php';
        require_once VENDOR_PATH.'/alipay/pagepay/service/AlipayTradeService.php';
        require_once VENDOR_PATH.'/alipay/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';
        $param = $request->param(); 

        //商户订单号,商户网站订单系统中唯一订单号,必填 
        $out_trade_no = trim($param['out_trade_no']);

        //订单名称,必填 
        $subject = trim($param['subject']);

        //付款金额,必填 
        $total_amount = trim($param['total_amount']);
        

        //商品描述,可空 
        $body = trim($param['body']);

        //公用回传参数
//        $passback_params = http_build_query($param['purchaseInfo']);
        //$passback_params = urlencode($param['buyer']);

 

        //构造参数
        $payRequestBuilder = new \AlipayTradePagePayContentBuilder();
        $payRequestBuilder->setBody($body);
        $payRequestBuilder->setSubject($subject);
        $payRequestBuilder->setTotalAmount($total_amount);
        $payRequestBuilder->setOutTradeNo($out_trade_no);

        //电脑网站支付请求
        $aop = new \AlipayTradeService($config);
        $response = $aop->pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']);

        //输出表单
        var_dump($response);
    } 
    /**
     * 异步
     * @param Request $request
     * @throws \Exception
     */
    public function notifyUrl(Request $request){
        $param = $request->param();
        require_once VENDOR_PATH.'/alipay/config.php';
        require_once VENDOR_PATH.'/alipay/pagepay/service/AlipayTradeService.php';
        require_once VENDOR_PATH.'/alipay/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';
        $alipaySevice = new \AlipayTradeService($config);
        $alipaySevice->writeLog(var_export($param,true));
        $result = $alipaySevice->check($param);
 
        if($result) {
            //验证成功
            $out_trade_no = urldecode($param['out_trade_no']); 
            if($param['trade_status'] == 'TRADE_SUCCESS') {
                //判断该笔订单是否在商户网站中已经做过处理
                //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                //请务必判断请求时的total_amount与通知时获取的total_fee为一致的
                //如果有做过处理,不执行商户的业务程序
                //注意:
                //付款完成后,支付宝系统发送该交易状态通知  
  
            }
                echo "success";
        }else {
            //验证失败
            echo "fail"; 

        }

    }

    /**
     * 同步
     * @param Request $request
     * @throws \Exception
     */
    public function returnUrl(Request $request){
        $param = $request->param();
        require_once VENDOR_PATH.'/alipay/config.php';
        require_once VENDOR_PATH.'/alipay/pagepay/service/AlipayTradeService.php';
        require_once VENDOR_PATH.'/alipay/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';
        $alipaySevice = new \AlipayTradeService($config);
        $result = $alipaySevice->check($param);

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


            //验证成功 
            echo "验证成功";
        }
        else {
 
            //验证失败
            echo "验证失败";
        }
    }
 
}

?>

  添加自己处理数据的方法

web页面

<!DOCTYPE html>
<html>
<head>
<title>alipay_test</title>
</head>
<body>
<form name=alipayment action="{:url('Alipay/index')}" method="post" target="_blank">
    商户订单号:<input type="text" name="out_trade_no" value="{$out_trade_no}" /><br/>
    订单名称:<input type="text" name="subject" value="{$subject}"/><br/>
    付款金额:<input type="text" name="total_amount" value="{$body}" /><br/>
    商品描述:<input type="text" name="body" value="{$body}"/><br/>
    <button type="submit">付 款</button>
</form>
</body>
</html>
 

  效果:

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM