当前位置: 首页 > news >正文

购物网站集成支付宝

一、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."<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'=> "http://www.php2.com/eshop/index.php/Home/Order/pay_success",

中设置的方法。

10.     最后,可以使用支付宝提供的沙箱进行初步测试。

相关文章:

  • [one_demo_2]使用正则表达式过滤字符串
  • sphinx
  • 网站实现QQ登陆功能
  • dedecms
  • [one_demo_3]漩涡递增矩阵
  • CI
  • YII
  • php实现邮箱验证
  • php微信公众号开发
  • [one_demo_4]不使用第3个变量交换两个变量的值
  • [one_demo_5]命令行输入输出
  • [one_demo_6]逆置整数
  • [one_demo_7]求走到第50个台阶的走法多少种
  • [one_demo_8]十进制转二进制
  • [one_demo_9]判断数组是否递增
  • eclipse的离线汉化
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Twitter赢在开放,三年创造奇迹
  • 计算机在识别图像时“看到”了什么?
  • 前端存储 - localStorage
  • 前端路由实现-history
  • 首页查询功能的一次实现过程
  • 用jQuery怎么做到前后端分离
  • #### go map 底层结构 ####
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #微信小程序(布局、渲染层基础知识)
  • (¥1011)-(一千零一拾一元整)输出
  • (06)Hive——正则表达式
  • (1)(1.9) MSP (version 4.2)
  • (Git) gitignore基础使用
  • (补)B+树一些思想
  • (第一天)包装对象、作用域、创建对象
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (论文阅读40-45)图像描述1
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)一些感悟
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .net 7 上传文件踩坑
  • .net 获取url的方法
  • .NET文档生成工具ADB使用图文教程
  • .net中生成excel后调整宽度
  • @private @protected @public
  • @RequestBody的使用
  • [ C++ ] STL---string类的模拟实现
  • [04] Android逐帧动画(一)
  • [3D基础]理解计算机3D图形学中的坐标系变换
  • [Angular 基础] - 表单:响应式表单
  • [Asp.net mvc]国际化
  • [C++] new和delete
  • [CISCN2019 华东南赛区]Web11
  • [CTO札记]盛大文学公司名称对联
  • [DevEpxress]GridControl 显示Gif动画
  • [HNCTF 2022 WEEK2]easy_include 文件包含遇上nginx