一、Introduction
支付宝在支付中是被应用的。网站中需要支付的地方可以集成支付宝。
二、集成支付宝的步骤
1. 选择合适的支付接口并申请生成帐号
打开alipay主页,选择我是商家用户。点产品大全,选择电脑网站支付。申请,申请成功后,会得到一个合作者ID,一个key。
2. 下载开发包和开发手册
在支付宝网站的开放平台的文档中心中,选择电脑网站支付,点SDK&Demo,下载php版的。
3. 复制解压的demo包到项目的根目录下
这这个demo包解压的文件夹中,
config.php配置信息,打开有详细说明。
pagepay/pagepay.php用于生成支付按钮或者去往支付按钮跳转的页面。
notify_url.php用于接收支付宝发给本网站的消息,当支付成功就会发送给消息
return_url.php跳回的地址
4. 开启php的php_openssl.dll模块
5. 在下单成功后使用demo包中的代码生成支付按钮
/**
* 为一个订单生成支付宝支付按钮
*/
functionmakeAlipayBtn($orderInfo)
{
returnrequire('./alipay/pagepay/pagepay.php');
}
修改支付宝提供的pagepay.php中的参数为商品实际的参数以及用户的appid和密匙等。
//商户订单号,商户网站订单系统中唯一订单号,必填
$out_trade_no =$orderInfo['orderId'];
//订单名称,必填
$subject =$orderInfo['orderName'];
//付款金额,必填
$total_amount =$orderInfo['price'];
//商品描述,可空
$body = $orderInfo['desc'];
//设置按钮名称
$btnName = $orderInfo['apliBtn'];
在config.php文件中设置
//异步通知地址
'notify_url' =>"http://www.php2.com/eshop/index.php/Home/Order/receive",
//同步跳转,支付成功后跳转页面
'return_url' => "http://www.php2.com/eshop/index.php/Home/Order/pay_success",
//等其他参数
为了防止这个按钮自动跳转,修改demo文件的源码,在/aop/test/AopClient.php中,注释掉跳转的js代码:
//submit按钮控件请不要含有name属性
$sHtml =$sHtml."";
// $sHtml= $sHtml."";
return$sHtml;
6. 调用函数
$btn =makeAlipayBtn($orderInfo);
//输出动态数据到页面
$this->assign(array(
'btn' => $btn,
));
7. 在页面输出按钮
8. 编写接收支付成功消息的方法
首先,修改notify_url.php文件
主要是修改付款成功后该订单的状态,付款时间,或者有会员积分的,修改会员积分。
为此封装一个方法在订单模型中,比如:
/**
* 订单支付后,设置订单状态为已支付
*/
public functionsetPaid($orderId)
{
//更新订单的支付状态
$this->where(array(
'id'=> array('eq', $orderId),
))->save(array(
'pay_status'=> '是',
'pay_time'=> time(),
));
//更新会员积分
$tp =$this->field('total_price,member_id')->find($orderId);
$memberModel =M('member');//因为使用大D函数会调用修改前的钩子函数,可能会导致出错,所以调用大M函数
$memberModel->where(array(
'id'=> array('eq', $tp['member_id']),
))->setInc('jifen',$tp['total_price']);
}
然后在notify_url.php中调用这个方法
else if($_POST['trade_status'] == 'TRADE_SUCCESS') {
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//请务必判断请求时的total_amount与通知时获取的total_fee为一致的
//如果有做过处理,不执行商户的业务程序
//注意:
//付款完成后,支付宝系统发送该交易状态通知
$orderModel =D('Admin/Order');
$orderModel->select($out_trade_no);
}
然后编写接收消息的方法并引入这个notify_url.php文件
/**
* 接收处理支付成功返回的消息
*/
public function receive()
{
//接收支付宝支付成功的小时
require('./alipay/nofity_url.php');
}
9. 编写客户付款成功后返回页面的方法
也就是
//同步跳转,支付成功后跳转页面
'return_url'=> "http://www.php2.com/eshop/index.php/Home/Order/pay_success",
中设置的方法。
10. 最后,可以使用支付宝提供的沙箱进行初步测试。