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

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

注:
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 '
        
        
         
         支付宝支付
        ' . $html_text . '
        
        ';
    }
}
(4)
 * 类名:notify_url.php

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

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

支付那些小事儿--支付宝支付_第1张图片
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;
    }

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

你可能感兴趣的:(支付那些小事儿--支付宝支付)