Пример #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;
         }
     }
 }
 private function getAlipayForm4FollowupOrder(FollowupOrder $order)
 {
     $callbackUrl = BeanFinder::get('configs')->alipay_callback_url;
     $frontUrl = BeanFinder::get('configs')->alipay_callback_returnurl;
     $price = $order->price;//原价
     //dodo::zhb 创建充值单
     $depositeOrder = OrderClient::getInstance()->createDepositeOrder($this->user, $price, 
         DepositeOrder::RECHARGE_TYPE_ALIPAY, array($order)); 
     $description = '';
     $form = Alipay::getInstance()->getPayForm($depositeOrder->id, Pay::TYPE_FOLLOWUPORDER, $price, $callbackUrl, $order->product->title, $order->product->title, $frontUrl);
     return $form;
 }
 private function _alipayForOrder($amount, $order, DepositeOrder $depositeOrder)
 {/*{{{*/
     $callBackUrl = BeanFinder::get('configs')->alipay_callback_url;
     $frontUrl = BeanFinder::get('configs')->alipay_callback_returnurl;
     if($order instanceof ScoreOrder)
     {
         $description = $this->user->name."充值兑换积分";
         $type = Pay::TYPE_SCOREORDER;
     }
     else if($order instanceof ServiceOrder)
     {
         $description = $this->user->name."充值购买咨询";
         $type = Pay::TYPE_FLOWORDER;
     }
     else if($order instanceof DepositeOrder)
     {
         $type = Pay::TYPE_RECHARGE;
         $description = $this->user->name."充值";
     }
     else
     {
         return false;
     }
     return Alipay::getInstance()->getPayUrl($depositeOrder->id, $type, $amount, $callBackUrl, 
         ServiceDef::getServiceSpec(ServiceDef::TYPE_TELORDER)->text, $description, $frontUrl);
 }/*}}}*/
Пример #4
0
 public function getAliPayItemList($request, $response)
 {/*{{{*/
     //第一次查询列表
     $isFirstQuery = $request->query;
     $depositeId = $request->depositeId;
     $failDepositeOrderIds = array();
     $page = $request->page ? $request->page : 1;
     $pageSize = 100;
     $startMinute = $request->startMinute;
     $endMinute = $request->endMinute;
     $startNormalTime = $request->getRequest('startTime', XDateTime::now()->toShortString());
     $startTime = $startNormalTime.' '.$request->getRequest('startHour', '00').':'.$request->getRequest('startMinute', '00').':00';
     $endTime = $startNormalTime.' '.$request->getRequest('endHour', '23').':'.$request->getRequest('endMinute', '00').':59'; 
     DBC::requireTrue(XDateTime::secondDiff(XDateTime::valueOf($endTime), XDateTime::valueOf($startTime)) <= 0 , "结束时间不能大于开始时间");
     $isSuccess = false;
     $returnItems = array();
     //第一次查询isFirstQuery有值 
     if(empty($isFirstQuery))
     {/*{{{*/
         $itemUrl = Alipay::getInstance()->getPayItemList($page, $pageSize, $startTime, $endTime); 
         $xml = file_get_contents($itemUrl);
         $itemValues = simplexml_load_string($xml);
         if($itemValues->is_success == 'T')
         {
             $i = 0;
             $isSuccess = true;
             $xmlResponse = $itemValues->response; 
             $account_page_query_result = $xmlResponse->account_page_query_result;
             $response->hasNextPage = $account_page_query_result->has_next_page && $account_page_query_result->has_next_page == 'T';
             $account_log_list = $account_page_query_result->account_log_list;
             $AccountQueryAccountLogVO = $account_log_list->AccountQueryAccountLogVO;
             foreach($AccountQueryAccountLogVO as $item)
             {
                 $i++;
                 $items = array();
                 $depositeOrderId = strstr($item->merchant_out_order_no,'_', true); 
                 if($item->income > 0 && $item->outcome == 0 )    
                 {
                     $items = $this->getAllAliPayList($item, $depositeOrderId, $items);
                     //查询全部
                     if(empty($depositeId))
                     {
                         $returnItems[$i] = $items;
                     }
                     else if ($depositeId == $depositeOrderId)
                     {
                         $returnItems[$i] = $items;
                     }
                     //区间内最多50条status为fail的记录
                     $failDepositeId = $this->getFailDepositeOrderIds($items, $depositeOrderId);
                     $failDepositeOrderIds[] = $failDepositeId; 
                 }
             }
         }
         else
         {
             $response->errorMsg = $itemValues->error;
         }
     }/*}}}*/
     //充值失败充值单
     $failDepositeOrders = DAL::get()->find('depositeorder', $failDepositeOrderIds);
     $response->failDepositeOrders = $failDepositeOrders;
     $response->items = $returnItems;
     $response->isSuccess = $isSuccess;
     $response->startHour = $request->startHour;
     $response->endHour = $request->endHour;
     $response->startTime = $request->startTime;
     $response->startMinute = $request->startMinute;
     $response->endMinute = $request->endMinute;
     $response->page = $page;
     $response->depositeId = $depositeId;
 }/*}}}*/
Пример #5
0
 public function alipayCallBack4notify()
 {/*{{{*/
 	$content = $_POST;
 	$payable = Alipay::getInstance()->initCallBackData($content,Pay::NAME_TYPE_ALIPAY_NOTIFY);
 	 
 	//参数检查,如果无效,直接退出
 	$this->_checkPayable($payable,Pay::NAME_TYPE_ALIPAY_NOTIFY);
 	
 	//notify
 	$ret = $this->_callbackImp4notify();
 	 
 	if($ret){
 		//返回回调成功
 		echo "success";
 	}else {
 		echo "fail";
 	}
 	 
     exit;
 }/*}}}*/
Пример #6
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;
		}
	}/*}}}*/