Пример #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  protected function 
  * @retval   
  * @see 
  * @note 
  * @author 吕宝贵
  * @date 2016/01/11 14:34:57
  **/
 protected function generateDatas($payables, $processBatch = null)
 {
     if (empty($payables)) {
         throw new Exception('没有可供下载的记录');
     }
     $meta = ['filename' => '付款明细' . date('Y-m-d-H'), 'author' => 'Mr-Hug', 'modify_user' => 'Mr-Hug', 'title' => 'Mr-Hug付款明细', 'subject' => 'Mr-Hug付款明细', 'description' => 'Mr-Hug应付账款明细,用户提现明细', 'keywords' => 'Mr-Hug, 付款,银行转账', 'category' => '银行转账'];
     $headerLables = ['企业参考号', '收款人编号', '收款人账号', '收款人名称', '收方开户支行', '收款人所在省', '收款人所在市', '收方邮件地址', '收方移动电话', '币种', '付款分行', '结算方式', '业务种类', '付方账号', '期往日', '期望时间', '用途', '金额', '收方行号', '收方开户银行', '业务摘要'];
     $datas = [];
     //第一行为title信息
     $datas[] = $headerLables;
     $totalMoney = 0;
     $payableCount = 0;
     $payableIds = [];
     foreach ($payables as $payable) {
         $totalMoney += $payable->money;
         $payableCount += 1;
         $data = [$payable->id, $payable->receive_uid, $payable->receiverBankAccount->account_no, $payable->receiverBankAccount->account_name, '', $payable->receiverBankAccount->province, $payable->receiverBankAccount->city, '', '', '', '', '普通', '', '', date('Ymd', $payable->updated_at + 86400 * 2), '', 'Mr-Hug服务费', $payable->money, '', $payable->receiverBankAccount->bank_name, $payable->memo];
         if (!$processBatch) {
             $callbackFunc = [UserWithdraw::className(), 'processPayingNotify'];
             if (!Yii::$app->account->processWithdrawPaying($payable, $callbackFunc)) {
                 return false;
             }
         }
         $datas[] = $data;
         $payableIds[] = $payable->id;
     }
     if (!$processBatch) {
         $processBatch = new PayableProcessBatch();
         $processBatch->total_money = $totalMoney;
         $processBatch->count = $payableCount;
         $processBatch->download_time = time();
         if (!$processBatch->save()) {
             return false;
         }
     }
     //处理相关的应付记录状态
     if (!Yii::$app->db->createCommand()->update(Payable::tableName(), ['process_batch_no' => $processBatch->id], ['id' => $payableIds])->execute()) {
         return false;
     }
     return ['datas' => $datas, 'meta' => $meta];
 }