TPTCMS

ThinkPHP5整合系列之支付宝即时交易+支付宝扫码支付

ThinkPHP5支付宝即时交易扫码支付2018-10-01 23:24:52

第一步:在配置文件config.php添加配置文件

'ALIPAY_CONFIG' => [
    'partner' => '', // partner 从支付宝商户版个人中心获取
    'seller_email' => '', // email 从支付宝商户版个人中心获取
    'key' => '', // key 从支付宝商户版个人中心获取
    'sign_type' => strtoupper(trim('MD5')), // 可选md5  和 RSA 
    'input_charset' => 'utf-8', // 编码 (固定值不用改)
    'transport' => 'http', // 协议  (固定值不用改)
    'cacert' => EXTEND_PATH . 'Alipay/cacert.pem',  // cacert.pem存放的位置 (固定值不用改)
    'notify_url' => '', // 异步接收支付状态通知的链接
    'return_url' => '', // 同步接收支付状态通知的链接
    'private_key_path' => '', //移动端生成的私有key文件存放于服务器的 绝对路径 如果为MD5加密方式;此项可为空 (移动支付专用)
    'public_key_path' => '', //移动端生成的公共key文件存放于服务器的 绝对路径 如果为MD5加密方式;此项可为空 (移动支付专用)
]

第二步:在公共文件common.php添加公共函数

function alipay($order)
{
    import('Alipay.AlipaySubmit', EXTEND_PATH, '.class.php');
    // 获取配置
    $config = config('ALIPAY_CONFIG');
    $data = array(
        "_input_charset" => $config['input_charset'], // 编码格式
        "logistics_fee" => "0.00", // 物流费用
        "logistics_payment" => "SELLER_PAY", // 物流支付方式SELLER_PAY(卖家承担运费)、BUYER_PAY(买家承担运费)
        "logistics_type" => "EXPRESS", // 物流类型EXPRESS(快递)、POST(平邮)、EMS(EMS)
        "notify_url" => $config['notify_url'], // 异步接收支付状态通知的链接
        "out_trade_no" => $order['out_trade_no'], // 订单号
        "partner" => $config['partner'], // partner 从支付宝商户版个人中心获取
        "payment_type" => "1", // 支付类型对应请求时的 payment_type 参数,原样返回。固定设置为1即可
        "price" => $order['price'], // 订单价格单位为元
        "quantity" => "1", // price、quantity 能代替 total_fee。 即存在 total_fee,就不能存在 price 和 quantity;存在 price、quantity, 就不能存在 total_fee。
        "receive_address" => '1', // 收货人地址 即时到账方式无视此参数即可
        "receive_mobile" => '1', // 收货人手机号码 即时到账方式无视即可
        "receive_name" => '1', // 收货人姓名 即时到账方式无视即可
        "receive_zip" => '1', // 收货人邮编 即时到账方式无视即可
        "return_url" => $config['return_url'], // 页面跳转 同步通知 页面路径 支付宝处理完请求后,当前页面自 动跳转到商户网站里指定页面的 http 路径。
        "seller_email" => $config['seller_email'], // email 从支付宝商户版个人中心获取
        "service" => "create_direct_pay_by_user", // 接口名称 固定设置为create_direct_pay_by_user
        "show_url" => $order['show_url'], // 商品展示网址,收银台页面上,商品展示的超链接。
        "subject" => $order['subject'] // 商品名称商品的标题/交易标题/订单标 题/订单关键字等
    );
    $alipay = new \AlipaySubmit($config);
    $new = $alipay->buildRequestPara($data);
    $go_pay = $alipay->buildRequestForm($new, 'get', '支付');
    echo $go_pay;
}

第三步:在控制器创建如Alipay.php文件

// 测试数据
function alipay()
{
    if (request()->isGet()) {
        $price = '0.1';
        $subject = '测试';
        $out_trade_no = time();
        $data = array('out_trade_no' => $out_trade_no, 'price' => $price, 'subject' => $subject);
        alipay($data);
    }
}

// 同步接收
function alipay_return()
{
        // 引入支付宝
    import('Alipay.AlipayNotify', EXTEND_PATH, '.class.php');
    $config = $config = config('ALIPAY_CONFIG');
    $notify = new \AlipayNotify($config);
        // 验证支付数据
    $status = $notify->verifyReturn();
    if ($status) {
        $alipay = new AlipayModel();
        if (request()->isGet()) {
            // 下面编写你的业务逻辑代码,如:input('out_trade_no') 为订单号;
        }
    }
}

// 异步接收
function alipay_notify()
{
        // 引入支付宝
    import('Alipay.AlipayNotify', EXTEND_PATH, '.class.php');
    $config = $config = config('ALIPAY_CONFIG');
    $alipayNotify = new \AlipayNotify($config);
        // 验证支付数据
    $verify_result = $alipayNotify->verifyNotify();
    if ($verify_result) {
        $alipay = new AlipayModel();
        if (request()->isPost()) {
            // 下面编写你的业务逻辑代码,如:input('out_trade_no') 为订单号;
        }
    }
}

示例项目:https://github.com/baijunyao/thinkphp-bjyadmin/tree/master/ThinkPHP/Library/Vendor/Alipay

本篇文章转自白俊遥博客,仅用于学习研究或技术参考,请勿用于商业用途。