where(['order_number' => $order_num])->first(); if (!$order) return \Yz::echoError1("订单不存在"); if ($status == 'SUCCESS') { $u = DB::table('orders')->where(['order_number' => $order_num])->update([ 'status' => 2 ]); if ($u) { return \Yz::Return(true, "更新成功", ['order_num' => $order_num]); } } } //对参数进行签名,返回前端需要的参数,前端携带参数跳转小程序支付 public function StartPay() { $openid = request('openid'); $id = request('id'); $orderInfo = DB::table('orders')->where(['id' => $id,])->first(); if (!$orderInfo) return \Yz::echoError1("未找到有效订单"); if ($orderInfo->status !== 1) return \Yz::echoError1("订单不是待支付状态不能支付。当前状态:" . $orderInfo->status); $personInfo = DB::table('web_user_person')->where(['id' => $orderInfo->person_id, 'is_del' => 0])->first(); if (!$personInfo) return \Yz::echoError1("就诊人异常"); $sub_org_code=0; //小程序端医院代码 if($orderInfo->hospital_id==1){ $sub_org_code=6; } if($orderInfo->hospital_id==2){ $sub_org_code=2; } if($sub_org_code==0) return \Yz::echoError1("医院id异常"); $XCXApi=new XCXApiController(); $params = [ 'appid' =>$XCXApi::$appid, 'sub_org_code'=>$sub_org_code, 'ghzid' => $personInfo->ghzid, 'orderid' => $orderInfo->order_number, 'order_desc' => $orderInfo->title, 'amount' => (int)($orderInfo->true_price * 100), 'notify_url'=> config('app.globals.PayNotifyUrl') ]; $nonce=self::nonce(); $timestamp=(string)time(); //签名 $pay_path="/jeecg-boot/hospital/openapi/order/create"; $base64Signature=$XCXApi::Sign($pay_path,$params,$nonce,$timestamp,true); $params['timestamp']=$timestamp; $params['nonce']=$nonce; $params['signature']=$base64Signature; return \Yz::Return(true,"操作完成",['info'=>$params]); } //订单支付查询 public function CheckPay() { $openid = request('openid'); $order_number= request('order_number'); $XCX = new XCXApiController(); $res = $XCX::Post('订单查询', ['orderid'=>$order_number]); //判断如果支付成功,更改订单状态 if($res['data']['trade_state']==='SUCCESS'){ DB::table('orders')->where(['order_number'=>$order_number])->update([ 'status'=>2 ]); return \Yz::Return(true,"支付成功",[]); }else{ return \Yz::echoError1("支付失败".$res['data']['trade_state']); } } //退款 public function Refund() { //先调用思信取消,恢复号源,然后再退款 //判断订单状态是否是已经支付,判断是否到检, $openid = request('openid'); $id= request('id'); $orderInfo = DB::table('orders')->where(['id' => $id,])->first(); if (!$orderInfo) return \Yz::echoError1("未找到有效订单"); if ($orderInfo->status !==2) return \Yz::echoError1("订单状态异常。当前状态:" . $orderInfo->status); if ($orderInfo->check_status ==2) return \Yz::echoError1("已登记体检,禁止退款"); //调用思信取消,恢复号源 //退款 $data=[ 'orderid'=>$orderInfo->order_number, 'refund_order_id'=>'T'.$orderInfo->order_number, 'refund_amount'=>(int)($orderInfo->true_price * 100), 'refund_reason'=>"体检H5订单退款", ]; $XCX = new XCXApiController(); $res = $XCX::Post('订单退款', $data); if($res['refund_state']==='SUCCESS'){ DB::table('orders')->where(['id'=>$id])->update([ 'status'=>5 ]); return \Yz::Return(true,"退款成功",[]); }else{ return \Yz::echoError1("退款失败".$res['refund_state']); } } public static function nonce($l = 16) { $charts = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz0123456789"; $max = strlen($charts) - 1; $noncestr = ""; for ($i = 0; $i < $l; $i++) { $noncestr .= $charts[rand(0, $max)]; } return $noncestr; } }