/** * Updates an existing Refund model. * If update is successful, the browser will be redirected to the 'view' page. * @param integer $id * @return mixed */ public function actionUpdate($id) { /** @var \star\refund\models\Refund $model */ $model = $this->findModel($id); if ($model->load(Yii::$app->request->post()) && $model->save()) { /** @var \star\order\models\Order $orderModel */ $order = Yii::createObject(Order::className()); $orderModel = $order::find()->where(['order_id' => $model->order_id])->one(); switch ($model->status) { case $model::STATUS_WAIT_CHECK: $orderModel->status = $orderModel::STATUS_WAIT_REFUND_CHECK; break; case $model::STATUS_PASS: $orderModel->status = $orderModel::STATUS_REFUND_PASS; break; case $model::STATUS_FAILED: $orderModel->status = $orderModel::STATUS_REFUND_FAILED; break; } $orderModel->save(); return $this->redirect(['view', 'id' => $model->refund_id]); } else { return $this->render('update', ['model' => $model]); } }
/** * list orders in member center * @author cangzhou.wu(wucangzhou@gmail.com) * @return string */ public function actionList() { $this->layout = '/member'; //@todo add status $condition = ''; $query = Order::find()->where($condition)->addOrderBy('create_at DESC'); $countQuery = clone $query; $pages = new Pagination(['totalCount' => $countQuery->count()]); $orderModels = $query->offset($pages->offset)->limit($pages->limit)->all(); return $this->render('list', ['orderModels' => $orderModels, 'pages' => $pages]); }
/** * Creates data provider instance with search query applied * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = Order::find()->orderBy(['create_at' => SORT_DESC]); $dataProvider = new ActiveDataProvider(['query' => $query]); $this->load($params); if (!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; } $query->andFilterWhere(['order_id' => $this->order_id, 'user_id' => $this->user_id, 'star_id' => $this->star_id, 'total_price' => $this->total_price, 'shipping_fee' => $this->shipping_fee, 'payment_fee' => $this->payment_fee, 'create_at' => $this->create_at, 'update_at' => $this->update_at, 'status' => $this->status]); $query->andFilterWhere(['like', 'order_no', $this->order_no])->andFilterWhere(['like', 'address', $this->address])->andFilterWhere(['like', 'memo', $this->memo]); return $dataProvider; }
/** * Creates a new Refund model. * If creation is successful, the browser will be redirected to the 'view' page. * @return mixed */ public function actionCreate() { $order_id = Yii::$app->request->get('order_id'); $model = Yii::createObject(Refund::className()); $model->order_id = $order_id; $refund = $model::find()->where(['order_id' => $order_id])->one(); $order = Yii::createObject(Order::className()); $order = $order::find()->where(['order_id' => $order_id, 'user_id' => Yii::$app->user->id])->one(); if (isset($refund)) { if ($order->status != 7) { return $this->render('view', ['model' => $refund]); } else { $model = Yii::createObject(Refund::className()); $model->order_id = $order_id; } } $file = UploadedFile::getInstance($model, 'image'); if ($model->load(Yii::$app->request->post())) { if ($file) { $fileDir = \Yii::getAlias('@image/refund/'); if (!file_exists($fileDir)) { if (!mkdir($fileDir, 0777, true)) { throw new Exception(404, Yii::t('app', 'Directory create error!')); } } $file->saveAs($fileDir . $file->baseName . time() . '.' . $file->extension); $model->image = Yii::$app->params['imageDomain'] . '/refund/' . $file->baseName . time() . '.' . $file->extension; } if ($model->save()) { $order->status = $order::STATUS_WAIT_REFUND_CHECK; if (!$order->save()) { throw new Exception(404, Yii::t('app', 'order create error!')); } return $this->redirect(['view', 'id' => $model->refund_id]); } } return $this->render('create', ['model' => $model, 'order_id' => $order_id]); }
/** * use coupon before create order * @param $event */ public function useCoupon($event) { /** @var $order Order */ $order = $event->sender; /** @var $couponModel Coupon */ $couponModel = Coupon::findOne(Yii::$app->getSession()->get(self::SESSION_COUPON_MODEL_KEY)); if ($couponModel) { $couponRuleModel = $couponModel->couponRule; $result = Json::decode($couponRuleModel->result); if ($result['type']) { $order->total_price = $order->total_price * $result['number']; } else { $order->total_price = $order->total_price - $result['number']; } switch ($result['shipping']) { case 1: $order->shipping_fee = $order->shipping_fee - $result['shippingFee']; break; case 2: $order->shipping_fee = 0; } Event::on(Order::className(), Order::EVENT_AFTER_INSERT, [ShoppingCoupon::className(), 'updateCouponStatus'], ['couponModel' => $couponModel]); } }
<?php use yii\helpers\Html; use yii\widgets\ActiveForm; /* @var $this yii\web\View */ /* @var $model star\refund\models\Refund */ /* @var $form yii\widgets\ActiveForm */ /** @var \star\order\models\Order $order */ $order = Yii::createObject(\star\order\models\Order::className()); $order = $order::findOne(['order_id' => $order_id]); ?> <div class="refund-form"> <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?> <?php echo $form->field($model, 'order_id')->textInput(['value' => $order_id, 'disabled' => 'disabled']); ?> <?php echo $form->field($model, 'refund_fee')->textInput(['maxlength' => 10, 'value' => $order->total_price]); ?> <?php echo $form->field($model, 'reason')->textInput(['maxlength' => 255]); ?> <?php
<?php use kartik\grid\GridView; /* @var $this yii\web\View */ /* @var $searchModel star\order\models\OrderSearch */ /* @var $dataProvider yii\data\ActiveDataProvider */ $this->title = Yii::t('order', 'Orders'); $this->params['breadcrumbs'][] = $this->title; $this->params['title'] = $this->title; $this->params['menu']['order'] = true; ?> <div class="order-index"> <?php echo GridView::widget(['dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [['class' => 'yii\\grid\\SerialColumn'], 'order_no', 'total_price', 'shipping_fee', 'payment_fee', 'create_at:datetime', 'update_at:datetime', ['attribute' => 'status', 'value' => function ($model) { $status = $model->getStatusArray(); return $status[$model->status]; }, 'filterType' => GridView::FILTER_SELECT2, 'filter' => Yii::createObject(\star\order\models\Order::className())->getStatusArray(), 'filterWidgetOptions' => ['pluginOptions' => ['allowClear' => true]], 'filterInputOptions' => ['placeholder' => 'Status'], 'format' => 'raw'], ['class' => 'yii\\grid\\ActionColumn']], 'export' => false, 'responsive' => true, 'containerOptions' => ['style' => 'overflow: auto'], 'headerRowOptions' => ['class' => 'kartik-sheet-style'], 'filterRowOptions' => ['class' => 'kartik-sheet-style'], 'panel' => ['heading' => '<h3 class="panel-title"><i class="glyphicon glyphicon-globe"></i> ' . Yii::t('order', 'Orders') . '</h3>', 'type' => 'success', 'footer' => false, 'before' => false, 'after' => false], 'toolbar' => ['{export}', '{toggleData}'], 'toggleDataContainer' => ['class' => 'btn-group-sm'], 'exportContainer' => ['class' => 'btn-group-sm']]); ?> </div>
/** * Finds the Order model based on its primary key value. * If the model is not found, a 404 HTTP exception will be thrown. * @param integer $id * @return Order the loaded model * @throws NotFoundHttpException if the model cannot be found */ protected function findModel($id) { if (($model = Order::findOne($id)) !== null) { return $model; } else { throw new NotFoundHttpException('The requested page does not exist.'); } }
public function getOrder() { return $this->hasOne(Order::className(), ['order_id' => 'order_id']); }
public static function attachEvents() { self::frontendRegister(); Event::on(Order::className(), Order::EVENT_CHANGE_PRICE, [ShoppingCoupon::className(), 'useCoupon']); }
public function pay($id) { // ### Payer // A resource representing a Payer that funds a payment // For paypal account payments, set payment method // to 'paypal'. $payer = new Payer(); $payer->setPaymentMethod("paypal"); // ### Itemized information // (Optional) Lets you specify item wise // information $order = \Yii::createObject(Order::className())->findOne($id); $orderItems = $order->orderItem; $itemTmp = []; foreach ($orderItems as $orderItem) { $item = new Item(); $item->setName($orderItem->name)->setCurrency($this->currency)->setQuantity($orderItem->qty)->setPrice($orderItem->price); $itemTmp[] = $item; } $itemList = new ItemList(); $itemList->setItems($itemTmp); // ### Additional payment details // Use this optional field to set additional // payment information such as tax, shipping // charges etc. $details = new Details(); $total = $order->total_price - $order->shipping_fee - $order->payment_fee; $details->setShipping($order->shipping_fee)->setTax($order->payment_fee)->setSubtotal($total); // ### Amount // Lets you specify a payment amount. // You can also specify additional details // such as shipping, tax. $amount = new Amount(); $amount->setCurrency($this->currency)->setDetails($details)->setTotal($order->total_price); // ### Transaction // A transaction defines the contract of a // payment - what is the payment for and who // is fulfilling it. $transaction = new Transaction(); $transaction->setAmount($amount)->setItemList($itemList)->setDescription("Payment description")->setInvoiceNumber($order->order_no); // ### Redirect urls // Set the urls that the buyer must be redirected to after // payment approval/ cancellation. $redirectUrls = new RedirectUrls(); $redirectUrls->setReturnUrl(Url::to(['/Payment/home/payment/index'], true))->setCancelUrl(Url::to(['/Payment/home/payment/index'], true)); // ### Payment // A Payment Resource; create one using // the above types and intent set to 'order' $payment = new Payment(); $payment->setIntent("order")->setPayer($payer)->setRedirectUrls($redirectUrls)->setTransactions(array($transaction)); // For Sample Purposes Only. $request = clone $payment; // ### Create Payment // Create a payment by calling the 'create' method // passing it a valid apiContext. // (See bootstrap.php for more on `ApiContext`) // The return object contains the state and the // url to which the buyer must be redirected to // for payment approval try { $payment->create($this->_apiContext); } catch (\Exception $ex) { // NOTE: PLEASE DO NOT USE RESULTPRINTER CLASS IN YOUR ORIGINAL CODE. FOR SAMPLE ONLY // ResultPrinter::printError("Created Payment Order Using PayPal. Please visit the URL to Approve.", "Payment", null, $request, $ex); var_dump($ex); exit; exit(1); } // ### Get redirect url // The API response provides the url that you must redirect // the buyer to. Retrieve the url from the $payment->getApprovalLink() // method $approvalUrl = $payment->getApprovalLink(); // NOTE: PLEASE DO NOT USE RESULTPRINTER CLASS IN YOUR ORIGINAL CODE. FOR SAMPLE ONLY // ResultPrinter::printResult("Created Payment Order Using PayPal. Please visit the URL to Approve.", "Payment", "<a href='$approvalUrl' >$approvalUrl</a>", $request, $payment); return $approvalUrl; }
public function actionNotify() { //计算得出通知验证结果 $alipayNotify = new AlipayNotify($this->config); $verify_result = $alipayNotify->verifyNotify(); if ($verify_result) { //验证成功 $order_id = \Yii::$app->request->post('out_trade_no'); $order = \Yii::createObject(Order::className())->findOne($order_id); if ($_POST['trade_status'] == 'WAIT_BUYER_PAY') { //该判断表示买家已在支付宝交易管理中产生了交易记录,但没有付款 //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 echo "success"; //请不要修改或删除 //调试用,写文本函数记录程序运行情况是否正常 //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录"); } else { if ($_POST['trade_status'] == 'WAIT_SELLER_SEND_GOODS') { //该判断表示买家已在支付宝交易管理中产生了交易记录且付款成功,但卖家没有发货 //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 $payment = \Yii::createObject(Payment::className()); $payment->order_id = $order->order_id; $payment->status = $payment::STATUS_BUYER_PAY; $payment->payment_method = $payment::ALIPAY; $payment->payment_fee = \Yii::$app->request->post('price'); $payment->transcation_no = \Yii::$app->request->post('subject'); $payment->save(); $order->status = $order::STATUS_WAIT_SHIPMENT; $order->save(); echo "success"; //请不要修改或删除 //调试用,写文本函数记录程序运行情况是否正常 //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录"); } else { if ($_POST['trade_status'] == 'WAIT_BUYER_CONFIRM_GOODS') { //该判断表示卖家已经发了货,但买家还没有做确认收货的操作 //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 echo "success"; //请不要修改或删除 //调试用,写文本函数记录程序运行情况是否正常 //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录"); } else { if ($_POST['trade_status'] == 'TRADE_FINISHED') { //该判断表示买家已经确认收货,这笔交易完成 //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 echo "success"; //请不要修改或删除 //调试用,写文本函数记录程序运行情况是否正常 //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录"); } else { //其他状态判断 echo "success"; //调试用,写文本函数记录程序运行情况是否正常 //logResult ("这里写入想要调试的代码变量值,或其他运行的结果记录"); } } } } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } else { //验证失败 echo "fail"; //调试用,写文本函数记录程序运行情况是否正常 //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录"); } }