天天看点

会员中心—6—商品订单提交与支付

控制器-订单管理:

<?php
//会员中心
class MemberAction extends CommonAction {
    public function _initialize(){
        parent::_initialize();
        //未付款
        $unpaid=M('Order')->where(array('user_id'=>$_SESSION['qtuid'],'status'=>0))->count();
        //待发货
        $notship=M('Order')->where(array('user_id'=>$_SESSION['qtuid'],'status'=>1))->count();
        //待收货
        $notrec=M('Order')->where(array('user_id'=>$_SESSION['qtuid'],'status'=>2))->count();
        //待评价
        $notev=M('Order')->where(array('user_id'=>$_SESSION['qtuid'],'status'=>3))->count();

        $this->assign("unpaid",$unpaid);
        $this->assign("notship",$notship);
        $this->assign("notrec",$notrec);
        $this->assign("notev",$notev);
    }
 
    //订单页面
    public function order(){
    	$id = I("get.id");
    	$where['user_id']=$_SESSION['qtuid'];

    	if($id==1){
            $where['status']=0;
    	}elseif($id==2){
            $where['status']=1;
    	}elseif($id==3){
            $where['status']=2;
    	}elseif($id==4){
            $where['status']=3;
    	}else{
    		$where['status']=0;
    	}

	//订单列表
    	$orderlist=M('Order')->where($where)->select();
    	foreach($orderlist as $k=>$v){
    		$orderlist[$k][procount]=M('Orderdetail')->where("OrderID=$v[id]")->count();
    		$orderlist[$k][child]=M('Orderdetail')->where("OrderID=$v[id]")->select();	
    	}
        $this->assign("orderlist",$orderlist);

        $this->display('Order/index');  		

    }
    
    //订单删除
    public function orderdelete(){
    	$id = I("get.id");
		$m = M("Order");
		$n = M("Orderdetail");
		$where['user_id']=$_SESSION['qtuid'];
		if($id==1){
			$where['status']=0;
		};
		$order=$m->where($where)->select();
		$id_arr=array(); 
		foreach($order as $k=>$v){
	        $id_arr[]=$v['id'];  
	    } 
	    $ids=implode(',',$id_arr);

		$del = $m->where($where)->delete();
		if($del){
			$n->where(array("OrderID in ($ids)"))->delete();
			$this->success("删除成功",U("Member/order"));
		}else{
			$this->error("删除失败");
		}
	}
}

           
<?php
//订单
class OrderAction extends CommonAction {
    public function _initialize(){
        parent::_initialize();
        $this->isLogin();

        $orderclass = $this->getProList2("项目服务",$this->lang,0,1,0,0); 
        foreach($orderclass as $k=>$v){
			 $orderclass[$k][proclasscontent]=strip_tags($v[proclasscontent]);//去除编辑器中P标签
		}   
        $this->assign("orderclass",$orderclass);

    }

    public function index(){
        $tid = I("get.tid");
        if($tid==""){
            $tid=1;
        }
        //分类名称
        $type_name = M("Proclass")->where(array('id'=>$tid))->field("id,proclasscontent")->find();
        $type_name[proclasscontent]=strip_tags($type_name[proclasscontent]);
        if($tid==1){
            $type_name[proclasscontent]='全部订单';      
        }
        $this->assign("type_name",$type_name);
        //订单列表
        $orderlist = $this->getOrder($tid,$this->lang,$_SESSION['qtuid'],0,1,1,5);
        foreach($orderlist as $k=>$v){
            $addtime=$v[addtime];
            $oldday=date_create(date("Y-m-d",$addtime));
            $teday=date_create(date('Y-m-d'));
            $diff=date_diff($oldday,$teday);
			$orderlist[$k][day]=$diff->days;
		}  
        $this->assign("orderlist",$orderlist);

        // dump($orderlist);

        //未付款
        $Unpaid = $this->getOrder($tid,$this->lang,$_SESSION['qtuid'],0,1,0,0,2);
        $ucount=count($Unpaid);
        $this->assign("ucount",$ucount);
        //退款
        $Refund = $this->getOrder($tid,$this->lang,$_SESSION['qtuid'],0,1,0,0,-1);
        $rcount=count($Refund);
        $this->assign("rcount",$rcount);

		$this->display();
    }

