用Thinkphp给客户开发网站的时候需要用到各大平台付款功能,下面就免费分享给大家,此类是个成熟类,网上down下来的,经过修改测试了(可以直接拿来使用,附带使用方法,有需要的朋友请拿走。),如果有需要安装的演示请登陆“二当家的”查看:http://www.erdangjiade.com/php/524.html
目前包含了支付宝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");
}
}

Thinkphp各大支付平台在线支付集成源码的更多相关文章

  1. java实现微信支付宝等多个支付平台合一的二维码支付(maven+spring springmvc mybatis框架)

    首先申明,本人实现微信支付宝等支付平台合多为一的二维码支付,并且实现有效时间内支付有效,本人采用的框架是spring springmvc mybatis 框架,maven管理.其实如果支付,不需要my ...

  2. 点菜网---Java开源生鲜电商平台-系统架构图(源码可下载)

    点菜网---Java开源生鲜电商平台-系统架构图(源码可下载) 1.点菜网-生鲜电商平台的价值与定位. 生鲜电商平台是一家致力于打造全国餐饮行业智能化.便利化.平台化与透明化服务的创新型移动互联网平台 ...

  3. vue集成cesium,webgis平台第一步(附源码下载)

    vue-cesium-platform Vue结合Cesium的web端gis平台 初步效果 笔记本性能限制,运行Cesium温度飙到70度以上.所以平时开发时先开发界面,之后加载Cesium地球 当 ...

  4. Struts2SpringHibernate整合示例,一个HelloWorld版的在线书店(项目源码+详尽注释+单元测试)

    Struts2,Spring,Hibernate是Java Web开发中最为常见的3种框架,掌握这3种框架是每个Java Web开发人员的基本功. 然而,很多初学者在集成这3个框架的时候,总是会遇到各 ...

  5. 资深程序员教你如何实现API自动化测试平台!附项目源码!

    原文链接: 1.平时测试接口,总是现写代码,对测试用例的管理,以及测试报告的管理持久化做的不够, 2.工作中移动端开发和后端开发总是不能并行进行,需要一个mock的依赖来让他们并行开发. 3.同时让自 ...

  6. jenkins持续集成源码管理选项为None,构建失败找不到git.exe解决办法

    我的jenkins版本为Jenkins ver. 2.19.1 1.源码管理选项只有None的解决办法: 在插件管理中心,搜索对应的源码管理插件这里以git为例,搜索git plugin点击右下角的安 ...

  7. 集成源码深度剖析:Fescar x Spring Cloud

    Fescar 简介 常见的分布式事务方式有基于 2PC 的 XA (e.g. atomikos),从业务层入手的 TCC( e.g. byteTCC).事务消息 ( e.g. RocketMQ Hal ...

  8. FlexPaper实现文档在线浏览(附源码)

    园子里也有关于FlexPaper的文章,但都不怎么详细. 没有较全的参数说明.就连官方网站都没有.没法,最后只得将swf文件反编译后查看了源码才将里面的参数全部弄出来. 好了,废话不多说,开始正题. ...

  9. 16Aspx.com-书通网中小学生免费在线学习网站源码 带采集带手机版帝国cms内核

    =============================================== 源码站长资源交易专业网-商业源码下载,VIP源码,程序交易,毕业设计交易,站长交易|- 16aspx.c ...

随机推荐

  1. tomcat底层原理实现

    1.首先完成一个server类,用来接收客户端的请求:代码都在一个while(true)循环中,模拟tomcat一直在启动,其中绑定一个端口,用来监听一个端口,然后创建一个输入流,获取请求的输入流,然 ...

  2. JMeter学习(三十五)使用jmeter来发送json/gzip格式数据

    一.使用jmeter来发送gzip数据 有时候我们需要模拟在客户端将数据压缩后, 发送(post)到服务器端. 通常这种情况,会发生在移动终端上. 这样做的好处, 是可以节省流量.  当然, 服务器返 ...

  3. Mini ORM——PetaPoco笔记

    Mini ORM--PetaPoco笔记 记录一下petapoco官网博客的一些要点.这些博客记录了PetaPoco是如何一步步改进的. 目录: Announcing PetaPoco PetaPoc ...

  4. python_编程规范

    缩进 4个"空格"作为一个缩进层次,永远不要使用"制表位" 空格 运算符两边放置一个空格 命名  模块名:模块应该是不含下画线的.简短的.小写的名字.  类名: ...

  5. ios - kvo观察者示例

    首先创建Person分类 #import <Foundation/Foundation.h> @interface Person : NSObject @property (nonatom ...

  6. axis2打包方式发布

    参照http://gao-xianglong.iteye.com/blog/1744557这篇文章,注意的是打包services.xml的时候要将它的上级目录meta-inf一起打包,放到axis2\ ...

  7. .NET 扩展方法(Extention Method)的要点

    扩展方法Extention Method的主要介绍在:http://msdn.microsoft.com/zh-cn/library/bb383977(v=vs.100).aspx. 扩展方法的意义在 ...

  8. 【转】SQL Server中的事务与锁

    SQL Server中的事务与锁   了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂 ...

  9. 解决Android与服务器交互大容量数据问题

    对于目前的状况来说,移动终端的网络状况没有PC网络状况那么理想.在一个Android应用中,如果需要接收来自服务器的大容量数据,那么就不得不考虑客户的流量问题.本文根据笔者的一个项目实战经验出发,解决 ...

  10. 。。。IO流的学习之一。。。

    文件写入流FileWriter的使用: import static org.junit.Assert.*; import java.io.File; import java.io.FileWriter ...