예제 #1
0
 public function pay($request, $response)
 {
     /*{{{*/
     $this->validLogin($response);
     $source = $this->getSource($request);
     if ($source->isNull()) {
         $response->setRedirect($this->space->getPhoneServiceUrl4Order());
         return parent::DIRECT_OUTPUT;
     }
     $this->checkIsMySource($source);
     if ($source->isPaid()) {
         $response->setRedirect($source->successUrl());
         return parent::DIRECT_OUTPUT;
     }
     $account = $source->user->getCashAccount();
     if ($account->amount >= $source->getSalePrice()) {
         $response->setRedirect($response->router->urlfor('payment/showpaytype', array('sourceId' => $source->id, 'sourceType' => $request->sourceType)));
         return parent::DIRECT_OUTPUT;
     }
     $amount = XString::calculateBalancePrice($source->getSalePrice(), $account->amount);
     $doctor = $this->space->host;
     $hospitalfaculty = $doctor->hospitalfaculty;
     $hospital = $hospitalfaculty->hospital;
     $description = $hospital->name . $hospitalfaculty->name . $doctor->name;
     $onlinePayType = $request->onlinePayType;
     $depositeOrder = OrderClient::getInstance()->createDepositeOrder($this->user, $amount, $onlinePayType == 'alipay' ? DepositeOrder::RECHARGE_TYPE_ALIPAY : DepositeOrder::RECHARGE_TYPE_QPAY, array($source));
     if ($onlinePayType == 'alipay') {
         //创建支付url
         $callBackUrl = BeanFinder::get('configs')->alipay_callback_url;
         $frontUrl = BeanFinder::get('configs')->alipay_callback_returnurl;
         $payUrl = Alipay::getInstance()->getPayUrl($depositeOrder->id, Pay::TYPE_PAY, $depositeOrder->amount, $callBackUrl, ServiceDef::getServiceSpec(ServiceDef::TYPE_TELORDER)->text, $description, $frontUrl);
         $response->exitJump($payUrl);
     } else {
         if ($onlinePayType == '00') {
             $orders = array();
             $orders['orderId'] = $depositeOrder->id;
             $orders['productName'] = ServiceDef::getServiceSpec(ServiceDef::TYPE_TELORDER)->text;
             $orders['bankId'] = '';
             $orders['bankType'] = '00';
             $orders['orderTimestamp'] = Qpay::getInstance()->getQpayOrderTimestamp();
             $orders['payerIP'] = XIpLocation::getIp();
             $orders['bgUrl'] = BeanFinder::get('configs')->qpay_callback_url;
             $orders['orderAmount'] = $amount;
             $qpay = new Qpay();
             $qpay->setOrderInfo($orders, Pay::TYPE_PAY);
             $form = $qpay->getSubmitForm();
             $response->form = $form;
         } else {
             //创建支付url
             $callBackUrl = BeanFinder::get('configs')->alipay_gateway_callback_url;
             $frontUrl = BeanFinder::get('configs')->alipay_gateway_callback_returnurl;
             $payUrl = GatewayAlipay::getInstance()->getPayUrl($depositeOrder->id, Pay::TYPE_PAY, $amount, $callBackUrl, ServiceDef::getServiceSpec(ServiceDef::TYPE_TELORDER)->text, $description, $frontUrl, $onlinePayType);
             $response->form = $payUrl;
         }
     }
 }