    //订单确认
    public function confirm_order(){
        $uid = $_SESSION['qtuid'];
        $gid = I("get.gid");
        if($gid!=""){
            $data = M("Product")->where(array('id'=>$gid))->find();
            $cartdata=array($data[id]=>array("id"=>$data[id],"uid"=>$uid,"name"=>$data[proname],"price"=>$data[price],"img"=>$data[prophoto],"prointo"=>$data[prointo],"addtime"=>time(),"num"=>1));
            $tid=$gid;
        }else{
            $cartdata=$_SESSION['cart1']; 
            $tid=0;           
        }
        $this->assign ('cartdata', $cartdata);
        $this->assign ('cartcount', count($cartdata));
        $this->assign ('tid', $tid);
        
        $address = M("Address")->where(array('uid'=>$uid,'isdefault'=>1))->find();
        $this->assign ('address', $address);
        if($address==null){
            $this->assign ('isaddress', 0);
        }else{
            $this->assign ('isaddress', 1);
        }

        $this->display();

    }

    public function orderpay(){
        header("Content-type: text/html; charset=utf-8");
        $gid = I("get.gid"); 
        //默认收货地址
        $uid = $_SESSION['qtuid'];
        $address = M("Address")->where(array('uid'=>$uid,'isdefault'=>1))->find();
        $this->assign ('address', $address);

        if($gid!=""){
            $goods = M("Product")->where(array('id'=>$gid))->find();
            $pricecount=$goods['price'];
            $order_data['tradeid']=date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);  
            $order_data['name']=$address['receiver'];  
            $order_data['phone']=$address['tel'];  
            $order_data['address']=$address['province'].$address['city'].$address['area'].$address['address'];  
            $order_data['user_id']=$uid;  
            $order_data['total_price']=$pricecount; 
            $order_data['addtime']=time(); 

            $oinfo=M('Order')->add($order_data); 
            $order=M('Order')->field('id')->find($oinfo);   
            $order_id=$order['id']; 

            if($oinfo){
                $order_goods_data['OrderID']=$order_id;   
                $order_goods_data['ProductID']=$goods['id'];  
                $order_goods_data['ProductName']=$goods['proname'];  
                $order_goods_data['prophoto']=$goods['prophoto']; 
                $order_goods_data['Nums']=1;
                $order_goods_data['Price']=$goods['price']; 
                $order_goods_data['Total_price']=$goods['price']*1;  
                $sinfo=D('Orderdetail')->add($order_goods_data); 

                $this->redirect('Order/pay',array('id'=>$order_id));
            }


        }else{
            $cartdata=$_SESSION['cart1'];
            $id_arr=array();  
            foreach($cartdata as $k=>$v){
                $id_arr[]=$v['id'];  
            } //把购物车id(即商品id组成数组)
            $ids=implode(',',$id_arr);//把商品id由数组变为逗号隔开,如:string(5) "11,12"
            $goods=M('Product')->where("id in ($ids)")->select(); 
            // dump($goods);
            //商品总价格
            $pricecount=$this->cart->getPrice();

            $order_data=array();  
            foreach($goods as $k=>$v){  
                $order_data['tradeid']=date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);  
                $order_data['name']=$address['receiver'];  
                $order_data['phone']=$address['tel'];  
                $order_data['address']=$address['province'].$address['city'].$address['area'].$address['address'];  
                $order_data['user_id']=$uid;  
                $order_data['total_price']=$pricecount; 
                $order_data['addtime']=time();  
            }
            
            $oinfo=M('Order')->add($order_data); 
            $order=M('Order')->field('id')->find($oinfo);   
            $order_id=$order['id']; 

            if($oinfo){  
                $order_goods_data=array();
                foreach($goods as $k=>$v){  
                    $carpro=$this->cart->getItem($v['id']);
                    $num=$carpro[num];
                    $order_goods_data['OrderID']=$order_id;   
                    $order_goods_data['ProductID']=$v['id'];  
                    $order_goods_data['ProductName']=$v['proname'];  
                    $order_goods_data['prophoto']=$v['prophoto']; 
                    $order_goods_data['Nums']=$num;
                    $order_goods_data['Price']=$v['price']; 
                    $order_goods_data['Total_price']=$v['price']*$num;  
                    $sinfo=D('Orderdetail')->add($order_goods_data);                 
                } 

                $this->cart->clear();
                $this->redirect('Order/pay',array('id'=>$order_id));
            }


        }


        // $this->display();
    }

    public function pay(){
    	$id = I("get.id");
    	$where['tp_order.id']=$id;
    	$m=M('Order');
    	$data=$m->where($where)->find();
        $this->assign("data",$data);

		$this->display();

    }

    public function topay(){
        $id = I("get.id");
        $where['id']=$id;
        $m=M('Order');
        $ordData=$m->where($where)->find();
        $this->assign("ordData",$ordData);
        // dump($ordData);

    }


}
           

