where('is_show',1)->order('weigh desc')->autopage()->select(); $list = list_domain_image($list,['image']); $list = $this->list_lang($list,['name','info','content']); $this->success(1,$list); } public function info(){ $id = input('id'); $info = Db::name('trylesson')->where('id',$id)->find(); $info = info_domain_image($info,['image']); $info = $this->info_lang($info,['name','info','content']); $info['map_image'] = localpath_to_netpath(config('site.index_bottom_image')); $info['public_store_address'] = config('site.public_store_address'); $trylesson_cancel_text = config('site.trylesson_cancel_text'); if($this->lang == 'en'){ $trylesson_cancel_text = config('site.trylesson_cancel_text_en'); } $info['trylesson_cancel_text'] = $trylesson_cancel_text; $this->success(1,$info); } public function apply(){ $id = input('id',0); $info = Db::name('trylesson')->where('id',$id)->where('is_show',1)->find(); if(empty($info)){ $this->error('该试课已下架'); } //同一个试课只能买一次 $check_map = [ 'user_id' => $this->auth->id, 'order_status' => ['neq',0], 'trylesson_id' => $id, ]; $check_order = Db::name('trylesson_order')->where($check_map)->find(); if(!empty($check_order)){ $this->error('您已经购买过此课程'); } //试课数据 // $field = ['firstname','lastname','mobile','email','height','age','weight','address','health','emergency','comefrom','is_first']; // $data = request_post_hub($field); $sysdata = [ 'order_no' => createUniqueNo('T',$this->auth->id), 'user_id' => $this->auth->id, 'trylesson_id' => $id, 'lesson_ids' => $info['lesson_ids'], 'order_amount' => $info['price'], 'order_status' => 0, 'createtime' => time(), 'starttime' => time(), 'endtime' => time() + (30 * 86400), 'pay_type' => 1, ]; // $data = array_merge($data,$sysdata); $data = $sysdata; //支付订单数据 $pay_order = []; $pay_order['user_id'] = $sysdata['user_id']; $pay_order['out_trade_no'] = $sysdata['order_no']; $pay_order['order_amount'] = $sysdata['order_amount']; $pay_order['createtime'] = $sysdata['createtime']; $pay_order['pay_type'] = 'hitpay'; $pay_order['platform'] = 'app'; $pay_order['order_status'] = 0; $pay_order['table_name'] = 'trylesson_order'; $pay_order['table_id'] = 0; $pay_order['args'] = ''; //拉起支付 $notify_url = config('notify_cdnurl'); $hitpay_return = $this->hitpay_payment($pay_order['out_trade_no'],$pay_order['order_amount'],$notify_url); if($hitpay_return['status'] !== true){ $this->error($hitpay_return['msg']); } //支付请求id $pay_order['payment_request_id'] = $hitpay_return['id']; //入库试课订单 Db::startTrans(); $id = Db::name('trylesson_order')->insertGetId($data); if(!$id){ Db::rollback(); $this->error('预约失败'); } //支付订单下单 $pay_order['table_id'] = $id; $pay_order_id = Db::name('pay_order')->insertGetId($pay_order); if(!$pay_order_id){ Db::rollback(); $this->error('下单失败'); } Db::commit(); $return = [ 'url' => $hitpay_return['url'], 'id' => $hitpay_return['id'], ]; $this->success(1,$return); } //拉起支付 private function hitpay_payment($out_trade_no,$money,$notifyurl) { $return = [ 'status' => false, 'msg' => '', 'url' => '', 'id' => 0, ]; $apiKey = config('hitpay.apikey'); $redirect_cdnurl = config('hitpay.trylesson_redirect_cdnurl').'?out_trade_no='.$out_trade_no.'&lang='.$this->lang; try { $hitPayClient = new \HitPay\Client($apiKey, true); $request = new \HitPay\Request\CreatePayment(); $request->setAmount($money) ->setCurrency('SGD') ->setRedirectUrl($redirect_cdnurl) // ->setPaymentMethods(['paynow_online','card']) ->setPaymentMethods(['paynow_online']) ->setPurpose('Elin Dance Studio') ->setWebhook($notifyurl) ->setReferenceNumber($out_trade_no); $result = $hitPayClient->createPayment($request); $return['status'] = true; $return['url'] = $result->getUrl(); $return['id'] = $result->getId(); //print_r($result); /*$data = $hitPayClient->getPaymentStatus($result->getId()); dump($data); dump($data->status);*/ /*$data = $hitPayClient->deletePaymentRequest($data->getId()); print_r($data);*/ } catch (\Exception $e) { $return['msg'] = $e->getMessage(); } return $return; } }