//引入配置文件
public function __construct(){
//引入库文件
require 'res/lib/api/alipay/alipay_core.function.php';
require 'res/lib/api/alipay/alipay_md5.function.php';
require 'res/lib/api/alipay/alipay_notify.class.php';
require 'res/lib/api/alipay/alipay_submit.class.php';
//支付宝配置信息
$this->alipay_config = array(
//商户号
'partner' => '',
//收款支付宝账号
'seller_email' => '',
//安全检验码,以数字和字母组成的32位字符
'key' => '',
//签名方式 不需修改
'sign_type' => strtoupper('MD5'),
//字符编码格式 目前支持 gbk 或 utf-8
'input_charset' => strtolower('utf-8'),
//ca证书路径地址,用于curl中ssl校验
//请保证cacert.pem文件在当前文件夹目录中
'cacert' => getcwd().'/cacert.pem',
//访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http
'transport' => 'http',
);
}
/**
* 支付方法
* 2015-11-2
*/
public function pay($orderInfo){
//参数设置
$parameter=array(
//服务
"service" => "create_direct_pay_by_user",
//商户号
'partner' => $this->alipay_config['partner'],
//支付宝账号
'seller_email' => "",
//支付类型 必填,不能修改
'payment_type' => 1,
//服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数
'notify_url' => "http://xxx.com/alipay/pay/notifyurl",
//页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,不能写成http://localhost/
'return_url' => "http://xxx.com/alipay/pay/returnurl",
//商户订单号 商户网站订单系统中唯一订单号,必填
'out_trade_no' => $orderInfo['order_num'],
//订单名称 必填
'subject' => $orderInfo['order_name'],
//付款金额 必填
'total_fee' => $orderInfo['order_fee'],
//订单描述
'body' => $orderInfo['order_desc'],
//商品展示地址 需以http://开头的完整路径
'show_url' => '',
//防钓鱼时间戳 若要使用请调用类文件submit中的query_timestamp函数
'anti_phishing_key' => '',
//客户端的IP地址 非局域网的外网IP地址,如:221.0.0.1
'exter_invoke_ip' => '',
//编码
"_input_charset" => trim($this->alipay_config['input_charset']),
);
$alipaySubmit = new AlipaySubmit($this->alipay_config);
$html_text = $alipaySubmit->buildRequestForm($parameter,"post", "submit");
return $html_text;
}
/**
* 异步通知方法
* 2015-11-2
*/
public function notifyurl(){
$alipay_config=$this->alipay_config;
//计算得出通知验证结果
$alipayNotify = new AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyNotify();
if($verify_result) {
//验证成功
//获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
$out_trade_no = $_POST['out_trade_no']; //商户订单号
$trade_no = $_POST['trade_no']; //支付宝交易号
$trade_status = $_POST['trade_status']; //交易状态
$total_fee = $_POST['total_fee']; //交易金额
$notify_id = $_POST['notify_id']; //通知校验ID。
$notify_time = $_POST['notify_time']; //通知的发送时间。格式为yyyy-MM-dd HH:mm:ss。
$buyer_email = $_POST['buyer_email']; //买家支付宝帐号;
$parameter = array(
"out_trade_no" => $out_trade_no, //商户订单编号;
"trade_no" => $trade_no, //支付宝交易号;
"total_fee" => $total_fee, //交易金额;
"trade_status" => $trade_status, //交易状态
"notify_id" => $notify_id, //通知校验ID。
"notify_time" => $notify_time, //通知的发送时间。
"buyer_email" => $buyer_email, //买家支付宝帐号;
);
if($_POST['trade_status'] == 'TRADE_FINISHED' || $_POST['trade_status'] == 'TRADE_SUCCESS') {
//交易成功
//这里根据订单返回状态判断是否成功,并更新订单信息
}
echo "success"; //请不要修改或删除
}else {
//验证失败
echo "fail";
}
}
/**
* 返回页面方法
* 2015-11-2
*/
function returnurl(){
$alipay_config=$this->alipay_config;
$alipayNotify = new AlipayNotify($alipay_config);//计算得出通知验证结果
$verify_result = $alipayNotify->verifyReturn();
if($verify_result) {
//验证成功
//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表
$out_trade_no = $_GET['out_trade_no']; //商户订单号
$trade_no = $_GET['trade_no']; //支付宝交易号
$trade_status = $_GET['trade_status']; //交易状态
$total_fee = $_GET['total_fee']; //交易金额
$notify_id = $_GET['notify_id']; //通知校验ID。
$notify_time = $_GET['notify_time']; //通知的发送时间。
$buyer_email = $_GET['buyer_email']; //买家支付宝帐号;
$parameter = array(
"out_trade_no" => $out_trade_no, //商户订单编号;
"trade_no" => $trade_no, //支付宝交易号;
"total_fee" => $total_fee, //交易金额;
"trade_status" => $trade_status, //交易状态
"notify_id" => $notify_id, //通知校验ID。
"notify_time" => $notify_time, //通知的发送时间。
"buyer_email" => $buyer_email, //买家支付宝帐号
);
//交易成功
if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {
//更新订单信息
//跳转到指定页
header('Location:');
}
}else {
//验证失败
//如要调试,请看alipay_notify.php页面的verifyReturn函数
echo "支付失败!";
}
}