订单确认-confirm_order.php

<div class="user-right">
    <h4>确认订单信息</h4>
    <div class="user-con">
        <div class="order-info">
            <div class="order-l">
                <volist name="cartdata" id="vo">
                <div class="order-text">
                    <div class="col-sm-4 col-xs-5 order-img"><img src="__PUBLIC__/Uploads/Product/<{$vo.img}>" class="img-responsive"/></div>
                    <div class="col-sm-8 col-xs-7 order-r">
                        <p>商品名称:<{$vo.name}></p>
                        <p>订单日期:<{$vo.addtime|date="Y-m-d",###}></p>
                        <p>数量:<{$vo.num}></p>
                        <p>单价:¥<{$vo.price}></p>
                    </div>
                    <div class="clear"></div>
                </div>
                </volist>
            </div>
            <div class="order-l">
                <div class="order-title">
                    收货<a href="<{:U('Member/address')}>" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  class="fr">管理收货地址</a>
                </div>
                <div class="order-text">
                    <ul class="order-ul">
                        <if condition="$isaddress eq 1">
                        <li class="on">
                            <p><{$address.receiver}>(收)        <{$address.tel}><br /><{$address.province}><{$address.city}><{$address.area}><{$address.address}></p>
                        </li>
                        </if>
                        <li>
                            <a href="<{:U('Member/address')}>" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  class="more">
                                <img src="__CN__/img/jia.png" />
                                <p>添加新地址</p>
                            </a>
                        </li>
                    </ul>
                </div>
                
                <div class="order-pay order-btn">
                    <span>¥<{$cartprice}></span>
                    <!-- <a href="<{:U('Order/orderpay',array('gid'=>$gid))}>" target="_blank" rel="external nofollow"  class="order-ok">立即付款</a> -->
                    <a href="javascript:void(0)" target="_blank" rel="external nofollow"  οnclick="check()" class="order-ok">立即付款</a>
                </div>
            </div>
        </div>
    </div>
</div>
---------------------------------------------------------------------------------------------
<script type="text/javascript">
function check(){
    var address = <{$isaddress}>;
    var tid = <{$tid}>;
    if(tid==0){
        var str = "<{:U('Order/orderpay')}>";
        url =  str;        
    }else{
        var str = "<{:U('Order/orderpay',array('gid'=>'tid'))}>";
        url =  str.replace("tid",tid);    
    }

    if(address == 0){
      alert('请添加收货地址!');
      return false;
    }else{
        location.href=url;
    }
}
</script>
           

注:添加地址可以查看会员中心—2—收货地址管理

选择支付方式-pay.php

<div class="user-right">
	<h3>选择支付方式</h3>
	<div class="user-con">
		<div class="order-info">
			<div class="order-l">
				<div class="order-text">
					<ul class="pay-li">
						<form method="POST" action="<{:U('Pay/doalipay')}>" id="form1">
						<li class="col-sm-6">
							<input type="hidden" name="trade_no" value="<{$data.tradeid}>" />
							<input type="hidden" name="Uname" value="<{$data.name}>" />
							<input type="hidden" name="ordtotal_fee" value="<{$data.total_price}>" />
							<input type="hidden" name="productHtml" value="<{:U('Product/index')}>" />
							<a href="#" target="_blank" rel="external nofollow"  οnclick="$('#form1').submit()"><img src="__CN__/img/pay01.jpg" class="img-responsive"/></a>
						</li>
						</form>
						<li class="col-sm-6"><a href="" target="_blank" rel="external nofollow" >
							<img src="__CN__/img/pay02.jpg" class="img-responsive"/></a>
						</li>
						<div class="clear"></div>
					</ul>
				</div>
			</div>
		</div>
	</div>
</div>
           

控制器-支付宝支付

<?php

class PayAction extends CommonAction {
        //在类初始化方法中,引入相关类库    
    public function _initialize() {
        vendor('Alipay.Corefunction');
        vendor('Alipay.Md5function');
        vendor('Alipay.Notify');
        vendor('Alipay.Submit');    
    }
    
    //doalipay方法
    /*该方法其实就是将接口文件包下alipayapi.php的内容复制过来
      然后进行相关处理
    */
    public function doalipay(){
        /*********************************************************
        把alipayapi.php中复制过来的如下两段代码去掉,
        第一段是引入配置项,
        第二段是引入submit.class.php这个类。
       为什么要去掉??
        第一,配置项的内容已经在项目的Config.php文件中进行了配置,我们只需用C函数进行调用即可;
        第二,这里调用的submit.class.php类库我们已经在PayAction的_initialize()中已经引入;所以这里不再需要;
        *****************************************************/
       // require_once("alipay.config.php");
       // require_once("lib/alipay_submit.class.php");
       
       //这里我们通过TP的C函数把配置项参数读出,赋给$alipay_config;
       $alipay_config=C('alipay_config');  
 
        /**************************请求参数**************************/
        //这里C方法表示获取二级配置参数(conf->config)
        $payment_type = "1"; //支付类型 //必填,不能修改
        $notify_url = C('alipay.notify_url'); //服务器异步通知页面路径
        $return_url = C('alipay.return_url'); //页面跳转同步通知页面路径
        $seller_email = C('alipay.seller_email');//卖家支付宝帐户必填

        $out_trade_no = $_POST['trade_no'];//商户订单号 通过支付页面的表单进行传递,注意要唯一!
        $subject = $_POST['Uname'];  //订单名称 //必填 通过支付页面的表单进行传递
        $total_fee = $_POST['ordtotal_fee'];   //付款金额  //必填 通过支付页面的表单进行传递
        $body = "";  //订单描述 通过支付页面的表单进行传递
        $show_url = $_POST['productHtml'];  //商品展示地址 通过支付页面的表单进行传递
        $anti_phishing_key = "";//防钓鱼时间戳 //若要使用请调用类文件submit中的query_timestamp函数
        $exter_invoke_ip = get_client_ip(); //客户端的IP地址 
        /************************************************************/
    
        //构造要请求的参数数组,无需改动
        $parameter = array(
            "service" => "create_direct_pay_by_user",
            "partner" => trim($alipay_config['partner']),
            "payment_type"    => $payment_type,
            "notify_url"    => $notify_url,
            "return_url"    => $return_url,
            "seller_email"    => $seller_email,
            "out_trade_no"    => $out_trade_no,
            "subject"    => $subject,
            "total_fee"    => $total_fee,
            "body"            => $body,
            "show_url"    => $show_url,
            "anti_phishing_key"    => $anti_phishing_key,
            "exter_invoke_ip"    => $exter_invoke_ip,
            "_input_charset"    => trim(strtolower($alipay_config['input_charset']))
            );
            //建立请求
            $alipaySubmit = new AlipaySubmit($alipay_config);
            $html_text = $alipaySubmit->buildRequestForm($parameter,"post", "确认");
            echo $html_text;
    }
    
        /******************************
        服务器异步通知页面方法
        其实这里就是将notify_url.php文件中的代码复制过来进行处理
        
        *******************************/
    function notifyurl(){
        /*
        同理去掉以下两句代码;
        */ 
        //require_once("alipay.config.php");
        //require_once("lib/alipay_notify.class.php");
        
        //这里还是通过C函数来读取配置项,赋值给$alipay_config
        $alipay_config=C('alipay_config');
        //计算得出通知验证结果
        $alipayNotify = new AlipayNotify($alipay_config);
        $verify_result = $alipayNotify->verifyNotify();
        if($verify_result) {
               //验证成功
                   //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
           $out_trade_no   = $_POST['out_trade_no'];      //商户订单号
           $trade_no       = $_POST['trade_no'];          //支付宝交易号
           $trade_status   = $_POST['trade_status'];      //交易状态
           $total_fee      = $_POST['total_fee'];         //交易金额
           $notify_id      = $_POST['notify_id'];         //通知校验ID。
           $notify_time    = $_POST['notify_time'];       //通知的发送时间。格式为yyyy-MM-dd HH:mm:ss。
           $buyer_email    = $_POST['buyer_email'];       //买家支付宝帐号;
                   $parameter = array(
             "out_trade_no"     => $out_trade_no, //商户订单编号;
             "trade_no"     => $trade_no,     //支付宝交易号;
             "total_fee"     => $total_fee,    //交易金额;
             "trade_status"     => $trade_status, //交易状态
             "notify_id"     => $notify_id,    //通知校验ID。
             "notify_time"   => $notify_time,  //通知的发送时间。
             "buyer_email"   => $buyer_email,  //买家支付宝帐号;
           );
           if($_POST['trade_status'] == 'TRADE_FINISHED') {
                       //
           }else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {                          
            if(!checkorderstatus($out_trade_no)){
               orderhandle($parameter); 
                           //进行订单处理,并传送从支付宝返回的参数;
               }
            }
                echo "success";        //请不要修改或删除
         }else {
                //验证失败
                echo "fail";
        }    
    }
    
    /*
    页面跳转处理方法;
    这里其实就是将return_url.php这个文件中的代码复制过来,进行处理; 
    */
    function returnurl(){
        //头部的处理跟上面两个方法一样,这里不罗嗦了!
        $alipay_config=C('alipay_config');
        $alipayNotify = new AlipayNotify($alipay_config);//计算得出通知验证结果
        $verify_result = $alipayNotify->verifyReturn();
        if($verify_result) {
            //验证成功
            //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表
            $out_trade_no   = $_GET['out_trade_no'];      //商户订单号
            $trade_no       = $_GET['trade_no'];          //支付宝交易号
            $trade_status   = $_GET['trade_status'];      //交易状态
            $total_fee      = $_GET['total_fee'];         //交易金额
            $notify_id      = $_GET['notify_id'];         //通知校验ID。
            $notify_time    = $_GET['notify_time'];       //通知的发送时间。
            $buyer_email    = $_GET['buyer_email'];       //买家支付宝帐号;
                
            $parameter = array(
                "out_trade_no"     => $out_trade_no,      //商户订单编号;
                "trade_no"     => $trade_no,          //支付宝交易号;
                "total_fee"      => $total_fee,         //交易金额;
                "trade_status"     => $trade_status,      //交易状态
                "notify_id"      => $notify_id,         //通知校验ID。
                "notify_time"    => $notify_time,       //通知的发送时间。
                "buyer_email"    => $buyer_email,       //买家支付宝帐号
            );
            
            if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS'){
                if(!checkorderstatus($out_trade_no)){
                         orderhandle($parameter);  //进行订单处理,并传送从支付宝返回的参数;
                }
                    $this->redirect(C('alipay.successpage'));//跳转到配置项中配置的支付成功页面;
            }else{
                    echo "trade_status=".$_GET['trade_status'];
                    $this->redirect(C('alipay.errorpage'));//跳转到配置项中配置的支付失败页面;
            }
        }else {
            //验证失败
            //如要调试,请看alipay_notify.php页面的verifyReturn函数
            echo "支付失败!";
        }

    }


  
}
           

