天天看點

會員中心—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 ;