<?php
// +----------------------------------------------------------------------
// | yershop网店管理系统
// +----------------------------------------------------------------------
// | Copyright (c) 2017 http://www.yershop.com All rights reserved.
// +----------------------------------------------------------------------
// | 版权申明：yershop网店管理系统不是一个自由软件，是贝云网络官方推出的商业源码，严禁在未经许可的情况下
// | 拷贝、复制、传播、使用yershop网店管理系统的任意代码，如有违反，请立即删除，否则您将面临承担相应
// | 法律责任的风险。如果需要取得官方授权，请联系官方http://www.yershop.com
// +----------------------------------------------------------------------
namespace app\index\Controller;
use think\Controller;
use think\Db;
use think\Request;
class Pay extends Home {
       
	   
	   public function deal(){
		if(!is_login()) {
		    $this->redirect("User/login");
		}			
	     $Pay=new \app\common\model\Pay;
		 $res=$Pay->deal() ;
         $url=url('pay/over?id='.$res);  
	     if($res){
             $this->success( "支付成功",$url);
		 } else{
			 $this->error($Pay->getError());
		 }
	}  
	public function deals() {
		 if(!session_uid()) {
		    $this->redirect("User/login");
		 }	
		if(Request::instance()->isPost()){
		//页面上通过表单选择在线支付类型，支付宝为alipay 财付通为tenpay
		        /* 支付设置 */
			include(ROOT_PATH.'extend/Alipay/alipay.config.php');
			include(ROOT_PATH.'extend/Alipay/lib/alipay_submit.class.php');
			$uid=session_uid(); 
			$map["uid"]=$uid;
			$id=input('id');
			if(!($id && is_numeric($id))){
				   $this->error('用户ID错误！');
			}
			$map["id"]=$id;	
			$info= Db::name("order")->where($map)->find(); 
			if(!$info){
				$this->error( "订单不存在");
			} 
			$total_fee=$info['total_money'];
		
            $where["id"]=$uid;
			$ucenter= Db::name("user")->where($where)->find(); 
			$account=$ucenter["account"];
			//余额支付计算开始
			$is_account=input('account');
			$paytype=input('paytype');
			if(!($paytype && is_numeric($paytype))){
		        $this->error('支付方式错误！');
		    }
            
			//没有支付过
			if($is_account){
				 //余额支付
				if($account>=$total_fee){
				  $save["account"]=$account-$total_fee;
                  Db::name("user")->where($where)->update($save); 
                  $update["status"]=1;
                
				  $update["paytype"]=1;
				  $update["update_time"]=time();
                  Db::name("order")->where($map)->update($update);
						//保存支付信息
					$data["out_trade_no"]=$info["order_sn"];
					$data["total_money"]=$total_fee;
					$data["uid"]=$uid;
					$data["paytype"]=$update["paytype"];
					$data["model"]="order";//模型为订单
					$data["update_time"]=time();
					Db::name("pay")->insert($data);
				    $this->redirect('pay/over');
					exit();
				} else{
				    $this->error('余额不足！');
				}
			}
				  //支付宝在线支付
                if($paytype==1){
				
						//保存支付信息
					$data["out_trade_no"]=$info["order_code"];
					$data["total_money"]=$total_fee;
					$data["uid"]=$uid;  
					$data["update_time"]=time();
					$data["type"]=3;//单一订单
					$data["model"]="order";//模型为订单
					$res=Db::name("pay")->insertGetId($data);
					 $url=url('alipay/index?id='.$res);
					 $this->redirect($url);
				}
				//货到付款
				if($paytype==2){
				  $save["account"]=0;
                  Db::name("user")->where($where)->update($save); 
				  $update["status"]=1;
                  $update["update_time"]=time();
				  $update["paytype"]=5;
				
                  Db::name("order")->where($map)->update($update); 
				  	//保存支付信息
					$data["out_trade_no"]=$info["order_sn"];
					$data["total_money"]=$total_fee;
					$data["uid"]=$uid;
					$data["update_time"]=time();
					$data["paytype"]=5;
					$data["model"]="order";//模型为订单
					$res=Db::name("pay")->insertGetId($data);
					$url=url('pay/over?id='.$res);
				  	$this->redirect($url);
				} 
			//微信扫码支付
				if($paytype==4){
						//保存支付信息
					$data["out_trade_no"]=$info["order_code"];
					$data["total_money"]=$total_fee;
					$data["uid"]=$uid;  
					$data["update_time"]=time();
					$data["type"]=3;//单一订单
					$data["model"]="order";//模型为订单
					$res=Db::name("pay")->insertGetId($data);
					 $url=url('wxpay/index?id='.$res);
					 $this->redirect($url);
				} 
				$pay_money=$total_fee;
			
		
			//支付过
			if($info["paytype"]){
			    //不使用余额，支付宝在线支付
                $pay_money=$info["wait_pay_money"];
			}
			$out_trade_no=$info["order_sn"];//过滤 
			$body= C('SITENAME')."订单";//商品描述
			$subject=C('SITENAME')."订单-".$out_trade_no;//设置商品名称						
			//构造要请求的参数数组，无需改动
			$parameter = array(
					"service"       => $alipay_config['service'],
					"partner"       => $alipay_config['partner'],
					"seller_id"  => $alipay_config['seller_id'],
					"payment_type"	=> $alipay_config['payment_type'],
					"notify_url"	=> $alipay_config['notify_url'],
					"return_url"	=> $alipay_config['return_url'],
					"anti_phishing_key"=>$alipay_config['anti_phishing_key'],
					"exter_invoke_ip"=>$alipay_config['exter_invoke_ip'],
					"out_trade_no"	=> $out_trade_no,
					"subject"	=> $subject,
					"total_fee"	=> $pay_money,
					"body"	=> $body,
					"_input_charset"	=> trim(strtolower($alipay_config['input_charset']))
					//其他业务参数根据在线开发文档，添加参数.文档地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.kiX33I&treeId=62&articleId=103740&docType=1
					//如"参数名"=>"参数值"
			);
			//建立请求
			$alipaySubmit = new \AlipaySubmit($alipay_config);
			$html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");
			echo $html_text;
		}
	 }
	public function index() {
		if(!is_login()) {
		    $this->redirect("User/login");
		}
		$this->meta_title = '在线充值';
	    $this->assign('meta_title',$this->meta_title);
		return $this->fetch();
	}
	public function lists(){
		 if(!is_login()) {
		    $this->redirect("User/login");
		}			
		$uid=is_login();	
		$map['uid']=$uid;//用户id
		$map['model']="account";//用户id
		$res=getLists("pay",$map,10,"id desc","");
		$this->assign('res', $res);
		$this->meta_title = '充值记录';
		$this->assign('meta_title',$this->meta_title);
		return $this->fetch();
	}   


	public function over($id) {
		   if(!is_login()) {
		      $this->redirect("User/login");
		   }	 
            $uid=is_login();
			$map['uid']=$uid;//用户id
			$map['id']=safe_replace($id);//用户id
            $info=db('pay')->where($map)->find();
			$this->assign('info', $info);
          $this->meta_title ="支付完成";	
		$this->assign('meta_title',$this->meta_title);
		     return $this->fetch();
	  }
      public function  failure() {	
		  
		  return $this->fetch();

	  }	
}
