php thinkphp怎么集成支付宝接口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php thinkphp怎么集成支付宝接口相关的知识,希望对你有一定的参考价值。

参考技术A 您好,1、接口包中lib文件中的文件复制到Vendor后,重命名为TP规范的命名规则,为的是调用方便,当然你要改成其他名称也可以;
2、把执行支付操作(doalipay),处理异步返回结果(notifyurl),处理跳转返回结果(returnurl)三个支付接口的核心页面写到一个PayAction控制器中。
3、提交支付的页面中,可以在提交之前先把一些参数要传递的内容先通过隐藏域的方法组合好,比如金额先计算好,订单名称,订单描述等先用字符串组合好。然后提交表单,这样,在doalipay方法中只要直接构造传递参数,直接进行提交就行过了。
4、支付返回后的处理因为要在异步和跳转两个方法中都要进行相应的判断和处理,所以,把这些判断和处理写到一个自定义函数中,这样只要调用函数即可,使得代码更加清晰明了。
5、notify_url和return_url两种模式的返回url必须使用http://xxxxxxx这样的绝对路径,因为里是从支付宝平台返回到你的项目页面。不能使用相对路径。
/**
* 除去数组中的空值和签名参数
* @param $para 签名参数组
* return 去掉空值与签名参数后的新签名参数组
*/
function paraFilter($para)
$para_filter = array();
while (list ($key, $val) = each ($para))
if($key == "sign" || $key == "sign_type" || $key == '_URL_' || $val == "")continue; //添加了$key == '_URL_'
else $para_filter[$key] = $para[$key];

return $para_filter;


function myparaFilter($para)
$para_filter = array();
while (list ($key, $val) = each ($para))
if($key == '_URL_')continue;
else $para_filter[$key] = $para[$key];

return $para_filter;

Thinkphp各大支付平台在线支付集成源码

用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‘ => ‘[email protected]‘, 
// 加密key,开通支付宝账户后给予 
‘key‘ => ‘aaa‘, 
// 合作者ID,支付宝有该配置,开通易宝账户后给予 
‘partner‘ => ‘2088101000137799‘ 
), 
‘aliwappay‘ => array( 
// 收款账号邮箱 
‘email‘ => ‘[email protected]‘, 
// 加密key,开通支付宝账户后给予 
‘key‘ => ‘aaa‘, 
// 合作者ID,支付宝有该配置,开通易宝账户后给予 
‘partner‘ => ‘2088101000137799‘ 
), 
‘palpay‘ => array( 
‘business‘ => ‘[email protected] 
), 
‘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"); 
} 
}

 


以上是关于php thinkphp怎么集成支付宝接口的主要内容,如果未能解决你的问题,请参考以下文章

支付宝在支付过程中提示:调试错误,怎么办?

支付宝支付即时到账接口在ThinkPHP商城中的应用

php支付宝在线交易时怎么实现的?

支付宝支付接口开发的回调地址怎么写

php接入支付宝接口以及嵌入thinkphp框架

thinkphp 支付宝接口怎么测试