//支付宝支付
function alipay_before(){
$mid = $this->is_login();
require_once EXTEND_PATH.'Alipay/alipaycore.php';
require_once EXTEND_PATH.'Alipay/alipayrsa.php';
$order_id = input("request.order_id");
if($order_id == 0){
ajaxmsg('非法数据',0);
}
$order_info = Db::name("order")->where("id={$order_id}")->find();
//建立请求
$out_trade_no = $order_info['order_sn'];
$total_fee = $order_info['total_price'] + $order_info['trans_price']; //付款金额
$body = '订单支付'; //商品详情
$alipay_config = Config::get('alipay_config');
//构造要请求的参数数组,无需改动
$parameter = array(
'partner'=>$alipay_config['partner'],//合作者身份ID
'seller_id'=>$alipay_config['seller_id'],
'out_trade_no'=>$out_trade_no,//商户网站唯一订单号
'subject'=>'订单支付',//商品名称
'body'=>$body,//商品详情
'total_fee'=>$total_fee,
'notify_url'=>$alipay_config['notify_url'],//服务器异步通知页面路径
'service'=>$alipay_config['service'],//接口名称
'payment_type'=>$alipay_config['payment_type'],//支付类型
'_input_charset'=>$alipay_config['input_charset'],//参数编码字符集
);
//将post接收到的数组所有元素,按照"参数=参数值"的模式用"&"字符拼接成字符串。
$data = createLinkstring($parameter);
//打印待签名字符串。工程目录下的log文件夹中的log.txt。
logResult($data);
//将待签名字符串使用私钥签名,且做urlencode. 注意:请求到支付宝只需要做一次urlencode.
$rsa_sign = urlencode(rsaSign($data, $alipay_config['private_key']));
//把签名得到的sign和签名类型sign_type拼接在待签名字符串后面。
$data = $data.'&sign='.'"'.$rsa_sign.'"'.'&sign_type='.'"'.$alipay_config['sign_type'].'"';
//返回给客户端,建议在客户端使用私钥对应的公钥做一次验签,保证不是他人传输。
//echo $data;
$list['form'] = $data;
ajaxmsg('ok',1,$list);
}支付后通知接口: //支付宝支付通知
public function alipay_notify_url()
{
$alipay_config = Config::get('alipay_config');
//计算得出通知验证结果
$alipayNotify = new Alipaynotify($alipay_config);
if($alipayNotify->getResponse($_POST['notify_id']))//判断成功之后使用getResponse方法判断是否是支付宝发来的异步通知。
{
if($alipayNotify->getSignVeryfy($_POST, $_POST['sign'])) {//使用支付宝公钥验签
//——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
//获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
//商户订单号
$out_trade_no = $_POST['out_trade_no'];
//支付宝交易号
$trade_no = $_POST['trade_no'];
//交易状态
$trade_status = $_POST['trade_status'];
if($_POST['trade_status'] == 'TRADE_FINISHED') {
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//如果有做过处理,不执行商户的业务程序
//注意:
//退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
}
else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
$order_info = Db::name("order")->where("order_sn='{$out_trade_no}'")->find();
if($order_info['status'] == 0){
//更新支付状态和支付时间
Db::name("order")->where("id={$order_info['id']}")->save(
array(
'pay_ways'=>2,
"pay_sn"=>$trade_no,
'pay_time'=>time(),
'stauts'=>1
));
$this->fenxiao_account($out_trade_no);
}
}
//——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
echo "success"; //请不要修改或删除
}
else //验证签名失败
{
echo "sign fail";
}
}
else //验证是否来自支付宝的通知失败
{
echo "response fail";
}
}我写的就是一个标准的下订单的流程,主要是ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。