<?php
namespace app\index\controller;
class Wxpay extends Home {

    /**
     * 用户可以看到的订单支付表单页面，目前只有一个二维码而已。
     * @return type
     */
    public function index() {
       include(ROOT_PATH.'extend/wxpay/Api.php');
include(ROOT_PATH.'extend/wxpay/NativePay.php');
include(ROOT_PATH.'extend/wxpay/Notify.php');
   $id=input('id'); $uid=session_uid(); 
			$map["uid"]=$uid;
		   /* 标识正确性检测 */
		   if(!( $id && is_numeric( $id))){
		     $this->error('ID错误！');
		   }	$map["id"]=(int)$id;   
 $info = db('Pay')->where($map)->find();
		     if(empty($info) || $info['status'] ==1){
				dump('该订单不存在或已支付');
				exit();
			 }
//模式二
/**
 * 流程：
 * 1、调用统一下单，取得code_url，生成二维码
 * 2、用户扫描二维码，进行支付
 * 3、支付完成之后，微信服务器会通知支付成功
 * 4、在支付成功通知中需要查单确认是否真正支付成功（见：notify.php）
 */
 $notify_url=root_url().url('notify');//回调地址
$body= api('SITENAME')."订单";//商品描述
			$subject=C('SITENAME')."订单";//设置商品名称	
$money=$info['total_money']*100;
$out_trade_no=$info["out_trade_no"];
$goodsid=time();
$order = time();
$notify = new \NativePay();
$input = new \WxPayUnifiedOrder(); //调用统一下单类
$input->SetBody($body);//这是商品标题
$input->SetAttach($body);
$input->SetOut_trade_no($info["out_trade_no"]);//这是单号
$input->SetTotal_fee($money);//这是金额，微信金额是按分计算，所以要   *100
//$input->SetTotal_fee("1");
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 7200));
$input->SetNotify_url($notify_url);
$input->SetTrade_type("NATIVE");
$input->SetProduct_id($goodsid);
$out_trade_no = $input->GetOut_trade_no();
$result = $notify->GetPayUrl($input);
$url = $result["code_url"];//这就是返回的二维码地址，要在前端生成二维码
$arr['out_trade_no']=$out_trade_no;
$arr['code_url']=$url;
$arr['order']=$order; $this->assign('arr', $arr);

        //渲染一个视图，参数用于获取验证码。
        return $this->fetch();
    }

 public function orderquery($out_trade_no=null, $orderid=null){
       $out_trade_no = $_POST['out_trade_no'];
       $order = $_POST['order'];
       if(isset($out_trade_no) && $out_trade_no != ""){
          $out_trade_no = $_REQUEST["out_trade_no"];
          $input = new \WxPayOrderQuery();
          $input->SetOut_trade_no($out_trade_no);
          $result  = \WxPayApi::orderQuery($input);
       }
       $cash_fee=$result['cash_fee']/100;//支付金额
       /*判断是否支付成功*/
       if ( $result["trade_state"] == "SUCCESS" ){
           $data=array('out_trade_no'=>$result['out_trade_no'],'status'=>1,'pay_type'=>2);
           $cz=db('pay')->where($data)->find();
           if($cz){
                if(M('cz_records')->where($data)->save(array('money'=>$cash_fee,'transaction_id'=>$result['transaction_id'],'status'=>2))){
                     if($this->set_money($cz['uid'],$cz['type'],C('date'),$cz['money'],$cz['transaction_id'])){
                         $this->success('成功支付:'.$cash_fee. '元');     
                     }
                } 
           }
       }
    }
    /**
     * 二维码。
     * @param string $text
     * @return png
     */
    public function qrcode($text) {
        \think\Loader::import('qrcode.qrcode');
        $text = base64_decode($text);
        return \QRcode::png($text);
        exit;
    }
	     // 生成支付订单号
   public function ordersn(){
        if ( is_login() ) {
		      $uid=is_login();
		      $code=date('Ymd',time()).time().$uid;
	       return $code;
		}
    }
    /**
     * 微信通知页面。
     */
    public function wxpayNotify() {
            include(ROOT_PATH.'extend/wxpay/Api.php');
include(ROOT_PATH.'extend/wxpay/NativePay.php');
include(ROOT_PATH.'extend/wxpay/Notify.php');
        
        //在PayNotifyCallBack中重写了NotifyProcess，会发起一个订单支付状态查询，其实也可以不去查询，因为从php://input中已经可以获取到订单状态。file_get_contents("php://input")
        //$notify = new \WxPayNotify();
        $notify = new \PayNotifyCallBack();
        $notify->Handle(false);
        $result = $notify->GetValues();
        if ($result['return_code'] == 'SUCCESS') {
            //订单支付完成，修改订单状态，发货。
              $out_trade_no=  $result['out_trade_no']；
            $map['out_trade_no']=safe_replace($out_trade_no);//用户id
			//支付宝交易号
		
	        $payinfo =db("Pay")->field(true)->where($map)->find();
             if($payinfo){
                        $data["update_time"]=time();
                        $data["status"]=1; 
						$data["paytype"]=4;
                         db("Pay")->where($map)->update($data);
			             $Pay=new \app\common\model\Pay;
		                 $res=$Pay->modify($out_trade_no) ;
			}
        }
      
    }


}
