error; } public function prePay($args){ } //重新支付 public function repay($args){ } //回调逻辑处理 public function notifyPay($pay_data){ $order_no = $pay_data['out_trade_no']; $model = OrderModel::getPayDetail($order_no); if(empty($model)){ return false; } //已支付 if($model['pay_status']==20){ return false; } $user = UserModel::detail($model['user_id']); // Db::startTrans(); $res = $model->transaction(function () use ($model,$pay_data,$user) { $model->save([ 'pay_status'=> 20, 'pay_time' => time(), 'transaction_id'=>$pay_data['transaction_id']??'' ] ); //写入金米粒记录 $this->writeUserGoldRice($model); $this->writeUserRiceCard($model);//写入金米粒逻辑 $order_id = $model['order_id']; ZaActivityRelation::where("order_id",$order_id)->update(['is_pay'=>1]); return true; }); return $res; } /** * 写入金米粒记录 * @param int $payType * @return false|int * @throws \Exception */ private function writeUserGoldRice($model) { if($model['gold_rice_amount']>0){ //写金米粒出账记录 GoldRiceModel::add($model['user_id'],$model['order_no'],'下单抵扣',$model['gold_rice_amount'],0); //扣除冻结中的金米粒 UserModel::setDecByField($model['user_id'],'gold_rice_frozen',(float)$model['gold_rice_amount']); } } /** * 写入米卡记录 * @param int $payType * @return false|int * @throws \Exception */ private function writeUserRiceCard($help){ if($help['rice_card_id']>0){ //写现金卡出账记录 $userRiceCard = UserRiceCardModel::find($help['rice_card_id']); UserRiceCardConsumeModel::add($userRiceCard,$help['order_no'],$help['pay_money'],$help['rice_card_money']); //如果可用余额为0并且冻结余额等于要抵扣的金额 if($userRiceCard['balance']==0 && $help['rice_card_money']==$userRiceCard['frozen_amount']){ //现金卡直接减冻结余额,并且状态改为已失效 UserRiceCardModel::setIncDecByField($help['rice_card_id'],[],['frozen_amount'=>(float)$help['rice_card_money']],['effect_state'=>2]); }else{ //现金卡直接减冻结余额 UserRiceCardModel::setDecByField($help['rice_card_id'],'frozen_amount',(float)$help['rice_card_money']); } } } }