一、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' =>"/eshop/index.php/Home/Order/receive",//同步跳转,支付成功后跳转页面'return_url' => "/eshop/index.php/Home/Order/pay_success",//等其他参数
为了防止这个按钮自动跳转,修改demo文件的源码,在/aop/test/AopClient.php中,注释掉跳转的js代码:
//submit按钮控件请不要含有name属性$sHtml =$sHtml."<input type='submit' value='$btnName'style='''></form>";// $sHtml= $sHtml."<script>document.forms['alipaysubmit'].submit();</script>";return$sHtml;
6.调用函数
$btn =makeAlipayBtn($orderInfo);//输出动态数据到页面$this->assign(array('btn' => $btn,));
7.在页面输出按钮
<p><?phpecho $btn;?></p>
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'=> "/eshop/index.php/Home/Order/pay_success",
中设置的方法。
10. 最后,可以使用支付宝提供的沙箱进行初步测试。