控制器-微信支付:

<?php
// 微信支付
class WxJsAPIAction extends CommonAction {
        //在类初始化方法中,引入相关类库    
    public function _initialize() {
        //引入WxPayPubHelper
        vendor('WxPayPubHelper.WxPayPubHelper');    
    }

    public function createQrcode(){
        //使用统一支付接口
        $unifiedOrder = new \UnifiedOrder_pub();
        
        //设置统一支付接口参数
        //设置必填参数
        //appid已填,商户无需重复填写
        //mch_id已填,商户无需重复填写
        //noncestr已填,商户无需重复填写
        //spbill_create_ip已填,商户无需重复填写
        //sign已填,商户无需重复填写
        $unifiedOrder->setParameter("body","贡献一分钱");//商品描述
        //自定义订单号,此处仅作举例
        $timeStamp = time();
        $out_trade_no = C('WxPayConf_pub.APPID')."$timeStamp";
        $unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号 
        $unifiedOrder->setParameter("total_fee","1");//总金额
        $unifiedOrder->setParameter("notify_url", C('WxPayConf_pub.NOTIFY_URL'));//通知地址 
        $unifiedOrder->setParameter("trade_type","NATIVE");//交易类型
        //非必填参数,商户可根据实际情况选填
        //$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商户号  
        //$unifiedOrder->setParameter("device_info","XXXX");//设备号 
        //$unifiedOrder->setParameter("attach","XXXX");//附加数据 
        //$unifiedOrder->setParameter("time_start","XXXX");//交易起始时间
        //$unifiedOrder->setParameter("time_expire","XXXX");//交易结束时间 
        //$unifiedOrder->setParameter("goods_tag","XXXX");//商品标记 
        //$unifiedOrder->setParameter("openid","XXXX");//用户标识
        //$unifiedOrder->setParameter("product_id","XXXX");//商品ID
        
        //获取统一支付接口结果
        $unifiedOrderResult = $unifiedOrder->getResult();
        
        //商户根据实际情况设置相应的处理流程
        if ($unifiedOrderResult["return_code"] == "FAIL") 
        {
            //商户自行增加处理流程
            echo "通信出错:".$unifiedOrderResult['return_msg']."<br>";
        }
        elseif($unifiedOrderResult["result_code"] == "FAIL")
        {
            //商户自行增加处理流程
            echo "错误代码:".$unifiedOrderResult['err_code']."<br>";
            echo "错误代码描述:".$unifiedOrderResult['err_code_des']."<br>";
        }
        elseif($unifiedOrderResult["code_url"] != NULL)
        {
            //从统一支付接口获取到code_url
            $code_url = $unifiedOrderResult["code_url"];
            //商户自行增加处理流程
            //......
        }
        $this->assign('out_trade_no',$out_trade_no);
        $this->assign('code_url',$code_url);
        $this->assign('unifiedOrderResult',$unifiedOrderResult);
        
        $this->display('qrcode');
    }


