123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- <?php
- namespace App\Http\Controllers;
- use App\Handlers\ExpressHandler;
- use App\Models\Enroll;
- use App\Models\EnrollUser;
- use App\Models\EnrollUserExpress;
- use App\Models\Express;
- use App\Models\Soap;
- use App\Models\UserA;
- use Carbon\Carbon;
- use EasyWeChat\Factory;
- use EasyWeChatComposer\EasyWeChat;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Auth;
- use Illuminate\Support\Facades\Cache;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Log;
- use Overtrue\EasySms\EasySms;
- class SoapController extends Controller{
- public function GetStatus(){
- $id=Auth::user()->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);
- }
- }
- }
|