model = $model; $merchant_id = merchant_id(); if (!$merchant_id) { throw new \Exception('商户id错误'); } self::$MERCHANT_ID = $merchant_id; self::$MERCHANT = AdminMerchant::byId($merchant_id); if (!self::$MERCHANT) { throw new \Exception('平台暂停服务,如有不便敬请谅解'); } } //微信退款退款查询 一改造为byUserIdCheckUserIsRefundOk_alipay_wxapp() public function byUserIdCheckUserIsRefundOk($user_id) { $return = [ 'status' => true, 'msg' => '退款成功' ]; $refund = $this->model->where('user_id', $user_id)->where('pay_status', RefundLog::PAY_STATUS_NO)->orderBy('id', 'desc')->first(); if ($refund) { //检查是否退款成功 $payment = Factory::payment(wechat_pay_config(self::$MERCHANT)); // 微信支付 $no = $refund->deposit->no; $re = $payment->refund->queryByOutTradeNumber($no); if ($re['return_code'] === 'SUCCESS' && $re['result_code'] === 'SUCCESS') { switch ($re['refund_status_0']) { case 'SUCCESS': //退款成功 $return = [ 'status' => true, 'msg' => '退款成功' ]; $refund->pay_time = $re['refund_success_time_0']; $refund->pay_status = RefundLog::PAY_STATUS_OK; $refund->save(); //退款成功回调 $refund->refund_order_callback(); break; case 'REFUNDCLOSE': //退款关闭 $return = [ 'status' => false, 'msg' => '退款关闭' ]; break; case 'PROCESSING': //退款处理中 $return = [ 'status' => false, 'msg' => '退款处理中,请稍后再试。' ]; break; case 'CHANGE': //退款异常 $return = [ 'status' => false, 'msg' => '退款异常' ]; $refund->pay_status = RefundLog::PAY_STATUS_ERROR; $refund->result = $re['err_code_des']; break; } } else { $return = [ 'status' => false, 'code' => $re['err_code'], 'msg' => $re['err_code_des'] ]; } } return $return; } //支付宝退款查询 public function byUserIdCheckUserIsRefundOk_alipay_wxapp($user_id) { $return = [ 'status' => true, 'msg' => '退款成功' ]; $refund = $this->model->where('user_id', $user_id)->where('pay_status', RefundLog::PAY_STATUS_NO)->orderBy('id', 'desc')->first(); if (!empty($refund)) { switch ($refund['pay_type']){ case RefundLog::PAY_TYPE_WECHAT: //微信 //检查是否退款成功 $payment = Factory::payment(wechat_pay_config(self::$MERCHANT)); // 微信支付 $no = $refund->deposit->no; $re = $payment->refund->queryByOutTradeNumber($no); if ($re['return_code'] === 'SUCCESS' && $re['result_code'] === 'SUCCESS') { switch ($re['refund_status_0']) { case 'SUCCESS': //退款成功 $return = [ 'status' => true, 'msg' => '退款成功' ]; $refund->pay_time = $re['refund_success_time_0']; $refund->pay_status = RefundLog::PAY_STATUS_OK; $refund->save(); //退款成功回调 $refund->refund_order_callback(); break; case 'REFUNDCLOSE': //退款关闭 $return = [ 'status' => false, 'msg' => '退款关闭' ]; break; case 'PROCESSING': //退款处理中 $return = [ 'status' => false, 'msg' => '退款处理中,请稍后再试。' ]; break; case 'CHANGE': //退款异常 $return = [ 'status' => false, 'msg' => '退款异常' ]; $refund->pay_status = RefundLog::PAY_STATUS_ERROR; $refund->result = $re['err_code_des']; break; } } else { $return = [ 'status' => false, 'code' => $re['err_code'], 'msg' => $re['err_code_des'] ]; } break; case RefundLog::PAY_TYPE_ALIPAYMINI: //支付宝 $no = $refund->deposit->no; $result = alipay_mini_config(self::$MERCHANT)->payment()->common()->queryRefund($no,$refund->no);//$refund->no if($result->code=='10000'){ if($result->refundAmount>0){ //退款成功 退款金额 //退款成功 $return = [ 'status' => true, 'msg' => '退款成功' ]; // $refund->pay_time = $result['refund_success_time_0']; //需与支付宝约定配置 $refund->pay_time = Carbon::now();//暂定当前时间 $refund->pay_status = RefundLog::PAY_STATUS_OK; $refund->save(); //退款成功回调 $refund->refund_order_callback(); }else{ //失败 $return = [ 'code' => 'REFUNDNOTEXIST', //支付宝伪造微信退款查询失败 'status' => false, 'msg' => '没有找到退款' ]; } } break; case RefundLog::PAY_TYPE_ALIPAYMINI_CREDIT: //支付宝押金预授权支付方式 if(!isset($refund->deposit->no)){ return [ 'status' => false, 'msg' => '记录缺失', ];; } $no = $refund->deposit->no; $alipayobj = new Alipay(); $data = AlipayYushouquanJiedong(self::$MERCHANT,$no,$refund->no); $resultdata = $alipayobj->AlipayQueryYushouquan($data); // 预授权查询 if(!empty($resultdata->code) && $resultdata->code==10000 && $resultdata->status=='SUCCESS') { if ($resultdata->rest_amount == '0.00') { //已经解冻成功 修改 $return = [ 'status' => true, 'msg' => '退款成功' ]; // $refund->pay_time = $result['refund_success_time_0']; //需与支付宝约定配置 $refund->pay_time = Carbon::now();//暂定当前时间 $refund->pay_status = RefundLog::PAY_STATUS_OK; $refund->save(); //退款成功回调 $refund->refund_order_callback(); } else { $data = AlipayYushouquanJiedongQingqiu($data, $resultdata->auth_no, $refund->no, $resultdata->rest_amount);//准备解冻参数 //没有解冻 $return = [ 'code' => 'REFUNDNOTEXIST', //支付宝伪造微信退款查询失败 'status' => false, 'msg' => '没有冻结成功', 'data' => $data ]; } }else{ $return = [ 'code' => 'ZHIFUBAOSHIBIA', //支付宝伪造微信退款查询失败 'status' => false, 'msg' => $resultdata->sub_msg ]; } break; default: } } return $return; } public function byUserIdUserRefundNoModel($user_id) { $refund = $this->model->where('user_id', $user_id)->where('pay_status', RefundLog::PAY_STATUS_NO)->orderBy('id', 'desc')->first(); return $refund; } }