    public function jsApiCall(){
        //使用jsapi接口
        $jsApi = new \JsApi_pub();
        
        //=========步骤1:网页授权获取用户openid============
        //通过code获得openid
        if (!isset($_GET['code']))
        {
            //触发微信返回code码
            $url = $jsApi->createOauthUrlForCode(C('WxPayConf_pub.JS_API_CALL_URL'));
            Header("Location: $url");
        }else
        {
            //获取code码,以获取openid
            $code = $_GET['code'];
            $jsApi->setCode($code);
            $openid = $jsApi->getOpenId();
        }
        
        //=========步骤2:使用统一支付接口,获取prepay_id============
        //使用统一支付接口
        $unifiedOrder = new \UnifiedOrder_pub();
        
        //设置统一支付接口参数
        //设置必填参数
        //appid已填,商户无需重复填写
        //mch_id已填,商户无需重复填写
        //noncestr已填,商户无需重复填写
        //spbill_create_ip已填,商户无需重复填写
        //sign已填,商户无需重复填写
        $unifiedOrder->setParameter("openid",$openid);//商品描述
        $unifiedOrder->setParameter("body","贡献一分钱");//商品描述
        //自定义订单号,此处仅作举例
        $timeStamp = time();
        $out_trade_no = C('WxPayConf_pub.APPID').$timeStamp;
        $unifiedOrder->setParameter("out_trade_no",$out_trade_no);//商户订单号
        $unifiedOrder->setParameter("total_fee","1");//总金额
        $unifiedOrder->setParameter("notify_url",C('WxPayConf_pub.NOTIFY_URL'));//通知地址
        $unifiedOrder->setParameter("trade_type","JSAPI");//交易类型
        //非必填参数,商户可根据实际情况选填
        //$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商户号
        //$unifiedOrder->setParameter("device_info","XXXX");//设备号
        //$unifiedOrder->setParameter("attach","XXXX");//附加数据
        //$unifiedOrder->setParameter("time_start","XXXX");//交易起始时间
        //$unifiedOrder->setParameter("time_expire","XXXX");//交易结束时间
        //$unifiedOrder->setParameter("goods_tag","XXXX");//商品标记
        //$unifiedOrder->setParameter("openid","XXXX");//用户标识
        //$unifiedOrder->setParameter("product_id","XXXX");//商品ID
        
        $prepay_id = $unifiedOrder->getPrepayId();
        //=========步骤3:使用jsapi调起支付============
        $jsApi->setPrepayId($prepay_id);
        
        $jsApiParameters = $jsApi->getParameters();
        
        $this->assign('jsApiParameters',$jsApiParameters);
        $this->display('pay');
        //echo $jsApiParameters;
    }

