IndexController.php 2.89 KB
<?php

class pay_IndexController extends QLib_Controller_Action {
	
	public function init() {
		/* Initialize action controller here */
	}
	
	public function indexAction() {
		$this->_helper->layout()->disableLayout();
		
		$orderCode = $this->helpGparam('order_code');
		$paymentType = $this->helpGparam('payment_type');
//		$uid = $this->helpAuth('/pay?order_code=' . $orderCode);
		$uid = $this->helpAuth();
		$paymentPars = explode('_', $paymentType);
		if(count($paymentPars) != 2){
			//发生错误
			$this->helpJsRedirect('请选择一个支付方式');
		}
		$profileInfo = QINPassport_Client::getProfile($uid);
		
		$isTest = RELEASE_ENV !=Q_SCHEMA_RELEASE ? true : false;
		$paymentParams = QCPay_Models_Payment_Client::getOneById($paymentPars[0]);
		$payService = QCPay_Utils_Factory::factory($paymentParams);
		if($payService == false){ 
			//TODO 报错
			$this->helpJsRedirect('请选择一个支付方式');
		}
		$_spbill_create_ip = Q_Common_Request::getClientIp();  //ip2long
		$orderInfo = QModels_Orders_Client::getOneByCode($orderCode, $uid);
		$amount = $orderInfo['amount'] * 100 ;
		$paymentParameter = $paymentPars[1];
		if($paymentType == 2){
			//判断是否传入token
			$alipay_token = $this->helpSession('passport_register')->__get('alipay_user_token');
			if(!empty($alipay_token)){
				$paymentParameter = $alipay_token;
			}	
		}
		$reqParams =  new QCPay_Utils_Reqparams($orderCode, $amount, '有货订单号:' . $orderCode, $_spbill_create_ip, $orderInfo['create_time'], $paymentParameter, $isTest, $uid, $profileInfo['profile_name']);
		$reqPars = $payService->getPayRequestPars($reqParams);
		//记录或修改支付方式
		($record_bank = $this->updatePayment($orderCode,$uid,$paymentPars)) ? TRUE : $this->helpJsonResult('500','支付方式记录失败');
		if($reqPars['reqType'] == 'get'){			
			//直接跳转到支付界面
			$toUrl = $reqPars['pay_url'] . '?' . $reqPars['pars'];
			$this->helpGo($toUrl);
		}else{
			//如果是post,去form提交
			$this->view->reqPars = $reqPars;
		}		
	}
	
	/**
	 * 记录并更改订单支付方式
	 * @param int $orderCode
	 * @param int $uid 
	 * @param array $paymentPars
	 * return bool
	 */
	public function updatePayment($orderCode,$uid,$paymentPars){
	    if(count($paymentPars) == 2){
	        $order_code = (int)$orderCode;
	        $payment = (int)$paymentPars[0];
	        $recode_pay = QINOrders_Models_Orders_Client::updateOrderPayment($order_code,$uid,$payment);
	        $bank_code = $paymentPars[1] != 'platform' ? $paymentPars[1] : '';
	        if(QINOrders_Models_Orders_PayBank_Client::getBankByOrder($order_code)){
	            $recode_pay_bank = QINOrders_Models_Orders_PayBank_Client::updatePayBank($order_code, $payment, $bank_code);
	        }else{
	            $recode_pay_bank = QINOrders_Models_Orders_PayBank_Client::setOrderPayBank($order_code, $payment, $bank_code);
	        }
	        return $recode_pay && $recode_pay_bank;
	    }
	}
}