支付那些小事儿--支付宝支付

继上一篇《支付那些小事儿--微信支付》,我这次说一说支付宝支付,希望可以帮助小伙伴少走弯路,少入坑。话不多说,还是直接上代码吧。

注:
1.支付文件是从支付宝上直接拿过来的
2.依旧是TP框架
【1】将文件放入第三方类库:

(1)
  * 类名:AlipayConfig.php 

  * 功能:支付宝配置文件

  * 修改配置:
  
  // MD5密钥,安全检验码,由数字和字母组成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
        $alipay_config['key'] = '';//(**从支付宝中获取**)

  // 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
        $alipay_config['notify_url'] = 'http://' . $_SERVER['SERVER_NAME'] . '/index.php/Wine/PayCallback/alipay_notify';

  // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
        $alipay_config['return_url'] = 'http://' . $_SERVER['SERVER_NAME'] . '/index.php?g=Wine&m=Orders&a=alipay_return';

(2)
 * 类名:AlipayNotify.php

 * 功能:支付宝通知处理类

 * 详细:处理支付宝各接口通知返回

(3)
 * 类名:Alipay.php

 * 功能:手机网站支付接口接入页

 * 详细:处理支付宝各接口通知返回
class Alipay {

    public function submit($params) {
//建立请求
        $alipaySubmit = new AlipaySubmit($alipay_config);
        $html_text = $alipaySubmit->buildRequestForm($parameter, "get", "确认");
        return '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html>
        <head>
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
         <title>支付宝支付</title>
        </head>' . $html_text . '
        </body>
        </html>';
    }
}
(4)
 * 类名:notify_url.php

 * 功能:支付宝服务器异步通知页面

 * 详细:处理支付宝各接口通知返回

Paste_Image.png
【2】支付业务逻辑
(1)GoodsController.class.php 下提交订单 ajax_sure() 

public function ajax_sure() {
.
.
.
  $data['order_code'] = $order_code;
  $addr[0] = $_POST['prov'];
  $addr[1] = $_POST['city'];
  $addr[2] = $_POST['dist'];
  $addr[3] = $_POST['area'];
  $data['area'] = serialize($addr);
  $data['create_time'] = time();
  $data['update_time'] = time();
  $data['ip'] = $_SERVER['REMOTE_ADDR'];
   if ($data['pay_id'] == 1) {
          $data['order_status'] = 11; //已付款
          $data['status'] = '1';
   } else {
          $data['order_status'] = 10; //待付款
           $data['status'] = '1';
  }
   //函数调用 返回信息
  $this->Callback_url($data);

}

/**
     * 回调信息函数
     * @param type $data
     */
    public function Callback_url($data) {
        $o_model = D("Wine/Orders");
        $add_id = $o_model->add($data);
        if (!$add_id) {
            $this->error("订单提交失败,请稍后重试!");
        }
.
.
.
        if ('3' == $data['pay_id']) {
            //支付宝支付
            $msg = '正在为您跳转到支付宝支付页面,请等待……';
            $url = U("Pay/doalipay", array('o_id' => $add_id));
        }
        $this->success("订单提交成功!" . $msg, $url);
    }

(2)PayController.class.php 下
    /**
     * 支付页面
     */
    public function doalipay() {

        $o_id = I("get.o_id", 0, "intval");
        $info = $this->model->findone(array("a.id" => $o_id, 'a.status' => array('neq', '-1')));
        //10代表订单待支付的状态
        if ($info['order_status'] != 10) {
            $this->error("订单已支付!");
        }

        vendor("Payment.Alipay.Alipay");

        $alipay = new \Alipay();
        $param['order_sn'] = $info['order_code'];
//        $param['order_amount'] = $info['pay_price'];
        $param['order_amount'] = 0.01;//测试支付时,将支付价格设为0.01元,土豪朋友忽略此提示O(∩_∩)O~
        $param['order_subject'] = '支付宝支付测试';
        $param['return_url'] = 'http://' . $_SERVER['SERVER_NAME'] . '/index.php/Wine/Orders/pay_ok/o_id/'.$o_id;
        $return = $alipay->submit($param);
        echo $return;
        exit;
    }

就是这么简单几步,到此,支付宝支付的流程就已经结束了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,159评论 25 709
  • 星空的遐想 夜空的繁星,像在黑丝绒般的天幕上镶嵌了无数的珍珠。 在无意间看到了繁星点点的天空。天上的星星漂...
    于博倩阅读 221评论 0 0
  • 首先定义一下程序员:20多岁的小伙,工作时间长,一天除了三餐外还吃好几顿,尤其喜爱群起而吃之。而深夜指11点以后,...
    于莱阅读 262评论 0 0
  • 夷人欲学于夫子子急曰急欲出恭不云尿尿夷人惑子疾走夷人紧随子不禁尿于地夷人视之大喜匍匐其上细究之得母字二十有六遂成夷文。
    木夫009阅读 299评论 0 2
  • 今早,在喜马拉雅里收听了罗辑思维《成功很容易,毁灭也不难》音频节目,这期节目主要围绕《福特传》来展开。 罗胖分享...
    小炜践行者阅读 960评论 0 2