    public function notify(){
        //使用通用通知接口
        $notify = new \Notify_pub();
        
        //存储微信的回调
        $xml = $GLOBALS['HTTP_RAW_POST_DATA'];
        $notify->saveData($xml);
        
        //验证签名,并回应微信。
        //对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,
        //微信会通过一定的策略(如30分钟共8次)定期重新发起通知,
        //尽可能提高通知的成功率,但微信不保证通知最终能成功。
        if($notify->checkSign() == FALSE){
            $notify->setReturnParameter("return_code","FAIL");//返回状态码
            $notify->setReturnParameter("return_msg","签名失败");//返回信息
        }else{
            $notify->setReturnParameter("return_code","SUCCESS");//设置返回码
        }
        $returnXml = $notify->returnXml();
        echo $returnXml;
        
        //==商户根据实际情况设置相应的处理流程,此处仅作举例=======
        
        //以log文件形式记录回调信息
        //$log_ = new Log_();
        $log_name= __ROOT__."/Public/notify_url.log";//log文件路径
        
        log_result($log_name,"【接收到的notify通知】:\n".$xml."\n");
        
        if($notify->checkSign() == TRUE)
        {
            if ($notify->data["return_code"] == "FAIL") {
                //此处应该更新一下订单状态,商户自行增删操作
                log_result($log_name,"【通信出错】:\n".$xml."\n");
            }
            elseif($notify->data["result_code"] == "FAIL"){
                //此处应该更新一下订单状态,商户自行增删操作
                log_result($log_name,"【业务出错】:\n".$xml."\n");
            }
            else{
                //此处应该更新一下订单状态,商户自行增删操作
                log_result($log_name,"【支付成功】:\n".$xml."\n");
            }
        
            //商户自行增加处理流程,
            //例如:更新订单状态
            //例如:数据库操作
            //例如:推送支付完成信息
        }
    }

