$order_info['order_no']]); $order->pay_type = $order_info['pay_type']; $order->is_pay = $order_info['is_pay']; $order->pay_at = $order_info['updated_at']; if (!$order->save()) { throw new Exception(RechargeOrders::getStaticError()); } // 增加充值统计数据 \Yii::$app->services->statistics->user->set($order->mall_id, $order->user_id, ['recharge_money' => $order->pay_price]); UserStatisticsTotal::setUserStatisticsTotal($order->mall_id, $order->user_id, ['recharge_money' => $order->pay_price]); $desc = '余额充值'; $money = bcadd($order->pay_price, $order->give_money, 2); if ($order_info['is_pay'] == RechargeOrders::IS_PAY) { $data = ['message_id' => 0, 'mall_id' => $order->mall_id, 'user_id' => $order->user_id, 'wallet_type' => UserWalletService::WALLET_TYPE_BALANCE, 'is_frozen' => false, 'unfrozen' => false, 'money' => abs($money), 'desc' => $desc, 'source_table' => AssetsType::RECHARGE_FRONT, 'source_table_id' => $order->id, 'from_type' => UserWalletEnum::RECHARGE, 'capital_type' => UserWalletEnum::USER_RECHARGE ]; UserWalletService::handle(0, $data); //给上级赠送 if (!empty(\Qiniu\json_decode($order->recharge_give_up_info))) { $parent_id = User::getUser([['id' => $order->user_id]], 'parent_id'); if ($parent_id->parent_id > 0) { RechargeOrders::doGiveUp(0, $order->recharge_give_up_info, $parent_id->parent_id, $order, '下级', false); } } //充值插件充值活动 if (\Yii::$app->services->addons->findByName(AddonsEnum::ADDONS_NAME_RECHARGE)) { //以下充值活动赠送:当多个进行中的活动时赠送失败 /** $active = new AddonsRechargeActive(); $now_active = $active->getNowActive($order->mall_id); if ($now_active) { if ($now_active['give_cond'] == 1) {//累计充值 $now_price = RechargeOrders::getDateNum($now_active['start_at'], $order->user_id); } else { $now_price = $order->pay_price; } $now_price = number_format($now_price, 2); $num_list = []; foreach ($now_active['give_info'] as $key) { $num_list[number_format($key['num'], 2)] = $key['data']; } if (isset($num_list[$now_price])) { RechargeOrders::doGiveUp($now_active['id'], $num_list[$now_price], $order->user_id, $order); } } */ $this->rechargeActive($order); } //满足充值条件升级 $listener = new UserUpgradeListener(); $order_by = 'level desc'; $listener->conditionUpgrade($order->mall_id, $order->user_id, $order->id, $order_by); } //unlock LockHelper::uLock($lock_key, $identification); $this->mallSingleMonth($order->mall_id,$order->pay_price); if($order->is_pay==1){ $data = []; $event = new RechargeOrderPaidEvent($order['mall_id']); $data['id'] = $order['id']; \Yii::$app->services->events->dispatch($event, $data, $event->listeners); } self::signalAgentPay($order); return true; } catch (Exception $e) { echo $e->getMessage().$e->getFile().$e->getLine(); LockHelper::uLock($lock_key, $identification); $this->setStaticError($e->getMessage()); return false; } } public function mallSingleMonth($mall_id,$recharge_money){ $data = ['total_recharge_money' => $recharge_money]; CensusMallSingleMonth::setSingleMonthCache($mall_id, 'total_recharge_money', $data, 'total_recharge_money'); } /** * 充值活动赠送 * @param $order * @return bool */ public function rechargeActive($order) { $active = new AddonsRechargeActive(); $now_active_list = $active->getNowActiveList($order->mall_id); $send = false; foreach ($now_active_list as $one_active) { $num_list = []; foreach ($one_active['give_info'] as $key) { if ($one_active['give_cond'] == 1) { $num_list[$key['num']] = $key['data']; } else { $num_list[number_format($key['num'], 2)] = $key['data']; } } if ($one_active['give_cond'] == 1) { //累计充值 $now_price = RechargeOrders::getDateNum($one_active['start_at'], $order->user_id); $all_nums = array_keys($num_list); $all_nums[] = $now_price; sort($all_nums); $now_key = array_search($now_price, $all_nums); $now_key = $now_key - 1; if ($now_key >= 0) { $num_list_key = $all_nums[$now_key]; //活动是累计充值:判断用户是否领取过活动下 该赠送选项的 $check = AddonsRechargeLog::findOne(['user_id' => $order->user_id,'recharge_active_id' => $one_active['id'],'give_condition' => $num_list_key]); if($check) continue; //满足赠送条件 RechargeOrders::doGiveUp($one_active['id'], $num_list[$num_list_key], $order->user_id, $order,'',true,$num_list_key); $send = true; break; } } else { $now_price = number_format($order->pay_price, 2); if (isset($num_list[$now_price])) { RechargeOrders::doGiveUp($one_active['id'], $num_list[$now_price], $order->user_id, $order); $send = true; break; } } } if(!$send) \Yii::error('订单号'.$order->order_no.' 不满足充值活动赠送'); return true; } public static function uploadShippingInfo($params){ try { if(empty($params['id'])) throw new Exception("id:不存在"); $order_model = RechargeOrders::findOne(['id' => $params['id']]); $mall_id = $order_model['mall_id']; $payment_trade_order_model = \common\models\common\PaymentTradeOrder::findOne(['order_no'=>$order_model['order_no'],'is_pay'=>1]); if(empty($payment_trade_order_model)) throw new Exception("order_no:".$order_model['order_no'].",payment_trade_order_model不存在"); $pay_type = [\common\enums\PayTypeEnum::WECHAT]; $trade_type = ['JSAPI']; $payment_trade_model = \common\models\common\PaymentTrade::findOne(['id'=>$payment_trade_order_model['trade_id'],'pay_type'=>$pay_type,'trade_type'=>$trade_type]); if(empty($payment_trade_model)) throw new Exception("trade_id:".$payment_trade_order_model['trade_id'].",payment_trade_model不存在"); switch ($payment_trade_model['pay_type']){ case 1: //微信支付 $delivery_mode = 1; $user_info_model = \common\models\user\UserInfo::findOne(['mall_id'=>$mall_id,'user_id'=>$order_model['user_id'],'platform'=>'mp-wx', 'status' => StatusEnum::ENABLED]); $user_model = User::findOne(['mall_id'=>$mall_id,'id'=>$order_model['user_id'], 'status' => StatusEnum::ENABLED]); if(empty($user_info_model))throw new Exception("user_id,mp-wx:".$order_model['user_id'].",user_info_model不存在"); $openid = $user_info_model['openid']; // $logistics_type = 1;//物流模式,发货方式枚举值:1、实体物流配送采用快递公司进行实体物流配送形式 2、同城配送 3、虚拟商品,虚拟商品,例如话费充值,点卡等,无实体配送形式 4、用户自提 $params['mall_id'] = $mall_id; $params['openid'] = $openid; $params['third_trade_no'] = $payment_trade_model['third_trade_no']; $params['delivery_mode'] = $delivery_mode; $params['logistics_type'] = 3; $params['receiver_contact'] = substr_replace($user_model['mobile'], '****', 3, 4); $params['item_desc'] = '余额充值'; \common\logic\wechat\WechatMiniProgramLogic::uploadShippingInfoWechat($params); break; } return true; }catch (\Exception $e){ var_dump('RechargeNotify:uploadShippingInfo:'.$e->getMessage()); return true; } } public static function signalAgentPay($order) { try { if (!MallAddons::isInstall($order['mall_id'], 'AllinTax')) return true; $model = PaymentTradeOrder::findOne(['order_no' => $order['order_no'], 'is_pay' => 1, 'pay_type' => PayTypeEnum::ALLIN_TAX_PAY]); if (empty($model)) return true; $trade = PaymentTrade::findOne(['id' => $model->trade_id]); if (empty($trade)) return true; PayService::signalAgentPay($order['mall_id'], $trade['out_trade_no']); } catch (\Exception $e) { var_dump($order['order_no'] . ':signalAgentPay:' . $e->getMessage()); } } }