예제 #2
0
 public function qpayCallBack4return()
 {/*{{{*/
     $qpay = Qpay::getInstance()->initCallBackData(new Request());
     $this->_qpayCallBackImp($qpay, Pay::NAME_TYPE_QPAY_RETURN);
 	//置回调状态
 	$this->_processDeposite4Return();
     return parent::DIRECT_OUTPUT;
 }/*}}}*/
 private function getQpayForm4FollowupOrder(FollowupOrder $order, $bankid)
 {
     //dodo::zhb 创建充值单
     $depositeOrder = OrderClient::getInstance()->createDepositeOrder($this->user, $order->price, 
         DepositeOrder::RECHARGE_TYPE_QPAY, array($order)); 
     //设置订单信息提交给快钱
     $orders = array();
     $orders['orderId'] = $depositeOrder->id;
     $orders['productName'] = strip_tags($order->product->title);
     if($bankid == '00')
     {
         $orders['bankId'] = '';
         $orders['bankType'] = '00';
     }else{
         $orders['bankId'] = $bankid;
         $orders['payType'] = 10;
     }
     $orders['orderTimestamp'] = Qpay::getInstance()->getQpayOrderTimestamp();
     $orders['payerIP'] = XIpLocation::getIp();
     //dodo::zhb 快钱回调url
     $orders['bgUrl'] = BeanFinder::get('configs')->qpay_callback_url;//$this->getQpayAccessUrl().'/400/pay/followupqpayreceive';
     $orders['pageUrl'] = BeanFinder::get('configs')->qpay_callback_returnurl;
     $orders['orderAmount'] = $order->price;
     $qpay = new Qpay();
     $qpay->setOrderInfo($orders, Pay::TYPE_FOLLOWUPORDER);
     $form = $qpay->getSubmitForm(); 
     return $form;
 }
예제 #4
0
	public function pay($request, $response)
	{/*{{{*/
		$this->validLogin();
		$user = $this->_newUser;
		$onlinePayType = $request->onlinePayType;
		
		$order = DAL::get()->find('TelOrder', $request->sId);
        if (false == $order->isNull() && $order->isPayed())
        {
            $response->setRedirect($response->router->urlfor('payment/paymessage', array('orderId'=>$order->id)));
            return ;
        }
        DBC::requireTrue($user->id == $order->getUser()->id, '请患者重新登陆,或者重新下单!');
		
		$ownerDoctor = $order->getExecuterBySpace()->host;
		$hospitalfaculty = $ownerDoctor->hospitalfaculty;
		$hospital = $hospitalfaculty->hospital;
		$description = $hospital->name.$hospitalfaculty->name.$ownerDoctor->name;
		$buyerCashAccount = $order->owner->relatedObject->getCashAccount();
		$balance = 0;
		if($buyerCashAccount != null && $buyerCashAccount->isNull() == false)
		{
			$balance = $order->owner->relatedObject->getCashAccount()->amount;
		}
		$amount = number_format($order->getAmount()-$balance, 2, '.', '');
		
        TelOrderClient::getInstance()->updatePayType($order->id, $onlinePayType);
        //dodo::zhb 创建充值单
        $depositeOrder = OrderClient::getInstance()->createDepositeOrder($user, $user->getCashAccount(), $amount, 
            $onlinePayType == 'alipay'?DepositeOrder::RECHARGE_TYPE_ALIPAY:DepositeOrder::RECHARGE_TYPE_QPAY, $order->id, get_class($order)); 
		if($onlinePayType == 'alipay')
		{
			//创建支付url
            $callBackUrl = BeanFinder::get('configs')->alipay_callback_url;
            $frontUrl = BeanFinder::get('configs')->alipay_callback_returnurl;
            $payUrl = Alipay::getInstance()->getPayUrl($depositeOrder->id, Pay::TYPE_PAY, $amount, $callBackUrl, 
                TelService::$serviceType[TelService::APPOINTMENT_SERVICE], $description, $frontUrl);
			header("Location: $payUrl");
			exit();
		}
		else
		{
            $orders = array();
            $orders['orderId'] = $depositeOrder->id;
            $orders['productName'] = TelService::$serviceType[TelService::APPOINTMENT_SERVICE];
            if($onlinePayType == '00')
            {
                $orders['bankId'] = '';
                $orders['bankType'] = '00';
            }else{
                $orders['bankId'] = $onlinePayType;
                $orders['payType'] = 10;
            }
            $orders['orderTimestamp'] = Qpay::getInstance()->getQpayOrderTimestamp();
            $orders['payerIP'] = XIpLocation::getIp();
            $orders['bgUrl'] = BeanFinder::get('configs')->qpay_callback_url;
            $orders['orderAmount'] = $amount;
            $qpay = new Qpay();
            $qpay->setOrderInfo($orders, Pay::TYPE_PAY);
            $form = $qpay->getSubmitForm(); 
            $response->form = $form;
		}
	}/*}}}*/