예제 #1
0
 /**
  * @brief 提现付款给用户账号成功
  *
  * @return  public function 
  * @retval   
  * @see 
  * @note 
  * @author 吕宝贵
  * @date 2015/12/06 20:31:42
  **/
 public function processWithdrawPaySuccess($payId, $paySuccessCallback)
 {
     //处理交易信息
     $payable = Payable::findOne($payId);
     if (!$payable) {
         $this->addError(__METHOD__, '获取付款记录信息失败');
         return false;
     }
     $trans = $payable->trans;
     $trans->status = Trans::PAY_STATUS_FINISHED;
     if (!$trans->save()) {
         $this->addError(__METHOD__, '交易信息保存失败');
         return false;
     }
     //完成冻结,用户的冻结金额进行操作
     $withdrawUser = $this->getUserAccount($payable->receive_uid);
     if (!$this->finishFreeze($withdrawUser->uid, $trans->id)) {
         $this->addError(__METHOD__, '减除用户冻结余额时出错!');
         return false;
     }
     //用户设定的回调操作
     $withdrawId = $trans->trans_id_ext;
     $callbackData['id'] = $withdrawId;
     if (call_user_func($paySuccessCallback, $callbackData)) {
         return true;
     } else {
         $this->addError(__METHOD__, '处理提现支付成功回掉函数时出错');
         return false;
     }
 }
예제 #2
0
 /**
  * @brief 提现付款给用户账号成功
  *
  * @return  public function 
  * @retval   
  * @see 
  * @note 
  * @author 吕宝贵
  * @date 2015/12/06 20:31:42
  **/
 public function processWithdrawPaySuccess($payId, $paySuccessCallback)
 {
     $payable = Payable::findOne($payId);
     if (!$payable) {
         $this->addError('display-error', '获取付款记录信息失败');
         return false;
     }
     //处理交易信息
     $trans = $payable->trans;
     $trans->status = Trans::PAY_STATUS_FINISHED;
     if (!$trans->save()) {
         $this->addError('display-error', '交易信息保存失败');
         return false;
     }
     $withdrawUser = $this->getUserAccount($payable->receive_uid);
     //完成冻结,将款项从冻结中减除
     if ($withdrawUser->finishFreeze($trans->total_money)) {
         return true;
     } else {
         $this->addError('display-error', '减除用户冻结余额时出错!');
         $this->addErrors($withdrawUser->getErrors());
         return false;
     }
     //冻结记录完成
     $freeze = Freeze::fineOne(['trans_id' => $trans->id, 'type' => Freeze::FREEZE_TYPE_WITHDRAW]);
     if (!$freeze) {
         $this->addError('display-error', '冻结记录不存在');
         return false;
     }
     if (!$freeze->finishFreeze()) {
         $this->addError('display-error', '冻结记录无法更改状态');
         return false;
     }
     //用户设定的回调操作
     $callbackData['id'] = $withdrawId;
     return call_user_func($paySuccessCallback, $callbackData);
 }
예제 #3
0
 /**
  * @brief 从银行返回的excel列表总导出支付成功和失败信息,用于后续处理,解冻,结算等。
  *
  * @return  public function 
  * @retval   
  * @see 
  * @note 
  * @author 吕宝贵
  * @date 2015/12/22 18:14:17
  **/
 public function actionImportFromExcel()
 {
     //获取文件
     $excelFile = UploadedFile::getInstanceByName('payedfile');
     if (!$excelFile) {
         throw new Exception('获取上传文件失败');
     }
     $excelConverter = new Excel();
     $payedItems = $excelConverter->importFromFile();
     //循环处理支付结果,对有问题的结果写入文件,导出给用户,一天提取的款项默认不多,因此不需要做异步处理
     foreach ($payedItems as $payedItem) {
         if ($payedItem['status']) {
             $payable = Payable::findOne($payedItem['id']);
             $userAccount = Yii::$app->account->getUserAccount($payable->uid);
             $callbackFunc = [UserWithdraw::className(), 'processFinishPayNotify'];
             if (!$userAccount->processWithdrawPaySuccess($payable->id, $callbackFunc)) {
                 //将错误处理的信息记录下来
             }
         }
     }
 }