alipay_config.php
<?php
$alipay_config['appid']='appid';//商户密钥
$alipay_config['rsaPrivateKey']='rsaPrivateKey';//私钥
$alipay_config['alipayrsaPublicKey']='';
$alipay_config['partner']='partner';//(商家的参数;新版本的好像用不到)
$alipay_config['input_charset']=strtolower('utf-8');//编码
$alipay_config['notify_url']='http://www.xx.com/api/alipay/notify_url.php';//回调地址(支付宝支付成功后回调修改订单状态的地址)
$alipay_config['payment_type']=1;//(固定值)
$alipay_config['seller_id']='xx@xxx.com';//收款商家账号
$alipay_config['charset']='utf-8';//编码
$alipay_config['sign_type']='RSA';//签名方式
$alipay_config['version']="1.0";//固定值
$alipay_config['url']= 'https://openapi.alipay.com/gateway.do';//固定值
$alipay_config['method']= 'alipay.trade.app.pay';//固定值
?>
alipayapi.php
<?php header("Content-type:text/html;charset=utf-8");
require_once dirname(__FILE__).'/'.'alipay_config.php';
require_once dirname(__FILE__).'/'.'aop/AopClient.php';
function getAlipayParamsToString($subject,$body,$out_trade_no,$price,$timeout_express='30m'){
global $alipay_config;
//构造业务请求参数的集合(订单信息)
$content = array();
$content['timeout_express'] = $timeout_express;//该笔订单允许的最晚付款时间
$content['product_code'] = 'QUICK_MSECURITY_PAY';//销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY
$content['total_amount'] = floatval($price);//订单总金额(必须定义成浮点型)
$content['subject'] = $subject;//商品的标题/交易标题/订单标题/订单关键字等
$content['body'] = $body;
$content['out_trade_no'] = $out_trade_no;//商户网站唯一订单号
$con = json_encode($content);//$content是biz_content的值,将之转化成字符串
//公共参数
$param = array();
$Client = new AopClient();//实例化支付宝sdk里面的AopClient类,下单时需要的操作,都在这个类里面
$param['app_id'] = $alipay_config['appid'];//支付宝分配给开发者的应用ID
$param['biz_content'] = $con;//业务请求参数的集合,长度不限,json格式
$param['charset'] = $alipay_config['charset'];//请求使用的编码格式
$param['method'] = $alipay_config['method'];//接口名称
$param['sign_type'] = $alipay_config['sign_type'];//商户生成签名字符串所使用的签名算法类型
$param['timestamp'] = date('Y-m-d H:i:s', time());//发送请求的时间
$param['version'] = $alipay_config['version'];//调用的接口版本,固定为:1.0
$param['notify_url'] = $alipay_config['notify_url'];//支付宝服务器主动通知地址
$paramStr = $Client->getSignContent($param);
$sign = $Client->alonersaSign($paramStr,$alipay_config['rsaPrivateKey'],'RSA');
$param['sign'] = $sign;
return $Client->getSignContentUrlencode($param);
}
?>
notify_url.php
<?php
header("Content-type:text/html;charset=utf-8");
require_once 'alipay_config.php';
require_once 'aop/AopClient.php';
$json=array();
parse_str(file_get_contents("php://input"),$json);
$Client = new AopClient();
$check=$Client->rsaCheckV1($json,"rsa_public_key.so");
//第一次验证成功
if($check==true){
$url="https://mapi.alipay.com/gateway.do?service=notify_verify&partner=".$json["partner"]."¬ify_id=".$json["notify_id"];
//第二次验证成功
if(file_get_contents($url)==true)
{
if($json["trade_status"]=="TRADE_SUCCESS"){
//收款的账号或APPID对不起来
if($json["seller_email"]!=$alipay_config['seller_id']||$json["app_id"]!=$alipay_config["appid"]){
echo "fail";
return;
}
echo "success";
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
//如果有做过处理,不执行商户的业务程序
//注意:
//退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
//调试用,写文本函数记录程序运行情况是否正常
//logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
}
else if($json["trade_status"]=="TRADE_FINISHED"){
//收款的账号或APPID对不起来
if($json["seller_email"]!=$alipay_config['seller_id']||$json["app_id"]!=$alipay_config["appid"]){
echo "fail";
return;
}
echo "success";
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//请务必判断请求时的total_amount、seller_id与通知时获取的total_amount、seller_id为一致的
//如果有做过处理,不执行商户的业务程序
//注意:
//退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
//调试用,写文本函数记录程序运行情况是否正常
//logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
}
}
else{
echo "fail";
}
}
else{
echo "fail";
}
?>