Thinkphp各大支付平台在线支付

汉王 PHP+MySQL 收藏

目前包含了支付宝pc版、支付宝wap版、palpay、yeepay、unionpay、kuaiqian、财付通tenpay等,这几个常用的支付平台,支付方式均为即时到账,不包含担保支付。

支付配置ThinkPay\Application\Common\Conf\config.php

array( 
    /* 支付设置 */ 
    'payment' => array( 
        'tenpay' => array( 
            // 加密key,开通财付通账户后给予 
            'key' => 'e82573dc7e6136ba414f2e2affbe39fa', 
            // 合作者ID,财付通有该配置,开通财付通账户后给予 
            'partner' => '1900000113' 
        ), 
        'alipay' => array( 
            // 收款账号邮箱 
            'email' => 'chenf003@yahoo.cn', 
            // 加密key,开通支付宝账户后给予 
            'key' => 'aaa', 
            // 合作者ID,支付宝有该配置,开通易宝账户后给予 
            'partner' => '2088101000137799' 
        ), 
        'aliwappay' => array( 
            // 收款账号邮箱 
            'email' => 'chenf003@yahoo.cn', 
            // 加密key,开通支付宝账户后给予 
            'key' => 'aaa', 
            // 合作者ID,支付宝有该配置,开通易宝账户后给予 
            'partner' => '2088101000137799' 
        ), 
        'palpay' => array( 
            'business' => 'zyj@qq.com' 
        ), 
        'yeepay' => array( 
            'key' => '69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl', 
            'partner' => '10001126856' 
        ), 
        'kuaiqian' => array( 
            'key' => '1234567897654321', 
            'partner' => '1000300079901' 
        ), 
        'unionpay' => array( 
            'key' => '88888888', 
            'partner' => '105550149170027' 
        ) 
    ) 
);
支付生成订单 ThinkPay\ThinkPHP\Library\Think\Pay.class.php
function buildRequestForm(Pay\PayVo $vo) { 
    $this->payer->check(); 
    //生成本地记录数据 
    $check = M("Pay")->add(array( 
        'out_trade_no' => $vo->getOrderNo(), 
        'money' => $vo->getFee(), 
        'status' => 0, 
        'callback' => $vo->getCallback(), 
        'url' => $vo->getUrl(), 
        'param' => serialize($vo->getParam()), 
        'create_time' => time(), 
        'update_time' => time() 
    )); 
 
    if ($check !== false) { 
        return $this->payer->buildRequestForm($vo); 
    } else { 
        E(M("Pay")->getDbError()); 
    } 
}
支付订单表
/** 
  数据库 
  CREATE TABLE `think_pay` ( 
  `out_trade_no` varchar(100) NOT NULL, 
  `money` decimal(10,2) NOT NULL, 
  `status` tinyint(1) NOT NULL DEFAULT '0', 
  `callback` varchar(255) NOT NULL, 
  `url` varchar(255) NOT NULL, 
  `param` text NOT NULL, 
  `create_time` int(11) NOT NULL, 
  `update_time` int(11) NOT NULL, 
  PRIMARY KEY (`out_trade_no`) 
  ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
 */
alipay配置ThinkPay\ThinkPHP\Library\Think\Pay\Driver\Alipay.class.php
protected $gateway = 'https://mapi.alipay.com/gateway.do'; 
protected $verify_url = 'http://notify.alipay.com/trade/notify_query.do'; 
protected $config = array( 
    'email' => '', 
    'key' => '', 
    'partner' => '' 
);
md5加密
public function buildRequestForm(\Think\Pay\PayVo $vo) { 
    $param = array( 
        'service' => 'create_direct_pay_by_user', 
        'payment_type' => '1', 
        '_input_charset' => 'utf-8', 
        'seller_email' => $this->config['email'], 
        'partner' => $this->config['partner'], 
        'notify_url' => $this->config['notify_url'], 
        'return_url' => $this->config['return_url'], 
        'out_trade_no' => $vo->getOrderNo(), 
        'subject' => $vo->getTitle(), 
        'body' => $vo->getBody(), 
        'total_fee' => $vo->getFee() 
    ); 
 
    ksort($param); 
    reset($param); 
 
    $arg = ''; 
    foreach ($param as $key => $value) { 
        if ($value) { 
            $arg .= "$key=$value&"; 
        } 
    } 
 
    $param['sign'] = md5(substr($arg, 0, -1) . $this->config['key']); 
    $param['sign_type'] = 'MD5'; 
 
    $sHtml = $this->_buildForm($param, $this->gateway, 'get'); 
 
    return $sHtml; 
}
支付成功后回调地址ThinkPay\Application\Home\Controller\PublicController.class.php
public function notify() { 
    $apitype = I('get.apitype'); 
 
    $pay = new \Think\Pay($apitype, C('payment.' . $apitype)); 
    if (IS_POST && !empty($_POST)) { 
        $notify = $_POST; 
    } elseif (IS_GET && !empty($_GET)) { 
        $notify = $_GET; 
        unset($notify['method']); 
        unset($notify['apitype']); 
    } else { 
        exit('Access Denied'); 
    } 
    //验证 
    if ($pay->verifyNotify($notify)) { 
        //获取订单信息 
        $info = $pay->getInfo(); 
 
        if ($info['status']) { 
            $payinfo = M("Pay")->field(true)->where(array('out_trade_no' => $info['out_trade_no']))->find(); 
            if ($payinfo['status'] == 0 && $payinfo['callback']) { 
                session("pay_verify", true); 
                $check = R($payinfo['callback'], array('money' => $payinfo['money'], 'param' => unserialize($payinfo['param']))); 
                if ($check !== false) { 
                    M("Pay")->where(array('out_trade_no' => $info['out_trade_no']))->setField(array('update_time' => time(), 'status' => 1)); 
                } 
            } 
            if (I('get.method') == "return") { 
                redirect($payinfo['url']); 
            } else { 
                $pay->notifySuccess(); 
            } 
        } else { 
            $this->error("支付失败!"); 
        } 
    } else { 
        E("Access Denied"); 
    } 
}

下载地址