    function  log_result($file,$word){
        $fp = fopen($file,"a");
        flock($fp, LOCK_EX) ;
        fwrite($fp,"执行日期:".strftime("%Y-%m-%d-%H:%M:%S",time())."\n".$word."\n\n");
        flock($fp, LOCK_UN);
        fclose($fp);
    }

}
           

注意:支付配置在conf->config

<?php
$config = array(
	//财付通支付参数
	'tenpay_config'=>array(
		 'partner' => '1900000113', //这里是你在成功申请财付通接口后获取到的商户号;
         'key' => 'e82573dc7e6136ba414f2e2affbe39fa', //这里是你在成功申请财付通接口后获取到的密钥
	     'return_url' => 'http://testweb11.iecworld.com/caseshow/web/index.php?s=/Pay/tenreturnurl',
    	 'notify_url' => 'http://testweb11.iecworld.com/caseshow/web/index.php?s=/Pay/tenreturnurl',


	),


	//支付宝支付参数1
	'alipay_config'=>array(
		'partner' =>'',   //这里是你在成功申请支付宝接口后获取到的PID;
     	'key'=>'',//这里是你在成功申请支付宝接口后获取到的Key
     	'sign_type'=>strtoupper('MD5'),
     	'input_charset'=> strtolower('utf-8'),
     	'cacert'=> getcwd().'\\cacert.pem',
    	'transport'=> 'http',

	),

	//支付宝支付参数2

	'alipay'=>array(
		  //这里是卖家的支付宝账号,也就是你申请接口时注册的支付宝账号
		 'seller_email'=>'[email protected]',
		 
		 //这里是异步通知页面url,提交到项目的Pay控制器的notifyurl方法;
		 'notify_url'=>'http://www.xxx.com/Pay/notifyurl', 
		 
		 //这里是页面跳转通知url,提交到项目的Pay控制器的returnurl方法;
		 'return_url'=>'http://www.xxx.com/Pay/returnurl',
		 
		 //支付成功跳转到的页面,我这里跳转到项目的User控制器,myorder方法,并传参payed(已支付列表)
		 'successpage'=>'User/myorder?ordtype=payed',   
		 
		 //支付失败跳转到的页面,我这里跳转到项目的User控制器,myorder方法,并传参unpay(未支付列表)
		 'errorpage'=>'User/myorder?ordtype=unpay', 
	 ),
);
?>
           

数据表

订单表:

CREATE TABLE IF NOT EXISTS `tp_order` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `user_id` int(4) NOT NULL,
  `name` varchar(100) DEFAULT NULL,
  `company_name` varchar(100) DEFAULT NULL,
  `phone` varchar(50) DEFAULT NULL,
  `email` varchar(50) DEFAULT NULL,
  `address` text,
  `mobile` varchar(100) DEFAULT NULL,
  `remank` text,
  `lang` tinyint(1) DEFAULT '1',
  `tradeid` varchar(20) DEFAULT NULL,
  `status` tinyint(1) NOT NULL DEFAULT '0',
  `paystatus` tinyint(1) DEFAULT '0',
  `paytime` varchar(20) DEFAULT NULL,
  `addtime` varchar(20) DEFAULT NULL,
  `updatetime` varchar(20) DEFAULT NULL,
  `total_price` float DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
           

