购物网站集成支付宝

一、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.     最后,可以使用支付宝提供的沙箱进行初步测试。

你可能感兴趣的:(WEB)