config文件配置支付宝信息
//支付宝 支付配置
'ALI_CONFIG' => array(
'gatewayUrl' => 'https://openapi.alipay.com/gateway.do',//支付宝网关(固定)
'appId' => 'APPID即创建应用后生成',
'rsaPrivateKey' => '由开发者自己生成: 请填写开发者私钥去头去尾去回车,一行字符串',
'alipayrsaPublicKey' => '支付宝公钥,由支付宝生成: 请填写支付宝公钥,一行字符串',
'notifyUrl' => 'http://www.xxxx.com/api.php/CallBack/orderCallBackzfb', // 支付成功通知地址
'returnUrl' => 'http://www.xxxx.com/index.php/Index/index1', // 支付后跳转地址
)
controller支付宝支付接口,前台用form表单提交
/**
* 支付宝支付
*/
public function orderAlipay(){
if (IS_POST){
Vendor('Alipay.aop.AopClient');
Vendor('Alipay.aop.request.AlipayTradeWapPayRequest');
$order_no = $_REQUEST['order_no'];//订单号
$order = M("order")->where("order_no='".$order_no."'")->find();
if($order['type'] == 1){
$goods = M("fish")->where("id=".$order['goods_id'])->find();
}else{
$goods = M("product")->where("id=".$order['goods_id'])->find();
}
$out_trade_no = $order_no;
$body = '支付信息';
$subject = $goods['name'];//商品名
$order_amount = $order['price'];//订单加个
$aliConfig = C('ALI_CONFIG');
$aop = new \AopClient();
$aop->gatewayUrl = $aliConfig['gatewayUrl'];
$aop->appId = $aliConfig['appId'];
$aop->rsaPrivateKey = $aliConfig['rsaPrivateKey'];
$aop->alipayrsaPublicKey=$aliConfig['alipayrsaPublicKey'];
$aop->apiVersion = '1.0';
$aop->postCharset='UTF-8';
$aop->format='json';
$aop->signType='RSA2';
$request = new \AlipayTradeWapPayRequest ();
$bizContent = "{" .
" \"body\":\"$body.\"," .
" \"subject\":\"$subject\"," .
" \"out_trade_no\":\"$out_trade_no\"," .
" \"timeout_express\":\"90m\"," .
" \"total_amount\":$order_amount," .
" \"product_code\":\"QUICK_WAP_WAY\"" .
" }";
$request->setBizContent($bizContent);
$request->setNotifyUrl($aliConfig['notifyUrl']);
$request->setReturnUrl($aliConfig['returnUrl']);
$result = $aop->pageExecute ( $request);
echo $result;
}else{
echo 'sorry,非法请求失败';
}
}
回调接口
/**
* 支付宝回调
*/
public function alipayCallBack(){
Vendor('Alipay.wappay.service.AlipayTradeService');
$arr=$_POST;
$aliConfig = C('ALI_CONFIG');
$alipaySevice = new \AlipayTradeService($aliConfig);
$alipaySevice->writeLog(var_export($_POST,true));
$result = $alipaySevice->check($arr);
if($result) {//验证成功
//请在这里加上商户的业务逻辑程序代
//——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
//获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
//商户订单号
$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_amount与通知时获取的total_fee为一致的
//如果有做过处理,不执行商户的业务程序
//注意:
//退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
}
else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//请务必判断请求时的total_amount与通知时获取的total_fee为一致的
//如果有做过处理,不执行商户的业务程序
//注意:
//付款完成后,支付宝系统发送该交易状态通知
}
//——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
echo "success"; //请不要修改或删除
}else {
//验证失败
echo "fail"; //请不要修改或删除
}
}