订单详情表:

CREATE TABLE IF NOT EXISTS `tp_orderdetail` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `OrderID` int(10) unsigned NOT NULL DEFAULT '0',
  `ProductID` int(10) unsigned NOT NULL DEFAULT '0',
  `ProductName` varchar(120) NOT NULL DEFAULT '',
  `Nums` int(11) NOT NULL DEFAULT '0',
  `Price` float NOT NULL DEFAULT '0',
  `Memo` text NOT NULL,
  `prophoto` varchar(32) DEFAULT NULL,
  `Total_price` float DEFAULT NULL,
  `user_id` int(4) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `OrderID` (`OrderID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
           

地址管理表:

CREATE TABLE IF NOT EXISTS `tp_address` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `uid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '用户id',
  `province` varchar(255) DEFAULT '' COMMENT '省份',
  `city` varchar(255) DEFAULT '' COMMENT '城市',
  `area` varchar(255) DEFAULT '' COMMENT '地区',
  `address` varchar(255) DEFAULT '' COMMENT '详细地址',
  `receiver` varchar(30) DEFAULT NULL COMMENT '收货人',
  `tel` varchar(16) DEFAULT NULL COMMENT '收货人电话',
  `addtime` varchar(30) DEFAULT NULL COMMENT '添加时间',
  `updatetime` varchar(30) DEFAULT NULL COMMENT '修改时间',
  `isdefault` int(1) DEFAULT '0' COMMENT '是否设为默认地址',
  PRIMARY KEY (`id`),
  KEY `OrderID` (`uid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='地址管理' AUTO_INCREMENT=3 ;
           

产品表:

CREATE TABLE IF NOT EXISTS `tp_product` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `cid` int(4) DEFAULT NULL COMMENT '分类id',
  `bid` int(11) DEFAULT '0' COMMENT '品牌id',
  `lang` tinyint(1) DEFAULT '0' COMMENT '语言',
  `proname` varchar(255) NOT NULL DEFAULT '' COMMENT '产品名称',
  `price` varchar(30) DEFAULT NULL COMMENT '产品价格',
  `isphoto` tinyint(1) DEFAULT '0' COMMENT '是否有图片',
  `prophoto` varchar(30) NOT NULL DEFAULT '' COMMENT '产品图片',
  `prothumb1` varchar(30) DEFAULT NULL COMMENT '产品缩略图1',
  `prothumb2` varchar(30) DEFAULT NULL COMMENT '产品缩略图2',
  `prointo` text COMMENT '产品简介',
  `procontent` longtext COMMENT '产品详细说明',
  `isshow` tinyint(2) DEFAULT NULL COMMENT '是否显示',
  `isrecom` tinyint(2) DEFAULT NULL COMMENT '是否推荐',
  `orderby` int(11) DEFAULT NULL COMMENT '排序',
  `issj` tinyint(1) DEFAULT '0',
  `sjisshow` tinyint(1) DEFAULT '1',
  `sjprocon` longtext,
  `opti` tinyint(1) DEFAULT '0',
  `yetitle` varchar(50) DEFAULT NULL,
  `keywords` text COMMENT '关键词',
  `descri` text,
  `hits` int(4) DEFAULT '0' COMMENT '点击量',
  `otherpro` varchar(100) DEFAULT NULL COMMENT '其他产品',
  `othernews` varchar(100) DEFAULT NULL COMMENT '其他新闻',
  `otherdown` varchar(100) DEFAULT NULL COMMENT '其他下载',
  `otheranswer` varchar(100) DEFAULT NULL COMMENT '其他回答',
  `is_other_img` tinyint(1) DEFAULT '0' COMMENT '是否有关联图',
  `tag_id` varchar(255) DEFAULT NULL,
  `addtime` varchar(30) DEFAULT NULL COMMENT '添加时间',
  `updatetime` varchar(30) DEFAULT NULL COMMENT '修改时间',
  `pro_spec` text,
  `sketch` text,
  `islink` tinyint(1) DEFAULT '0' COMMENT '是否外链',
  `title_href` varchar(100) DEFAULT NULL COMMENT '链接地址',
  `bewrite` longtext COMMENT '产品描述',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=51 ;