id; $re=Soap::where('is_pay',1)->where('user_id',$id)->first(); if($re){ return $this->success(['status'=>true]); } return $this->success(['status'=>false]); } public function pays(Request $request) { $num=$request->input('num',10); $price=$request->input('price'); $cost=$request->input('cost'); $goods_type=$request->input('goods_type'); $user_name=$request->input('user_name','ss'); $area_code=$request->input('area_code'); $mobile=$request->input('mobile',15236877164); $province=$request->input('province','河南省'); $city=$request->input('city','郑州市'); $area=$request->input('area','金水区'); $address=$request->input('address','是啥'); $id=$request->input('id',null); DB::beginTransaction(); try{ $options = $this->options(); $payment = Factory::payment($options); $jssdk = $payment->jssdk; if ($id){ $enrolls=Soap::find($id); if ($enrolls){ $re = $payment->order->queryByOutTradeNumber($enrolls->enroll_no); if (isset($re['transaction_id'])) { return $this->error(20015,'','当前订单已经支付,请刷新列表'); } } } if($goods_type==2){ $goods_name='大卫博士专用打包胶带'; $goods_type_code='JD'; }else{ $goods_name='大卫博士竹炭植物精油皂'; $goods_type_code='FZ'; } if($cost!=$num*$price || $cost<=0){ return $this->error(20015,'','当前订单价格有误'); } // $cost=$num*8; // $cost=0.01; $user=Auth::user(); $expire=date('YmdHis', time() + 130); $nu = time() . str_pad($user->id, 6, 0, STR_PAD_LEFT) . random_int(11111111, 99999999); $order_num ='DWBS-'.$goods_type_code.'-'.str_pad($user->id, 6, 0, STR_PAD_LEFT).Carbon::now()->format('md') . random_int(1111, 9999); $attributes = [ 'time_expire' => $expire, 'trade_type' => 'JSAPI', // 支付方式,小程序支付使用JSAPI 'body' => $goods_name, // 订单说明 'detail' => $goods_name, // 订单说明 'out_trade_no' => $nu, // 自定义订单号 'total_fee' =>$cost*100, // 单位:分 'openid' => $user->openid, // 当前用户的openId // 'notify_url' =>'http://api.app.cliu.cc/api/pay/message', ]; $result = $payment->order->unify($attributes); if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') { if ($id){ $enroll=Soap::find($id); if (!$enroll){ return $this->error(500231,'','请返回列表刷新后提交'); } }else{ $enroll=new Soap(); $enroll->order_end=Carbon::now()->addDays(1); } $enroll->user_id = $user->id; $enroll->num = $num; $enroll->price = $price; $enroll->enroll_no = $nu; $enroll->cost = $cost; $enroll->is_pay = 0; $enroll->address=$address; $enroll->area=$area; $enroll->city=$city; $enroll->order_num=$order_num; $enroll->province=$province; $enroll->user_name=$user_name; $enroll->mobile=$mobile; $enroll->sign=$result['sign']; $enroll->warea_id=$user->warea_id; $enroll->buy_name=$user->nickname; $enroll->buy_code=$user->area_code; $enroll->buy_phone=$user->mobile; $enroll->goods_name=$goods_name; $enroll->goods_type=$goods_type; $enroll->area_code=$area_code; $enroll->openid=$user->openid; if (!$enroll->save()){ throw new \Exception('1'); } $prepayId = $result['prepay_id']; $config = $jssdk->sdkConfig($prepayId); DB::commit(); return response()->json([ 'error_code'=>200, 'code'=>200, 'msg'=>'成功', 'data'=>$config ]); } }catch (\Exception $exception){ DB::rollBack(); Log::error($exception->getMessage()); return $this->error(500214,'','调起支付失败'); } } public function SearchStatus(Request $request){ $sign=$request->input('sign'); $options = $this->options(); $payment = Factory::payment($options); $id=Auth::user()->id; $res = Enroll::where('user_id', $id)->where('is_refund', 0)->where('is_pay', 0)->orderByDesc('created_at')->get(); $s = false; foreach ($res as $k => $v) { $re = $payment->order->queryByOutTradeNumber($v->enroll_no); if (isset($re['transaction_id'])) { $enroll = Soap::find($v->id); $enroll->is_pay = 1; $enroll->trade_no = $re['transaction_id']; $enroll->save(); $s = true; } } if ($s) { Log::error('测试测试'); return $this->success(['status'=>true]); } else { return $this->error(40056, '', '暂无支付信息,请重新进入'); } } /**支付回调*/ public function message(Request $request) { Log::error('肥皂购买支付回调'); $options = $this->options(); $payment = Factory::payment($options); $response = $payment->handlePaidNotify(function ($message, $fail) { $out_trade_no = $message['out_trade_no']; // 商户订单号 $trade_no = $message['transaction_id']; // 微信支付订单号 $order = Soap::where('enroll_no', '=', $out_trade_no)->first(); if (empty($order)) { return true; // 告诉微信,我已经处理完了,订单没找到,别再通知我了 } $r = Cache::get(md5('codes' . $order->user_id)); if (!$r) { if ($message['return_code'] === 'SUCCESS') { // return_code 表示通信状态,不代表支付状态 // 用户是否支付成功 if ($message['result_code'] === 'SUCCESS') { $enroll = Soap::where('enroll_no', '=', $out_trade_no)->first(); $enroll->is_pay = 1; $enroll->trade_no = $trade_no; $enroll->info = json_encode($message); $enroll->save(); } } else { return $fail('通信失败,请稍后再通知我'); } } return true; }); return $response; } protected function options(){ return [ 'app_id' => config('wechat.payment.daweiboshi.app_id'),//config('wechat.payment.default.app_id'), 'mch_id' => config('wechat.payment.daweiboshi.mch_id'), 'sub_mch_id' => '', 'key' => config('wechat.payment.daweiboshi.key'), 'notify_url' =>url('api/soap/message'), 'cert_path' =>config('wechat.payment.daweiboshi.cert_path'), 'key_path' =>config('wechat.payment.daweiboshi.key_path'), ]; } /* * 获取收货地址 * **/ public function GetUserAddress(){ $re=Soap::where('user_id',Auth::user()->id)->select('province','mobile','user_name','city','area','address','area_code')->where('is_pay',1)->orderByDesc('id')->limit(1)->first(); return $this->success($re); } /* * 获取购买记录 * **/ public function GetSoapList(Request $request){ $page_index=$request->input('page_index'); $page_size=$request->input('page_size'); $re=Soap::where('user_id',Auth::user()->id); if (Auth::user()->id==39516){ $re->where('user_id',39516); }else{ $re->where('is_pay',1); } $count=$re->count(); $re=$re->orderByDesc('id')->skip(($page_index-1)*$page_size)->take($page_size)->get(); return $this->success_list($re,'',$count); } /**获取物流轨迹**/ public function get_express(Request $request,ExpressHandler $expressHandler){ $express=Soap::find($request->id); if (!$express){ return $this->error(40011,'','该物流订单不存在'); } if ($express->status==2){ return $this->success(json_decode($express->express_info)); }else{ $re=$expressHandler->search($express->express_num,$express->express_code); $re=(array)$re; if ($re['State']==3){ DB::beginTransaction(); try{ $express->express_info=json_encode($re); $express->status=2; $express->save(); DB::commit(); }catch (\Exception $exception){ Log::error('-------物流信息保存出错--------'.$exception); DB::rollBack(); } } return $this->success($re); } } }