OrderController.php 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\client\controllers\v1;
  8. use AopClient;
  9. use app\models\Goods;
  10. use app\models\Option;
  11. use app\models\Order;
  12. use app\models\OrderRefund;
  13. use app\models\PostageRules;
  14. use app\models\StoreAliMini;
  15. use app\models\SuperSales;
  16. use app\modules\admin\models\MerchantForm;
  17. use app\modules\client\behaviors\Auth;
  18. use app\modules\client\models\v1\admin\OrderPriceForm;
  19. use app\modules\client\models\v1\OrderRefundForm;
  20. use app\modules\client\controllers\BaseController;
  21. use app\modules\client\models\v1\ExpressDetailForm;
  22. use app\modules\client\models\v1\order\OrderPayDataForm;
  23. use app\modules\client\models\v1\order\OrderSubmitForm;
  24. use app\modules\client\models\v1\order\OrderSubmitPreviewForm;
  25. use app\modules\client\models\v1\OrderCommentForm;
  26. use app\modules\client\models\v1\OrderCommentPreview;
  27. use app\modules\client\models\v1\OrderConfirmForm;
  28. use app\modules\client\models\v1\OrderDetailForm;
  29. use app\modules\client\models\v1\OrderListForm;
  30. use app\modules\client\models\v1\OrderRefundDetailForm;
  31. use app\modules\client\models\v1\OrderRefundPreviewForm;
  32. use app\modules\client\models\v1\OrderRefundSendForm;
  33. use app\modules\client\models\v1\OrderRevokeForm;
  34. use app\modules\client\models\v1\SaasOrderForm;
  35. use app\utils\Alipay\alipaySdk\aop\request\AlipayOpenAppQrcodeCreateRequest;
  36. use app\utils\Delivery\Delivery;
  37. use app\utils\Delivery\Alipay\ADelivery;
  38. use app\utils\QrCode;
  39. use app\utils\ShareQrcode;
  40. use yii\base\BaseObject;
  41. use app\modules\admin\models\maiyatian\MaiyatianForm;
  42. use app\modules\admin\models\keloop\KeloopForm;
  43. include_once \Yii::$app->basePath . "/utils/Alipay/alipaySdk/aop/AopClient.php";;
  44. class OrderController extends BaseController
  45. {
  46. public function behaviors()
  47. {
  48. return parent::behaviors();
  49. }
  50. public function actionCheckBuyer()
  51. {
  52. $goods_ids = input_params('goods_ids', []);
  53. $is_shop = input_params('isShop', false);
  54. $address_id = input_params('address_id', 0);
  55. $is_giving_gifts = input_params('is_giving_gifts', 0);
  56. if($is_giving_gifts){
  57. return $this->asJson([
  58. 'code' => 0,
  59. 'msg' => 'ok',
  60. ]);
  61. }
  62. if(empty($goods_ids)){
  63. return $this->asJson([
  64. 'code' => 1,
  65. 'msg' => '参数错误',
  66. ]);
  67. }
  68. $goods_id = array_column($goods_ids, 'goods_id');
  69. if (empty($goods_id)) {
  70. $goods_id = $goods_ids;
  71. }
  72. if (!$is_shop) {
  73. $address = \app\models\Address::findOne($address_id);
  74. }
  75. $res = \app\models\OrderRulesBuyerLocation::checkLocationGoodsList($goods_id, $address, get_user_id());
  76. if (!$res) {
  77. $is_worker = false;
  78. //拼装goods_list数据
  79. $goods_list = [];
  80. foreach ($goods_ids as $goods_id_item) {
  81. $goods = Goods::findOne($goods_id_item['goods_id'] ?? $goods_id_item);
  82. if (intval($goods->product_type) === Goods::GOODS_TYPE_WORKER) {
  83. $is_worker = true;
  84. }
  85. $goods_list[] = [
  86. 'freight' => $goods->freight,
  87. 'num' => $goods_id_item['num'] ?? 1,
  88. 'weight' => $goods->weight * ($goods_id_item['num'] ?? 1),
  89. 'goods_id' => $goods->id,
  90. ];
  91. }
  92. $res = null;
  93. if ($address) {
  94. PostageRules::getExpressPriceMore(get_store_id(), $address->city_id, $goods_list, $address->province_id, $res);
  95. }
  96. if ($is_worker) {
  97. $res = null;
  98. }
  99. foreach ($goods_ids as $goods_id_item) {
  100. //是否可以购买超级卖货活动产品
  101. if (!SuperSales::canSuperSalesOrder(get_user_id(), $goods_id_item['goods_id'] ?? $goods_id_item, get_store_id(), $error_msg)) {
  102. $res[$goods_id_item['goods_id'] ?? $goods_id_item] = [
  103. 'status' => false,
  104. 'msg' => $error_msg,
  105. ];
  106. };
  107. }
  108. }
  109. return $this->asJson([
  110. 'code' => 0,
  111. 'msg' => 'ok',
  112. 'data' => $res,
  113. ]);
  114. }
  115. /**
  116. * 转换mch_list
  117. */
  118. public function actionFilterMchList()
  119. {
  120. $form = new OrderSubmitPreviewForm();
  121. $form->attributes = all_params();
  122. $form->store_id = get_store_id();
  123. $form->user_id = get_user_id();
  124. return $this->asJson($form->filter_mch_list());
  125. }
  126. /**
  127. * 新-订单提交前的预览页面
  128. * @return \yii\web\Response
  129. */
  130. public function actionSubmitPreview()
  131. {
  132. $form = new OrderSubmitPreviewForm();
  133. $form->attributes = post_params();
  134. $form->send = post_params('send','');
  135. $form->store_id = get_store_id();
  136. $form->user_id = get_user_id();
  137. $result = $form->search();
  138. if ($result['code']) {
  139. //需求:失败的话 需要让用户选择返回上一页 还是返回购物车 兼容前端
  140. $result['code'] = 400;
  141. }
  142. return $this->asJson($result);
  143. }
  144. /**
  145. * 新-订单提交
  146. * @return \yii\web\Response
  147. */
  148. public function actionSubmit()
  149. {
  150. $form = new OrderSubmitForm();
  151. $form->attributes = post_params();
  152. $form->send_price = post_params('send_price');
  153. $form->take_price = post_params('take_price');
  154. $form->balance = post_params('balance');
  155. $form->store_id = get_store_id();
  156. $form->user_id = get_user_id();
  157. $form->user = get_user();
  158. $result = $form->save();
  159. if ($result['code']) {
  160. //需求:失败的话 需要让用户选择返回上一页 还是返回购物车 兼容前端
  161. $result['code'] = 400;
  162. }
  163. return $this->asJson($result);
  164. }
  165. /**
  166. * 订单支付数据
  167. * @return \yii\web\Response
  168. */
  169. public function actionPayData()
  170. {
  171. $form = new OrderPayDataForm();
  172. $form->attributes = get_params();
  173. $form->store_id = get_store_id();
  174. $form->user = get_user();
  175. $result = $form->search();
  176. if ($result['code']) {
  177. //需求:失败的话 需要让用户选择返回上一页 还是返回购物车 兼容前端
  178. $result['code'] = 400;
  179. }
  180. return $this->asJson($result);
  181. }
  182. /**
  183. * 货到付款订单支付
  184. * @return void
  185. * User: hankaige
  186. * DATE TIME: 2022/12/30 15:24
  187. */
  188. public function actionMeetPayData(){
  189. $form = new OrderPayDataForm();
  190. $form->attributes = get_params();
  191. $form->store_id = get_store_id();
  192. $form->user = get_user();
  193. return $this->asJson($form->meetOrderPay());
  194. }
  195. public function actionGiftsReceivedAddr()
  196. {
  197. $form = new OrderSubmitForm();
  198. $form->attributes = all_params();
  199. $form->store_id = get_store_id();
  200. $form->user_id = get_user_id();
  201. $form->user = get_user();
  202. $result = $form->giftsReceivedAddr(all_params());
  203. if ($result['code']) {
  204. //需求:失败的话 需要让用户选择返回上一页 还是返回购物车 兼容前端
  205. $result['code'] = 400;
  206. }
  207. return $this->asJson($result);
  208. }
  209. /**
  210. * 订单列表
  211. * @return \yii\web\Response
  212. */
  213. public function actionList()
  214. {
  215. $form = new OrderListForm();
  216. $form->attributes = get_params();
  217. $form->store_id = get_store_id();
  218. $form->user_id = get_user_id();
  219. return $this->asJson($form->search(all_params()));
  220. }
  221. /**
  222. * 订单取消
  223. * @return \yii\web\Response
  224. */
  225. public function actionRevoke()
  226. {
  227. $form = new OrderRevokeForm();
  228. $form->attributes = get_params();
  229. $form->store_id = get_store_id();
  230. $form->user_id = get_user_id();
  231. return $this->asJson($form->save());
  232. }
  233. /**
  234. * 订单详情
  235. * @return \yii\web\Response
  236. */
  237. public function actionDetail()
  238. {
  239. $form = new OrderDetailForm();
  240. $form->attributes = get_params();
  241. $form->store_id = get_store_id();
  242. if (!empty(get_params('userId'))) {
  243. $form->user_id = get_params('userId');
  244. } else {
  245. $form->user_id = get_user_id();
  246. }
  247. return $this->asJson($form->search());
  248. }
  249. /**
  250. * 修改价格
  251. * @return mixed
  252. */
  253. public function actionModifyPrice()
  254. {
  255. $form = new OrderPriceForm();
  256. $form->attributes = post_params();
  257. $form->store_id = get_store_id();
  258. return $this->asJson($form->save());
  259. }
  260. /**
  261. * 获取核销码
  262. * @return \yii\web\Response
  263. */
  264. public function actionGetQrcode()
  265. {
  266. $order_no = get_params('order_no');
  267. $order_type = get_params('order_type', '');
  268. $page = "user/clerk/clerk";
  269. if ($order_type) {
  270. $scene = "order_no:{$order_no},type:{$order_type}";
  271. } else {
  272. $scene = "{$order_no}";
  273. }
  274. $file_name = [
  275. 'url_path' => ''
  276. ];
  277. if (is_wechat_platform()) {
  278. $file_name = ShareQrcode::wxQrcode($page,$scene);
  279. }
  280. if (is_alipay_platform()) {
  281. $request = new AlipayOpenAppQrcodeCreateRequest();
  282. $param = [
  283. 'url_param' => 'user/clerk/clerk',
  284. 'query_param' => $scene,
  285. 'describe' => "小程序开发上线使用"
  286. ];
  287. $aliConfigQr = $this->aliConfigQr($request, $param);
  288. $file_name['url_path'] = "";
  289. if ($aliConfigQr->code === "10000") {
  290. $file_name['url_path'] = $aliConfigQr->qr_code_url_circle_blue;
  291. }
  292. }
  293. if (is_h5() || is_app_platform()) {
  294. $fileName = md5('user/clerk/clerk' . $scene.get_store_id());
  295. // 保存小程序码到文件
  296. $dir = \Yii::$app->runtimePath . '/image/wx_qrcode';
  297. if (! is_dir($dir)) {
  298. mkdir($dir, 0777, true);
  299. }
  300. $file_name['url_path'] = str_replace('http://', 'https://', \Yii::$app->request->hostInfo . '/runtime/image/wx_qrcode/' . $fileName. '.jpg');
  301. QrCode::image(\Yii::$app->request->hostInfo . '/h5/#/user/clerk/clerk?scene='.$scene, 600, false, 'L', 'JPEG', 0, ['255,255,255', '0,0,0'], 1, false, $dir. '/' .$fileName . '.jpg');
  302. }
  303. $res = [
  304. 'code' => 0,
  305. 'msg' => 'success',
  306. 'data' => [
  307. 'url' => $file_name['url_path'],
  308. ]
  309. ];
  310. return $this->asJson($res);
  311. }
  312. /**
  313. * 订单确认收货
  314. */
  315. public function actionConfirm()
  316. {
  317. $form = new OrderConfirmForm();
  318. $form->attributes = get_params();
  319. $form->store_id = get_store_id();
  320. $form->user_id = get_user_id();
  321. return $this->asJson($form->save());
  322. }
  323. /**
  324. * 评论预览页面
  325. */
  326. public function actionCommentPreview()
  327. {
  328. $form = new OrderCommentPreview();
  329. $form->attributes = get_params();
  330. $form->store_id = get_store_id();
  331. $form->user_id = get_user_id();
  332. return $this->asJson($form->search());
  333. }
  334. /**
  335. * 评论提交
  336. */
  337. public function actionComment()
  338. {
  339. $form = new OrderCommentForm();
  340. $form->attributes = post_params();
  341. $form->store_id = get_store_id();
  342. $form->user_id = get_user_id();
  343. return $this->asJson($form->save());
  344. }
  345. /**
  346. * 售后页面
  347. */
  348. public function actionRefundPreview()
  349. {
  350. $form = new OrderRefundPreviewForm();
  351. $form->attributes = get_params();
  352. $form->store_id = get_store_id();
  353. $form->user_id = get_user_id();
  354. return $this->asJson($form->search());
  355. }
  356. /**
  357. * 售后订单列表
  358. */
  359. public function actionRefundList() {
  360. $form = new OrderListForm();
  361. $form->store_id = get_store_id();
  362. $form->user_id = get_user_id();
  363. $form->order_id = get_params('order_id');
  364. $form->status = get_params('status');
  365. return $this->asJson($form->getNewRefundList());
  366. }
  367. /**
  368. * 售后订单列表
  369. */
  370. public function actionIntegralList() {
  371. $form = new OrderListForm();
  372. $form->store_id = get_store_id();
  373. $form->user_id = get_user_id();
  374. return $this->asJson($form->getIntegralList());
  375. }
  376. /**
  377. * 售后提交
  378. */
  379. public function actionRefund()
  380. {
  381. $form = new OrderRefundForm();
  382. $form->attributes = post_params();
  383. $form->store_id = get_store_id();
  384. $form->user_id = get_user_id();
  385. return $this->asJson($form->save());
  386. }
  387. /**
  388. * 售后订单详情
  389. */
  390. public function actionRefundDetail()
  391. {
  392. $form = new OrderRefundDetailForm();
  393. $form->attributes = get_params();
  394. $form->store_id = get_store_id();
  395. $form->user_id = get_user_id();
  396. return $this->asJson($form->search());
  397. }
  398. /**
  399. * 售后订单取消
  400. */
  401. public function actionRefundCancel()
  402. {
  403. $t = \Yii::$app->db->beginTransaction();
  404. try {
  405. $order_refund_id = post_params('order_refund_id');
  406. $orderRefund = OrderRefund::findOne(['id' => $order_refund_id, 'is_delete' => 0, 'store_id' => get_store_id()]);
  407. if (!$orderRefund) {
  408. return $this->asJson([
  409. 'code' => 1,
  410. 'msg' => '订单不存在'
  411. ]);
  412. }
  413. if (in_array($orderRefund->status, [0, 3]) && $orderRefund->is_user_send == 0) {
  414. $orderRefund->is_user_cancel = 1;
  415. if (!$orderRefund->save()) {
  416. throw new \Exception($orderRefund->errors[0]);
  417. }
  418. $merchant = new MerchantForm();
  419. $result = $merchant->orderRefundCancel($orderRefund->order_id);
  420. if ($result['code']) {
  421. throw new \Exception($result['msg']);
  422. }
  423. $t->commit();
  424. return $this->asJson([
  425. 'code' => 0,
  426. 'msg' => '取消成功'
  427. ]);
  428. }
  429. throw new \Exception('取消失败,当前订单在流程中');
  430. } catch (\Exception $e) {
  431. $t->rollBack();
  432. return $this->asJson([
  433. 'code' => 1,
  434. 'msg' => $e->getMessage()
  435. ]);
  436. }
  437. }
  438. /**
  439. * 售后订单删除
  440. */
  441. public function actionRefundDelete()
  442. {
  443. $order_refund_id = post_params('order_refund_id');
  444. $orderRefund = OrderRefund::findOne(['id' => $order_refund_id, 'is_delete' => 0, 'store_id' => get_store_id()]);
  445. if (!$orderRefund) {
  446. return $this->asJson([
  447. 'code' => 1,
  448. 'msg' => '订单不存在'
  449. ]);
  450. }
  451. OrderRefund::updateAll(['user_delete' => 1], ['id' => $order_refund_id]);
  452. return $this->asJson([
  453. 'code' => 0,
  454. 'msg' => '删除成功'
  455. ]);
  456. }
  457. /**
  458. * 全返订单列表
  459. * @return \yii\web\Response
  460. */
  461. public function actionQuanfan()
  462. {
  463. $form = new OrderListForm();
  464. $form->attributes = get_params();
  465. $form->store_id = $this->store_id;
  466. $form->user_id = get_user_id();
  467. return $this->asJson($form->quanfan());
  468. }
  469. /**
  470. * 售后订单用户发货
  471. * @return \yii\web\Response
  472. */
  473. public function actionRefundSend()
  474. {
  475. $form = new OrderRefundSendForm();
  476. $form->attributes = post_params();
  477. $form->user_id = get_user_id();
  478. return $this->asJson($form->save());
  479. }
  480. /**
  481. * 订单物流信息
  482. */
  483. public function actionExpressDetail()
  484. {
  485. $form = new ExpressDetailForm();
  486. $form->attributes = get_params();
  487. $form->store_id = get_store_id();
  488. $form->user_id = get_user_id();
  489. return $this->asJson($form->search());
  490. }
  491. /**
  492. * saas订单列表
  493. * @return \yii\web\Response
  494. */
  495. public function actionSaas() {
  496. $form = new SaasOrderForm();
  497. $form->attributes = get_params();
  498. $form->user_id = get_user_id();
  499. $form->status = get_params('status');
  500. return $this->asJson($form->getList());
  501. }
  502. /**
  503. * 同城配送预下单
  504. * @return \yii\web\Response
  505. */
  506. public function actionPreSubmitOrder() {
  507. $form = new OrderSubmitForm();
  508. $form->attributes = post_params();
  509. $form->store_id = get_store_id();
  510. $form->user_id = get_user_id();
  511. $form->user = get_user();
  512. $form->pre_order_data = post_params('data');
  513. $result = $form->preOrder();
  514. if ($result['code']) {
  515. //需求:失败的话 需要让用户选择返回上一页 还是返回购物车 兼容前端
  516. $result['code'] = 400;
  517. }
  518. return $this->asJson($result);
  519. }
  520. /**
  521. * 预取消订单
  522. * @return \yii\web\Response
  523. */
  524. public function actionPreCancelOrder() {
  525. $order_id = post_params('order_id');
  526. $reason_id = post_params('reason_id', 5);
  527. $reason = post_params('reason', '其他原因');
  528. $order = Order::findOne($order_id);
  529. if (!$order) {
  530. $this->asJson([
  531. 'code' => 1,
  532. 'msg' => '订单不存在'
  533. ]);
  534. }
  535. $delivery = \app\models\DeliveryKeloop::findOne(['order_no' => $order->order_no, 'store_id' => $order->store_id]);
  536. if($delivery && KeloopForm::isSaasOpen()){
  537. return $this->asJson([
  538. 'code' => 0,
  539. 'msg' => '预取消订单',
  540. 'data' => [
  541. 'resultcode' => 0,
  542. ],
  543. ]);
  544. }
  545. $delivery = \app\models\DeliveryMaiyatian::findOne(['order_no' => $order->order_no, 'store_id' => $order->store_id]);
  546. if($delivery && MaiyatianForm::isopen(get_store_id())){
  547. return $this->asJson([
  548. 'code' => 0,
  549. 'msg' => '预取消订单',
  550. 'data' => [
  551. 'resultcode' => 0,
  552. ],
  553. ]);
  554. }
  555. $delivery = \app\models\DeliveryInfo::findOne(['order_no' => $order->order_no, 'store_id' => $order->store_id]);
  556. if($delivery['is_local'] == 1){
  557. if($delivery['local_status'] > 0){
  558. return $this->asJson([
  559. 'code' => 1,
  560. 'msg' => '预取消订单失败,原因:已经开始配送',
  561. 'data' => [
  562. 'resultcode' => 0,
  563. ],
  564. ]);
  565. }
  566. return $this->asJson([
  567. 'code' => 0,
  568. 'msg' => '预取消订单',
  569. 'data' => [
  570. 'resultcode' => 0,
  571. ],
  572. ]);
  573. }
  574. if($order->alipay_trade_no){
  575. $res = ADelivery::cancelOrder(1, get_store_id(), get_mini_id(), get_saas_user()->ali_user_id, $order->order_no, $reason_id, $reason);;
  576. return $res;
  577. }
  578. $result = Delivery::preCancelOrder($order->order_no, $reason_id, $reason);
  579. return $this->asJson($result);
  580. }
  581. /**
  582. * 取消订单
  583. * @return \yii\web\Response
  584. */
  585. public function actionCancelOrder() {
  586. $order_id = post_params('order_id');
  587. $reason_id = post_params('reason_id', 5);
  588. $reason = post_params('reason', '其他原因');
  589. $order = Order::findOne($order_id);
  590. if (!$order) {
  591. $this->asJson([
  592. 'code' => 1,
  593. 'msg' => '订单不存在'
  594. ]);
  595. }
  596. $delivery = \app\models\DeliveryKeloop::findOne(['order_no' => $order->order_no, 'store_id' => $order->store_id]);
  597. if($delivery && KeloopForm::isSaasOpen()){
  598. $reason = Delivery::$validReason[$reason_id];
  599. $res = KeloopForm::order_canceled(get_store_id(), $order_id, $reason, 1);
  600. $res['data']['resultcode'] = $res['code'];
  601. return $this->asJson($res);
  602. }
  603. $delivery = \app\models\DeliveryMaiyatian::findOne(['order_no' => $order->order_no, 'store_id' => $order->store_id]);
  604. if($delivery && MaiyatianForm::isopen(get_store_id())){
  605. $reason = Delivery::$validReason[$reason_id];
  606. $res = MaiyatianForm::order_canceled(get_store_id(), $order_id, $reason, 1);
  607. $res['data']['resultcode'] = $res['code'];
  608. return $this->asJson($res);
  609. }
  610. $delivery = \app\models\DeliveryInfo::findOne(['order_no' => $order->order_no, 'store_id' => $order->store_id]);
  611. if($delivery['is_local'] == 1){
  612. if($delivery['local_status'] > 0){
  613. return $this->asJson([
  614. 'code' => 1,
  615. 'msg' => '取消订单失败,原因:已经开始配送',
  616. 'data' => [
  617. 'resultcode' => 0,
  618. ],
  619. ]);
  620. }
  621. return $this->asJson([
  622. 'code' => 0,
  623. 'msg' => '取消订单',
  624. 'data' => [
  625. 'resultcode' => 0,
  626. ],
  627. ]);
  628. }
  629. if($order->alipay_trade_no){
  630. $res = ADelivery::cancelOrder(0, get_store_id(), get_mini_id(), get_saas_user()->ali_user_id, $order->order_no, $reason_id, $reason);;
  631. return $this->asJson($res);
  632. }
  633. $result = Delivery::cancelOrder($order->order_no, $reason_id, $reason);
  634. return $this->asJson($result);
  635. }
  636. /**
  637. * @return \yii\web\Response
  638. */
  639. public function actionUserDelete() {
  640. $order_id = post_params('order_id');
  641. $order = Order::findOne(['id' => $order_id, 'user_delete' => 1]);
  642. if ($order) {
  643. return $this->asJson([
  644. 'code' => 1,
  645. 'msg' => '订单已删除'
  646. ]);
  647. }
  648. Order::updateAll(['user_delete' => 1], ['id' => $order_id]);
  649. return $this->asJson([
  650. 'code' => 0,
  651. 'msg' => '删除成功'
  652. ]);
  653. }
  654. public function actionFriendPay() {
  655. $order_id = post_params('order_id');
  656. $order = Order::findOne(['id' => $order_id, 'is_delete' => 0]);
  657. \Yii::warning(['-------- 代付 -------', [$order_id, get_user_id()]]);
  658. if (get_user_id() != $order->user_id) {
  659. $order->pay_user_id = get_user_id();
  660. $order->save();
  661. }
  662. return $this->asJson([
  663. 'code' => 0,
  664. 'msg' => 'success'
  665. ]);
  666. }
  667. public function aliConfigQr($request, $data = [])
  668. {
  669. try {
  670. $third_appid = Option::get("alipay_appid", 0, 'saas')['value'];
  671. $third_private_key = Option::get("alipay_app_private_key", 0, 'saas')['value'];
  672. $third_public_key = Option::get("alipay_public_key", 0, 'saas')['value'];
  673. $data = json_encode($data);
  674. $config_ali = Option::get(Option::OPTOPN_KEY, get_store_id(), 'alipay')['value'];
  675. $config_ali = json_decode($config_ali, true);
  676. $aop = new AopClient();
  677. //如果商城的支付宝小程序信息存在,则使用支付宝小程序的配置信息
  678. if (!empty($config_ali['app_id']) && !empty($config_ali['app_private_key']) && !empty($config_ali['app_public_key'])) {
  679. $aop->appId = $config_ali['app_id'];
  680. $aop->rsaPrivateKey = $config_ali['app_private_key'];
  681. $aop->alipayrsaPublicKey = $config_ali['app_public_key'];
  682. } else {
  683. //使用三方的配置信息
  684. $aop->appId = $third_appid;
  685. $aop->rsaPrivateKey = $third_private_key;
  686. $aop->alipayrsaPublicKey = $third_public_key;
  687. $ali_mini = StoreAliMini::find()->where(['auth_app_id' => $config_ali['app_id'], 'is_cancel' => 0, 'store_id' => get_store_id()])->asArray()->one();
  688. if (empty($ali_mini)) {
  689. throw new \Exception("查找小程序信息失败");
  690. }
  691. $token = $ali_mini['auth_token'];
  692. }
  693. $aop->encryptType = "AES";
  694. $aop->apiVersion = '1.0';
  695. $aop->signType = 'RSA2';
  696. $aop->postCharset = 'utf-8';
  697. $aop->format = 'json';
  698. $request->setBizContent($data);
  699. if (!empty($token)) {
  700. $result = $aop->execute ($request, null, $token);
  701. } else {
  702. $result = $aop->execute ($request);
  703. }
  704. $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
  705. return $result->$responseNode;
  706. } catch (\Exception $e) {
  707. return [
  708. 'code' => 1,
  709. 'msg' => $e->getMessage()
  710. ];
  711. }
  712. }
  713. /**
  714. * 线下转账信息(店铺)
  715. *
  716. * @return void
  717. */
  718. public function actionPayOfflineSetting()
  719. {
  720. $store_id = get_store_id();
  721. return $this->asJson([
  722. 'code' => 0,
  723. 'msg' => 'success',
  724. 'data' => ['conf' => \app\modules\admin\models\SaasForm::offlineSetting($store_id)],
  725. 'store_id' => get_store_id(),
  726. ]);
  727. }
  728. /**
  729. * 点金计划订单详情
  730. * @return \yii\web\Response
  731. */
  732. public function actionGoldplan()
  733. {
  734. $form = new OrderDetailForm();
  735. $orderNo = input_params('order_no', '');
  736. return $this->asJson($form->goldplan($orderNo));
  737. }
  738. public function actionTestAdapay() {
  739. include_once \Yii::$app->basePath . "/utils/Adapay/AdapaySdk/init.php";
  740. \AdaPay\AdaPay::init([
  741. "api_key_live" => "api_live_2fdb32b6-2807-4d4a-99f7-fc0a9b3c8fa5",
  742. "api_key_test" => "api_test_46be6a5e-c047-4cd0-9aac-c8c73a332f51",
  743. // "rsa_public_key" => "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCS0Fpi540Y5pPtItiRrsnguG8N22mwbNcHaA+ZfqDxEM32bNoLp7VhV/4T9jUS8plSYkH3kr7xmWl311f0qxEz5S4LbQACN/vDag48zsY2iTulhnCdpbhFqqCVnuK86g7uFyGhy9PJwGscXpmLxXkA1jwEFXM+8NTjfD8YsEdF0QIDAQAB",
  744. "rsa_private_key" => "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJLQWmLnjRjmk+0i2JGuyeC4bw3babBs1wdoD5l+oPEQzfZs2guntWFX/hP2NRLymVJiQfeSvvGZaXfXV/SrETPlLgttAAI3+8NqDjzOxjaJO6WGcJ2luEWqoJWe4rzqDu4XIaHL08nAaxxemYvFeQDWPAQVcz7w1ON8PxiwR0XRAgMBAAECgYEAgg4gg80rqQtZr5BW2XdFTtUTS+s6zRcdxWnhp9ANMn/4dHwpDHocq4cPhQ9uJMLUH677UR2mGNAWJhuVxyBjs4J2qVFACpU4Ta9BRQXCppao3maB+04Uobik0xObAz6Fj+EitfO3HFrV6ilPtEMtiObd25uS/aQF7tLKgC+rs4ECQQDeTQyAtmWG+5Iacz1uIxLBWIyz5uIwdRb8pAcA/XIR/alv0IOEhPmYTq/6234av6CP9tWl65vOjozBY5D7RbDNAkEAqRHWNu0Zyw6koY6Pu3mivABanY0lZHigdSmxwAQqB8HnUXpuSscj5N1KxlTVvcPw40pbKOCrUoRXib9Cu3rZFQJAZdBkKY9gcLJH+FVPjWIC9QrZZowYjJkULiHyE0IBPLwxHkUh90/wARIJB5v/5cBeiZFDyPpgIfqn/OrdPDhvAQJAUd8JVN/MNcCJiJJ4l9h3LYMeXl0TVmvzh8kBAnMBx2/mjFY1QpDcmN9wbkp2lsZjyC0hp9HkJLlhiprLve3nYQJBAJZ8XdINDo+P9YJLEwMn1OrDG8h071YijgvAvHpZWxb+7GbUhExkDUVaT99jjLzGZ8mVvvTJ/VoqnFu4+ALyAjE=",
  745. ], "live", true);
  746. $app_id = 'app_9aa823b9-d959-4307-a931-23ba8780f9aa';
  747. $open_id = 'oNiCd4gweWf2Irg2K5WfTFWFGEts';
  748. # 初始化支付类
  749. $payment = new \AdaPaySdk\Payment();
  750. # 支付设置
  751. $payment_params = array(
  752. "app_id"=> $app_id,
  753. "order_no"=> date("YmdHis").rand(100000, 999999),
  754. "pay_channel"=> "wx_lite",
  755. // "time_expire"=> "20200101000000",
  756. "pay_amt"=> "0.01",
  757. "goods_title"=> "subject",
  758. "goods_desc"=> "body",
  759. "description"=> "description",
  760. 'expend' => [
  761. 'open_id' => $open_id,
  762. ],
  763. 'notify_url' => '',
  764. );
  765. # 发起支付
  766. $payment->create($payment_params);
  767. # 对支付结果进行处理
  768. if ($payment->isError()){
  769. //失败处理
  770. var_dump($payment->result);
  771. } else {
  772. //成功处理
  773. var_dump($payment->result);
  774. }
  775. }
  776. public function actionGetLocation() {
  777. $form = new OrderDetailForm();
  778. $form->attributes = \Yii::$app->request->get();
  779. $form->attributes = \Yii::$app->request->post();
  780. $form->store_id = get_store_id();
  781. return $this->asJson($form->map());
  782. }
  783. //单品选择数量退款功能
  784. public function actionOrderGoodsCancel() {
  785. $form = new OrderRevokeForm();
  786. $form->attributes = post_params();
  787. $form->user_id = get_user_id();
  788. $form->store_id = get_store_id();
  789. return $this->asJson($form->orderGoodsCancel());
  790. }
  791. //单个待评论列表
  792. public function actionOrderCommentWaitOnce() {
  793. $form = new OrderCommentForm();
  794. $form->attributes = get_params();
  795. $form->store_id = get_store_id();
  796. $form->user_id = get_user_id();
  797. return $this->asJson($form->orderCommentOnce());
  798. }
  799. //评论列表
  800. public function actionOrderCommentWaitList() {
  801. $form = new OrderCommentForm();
  802. $form->attributes = get_params();
  803. $form->store_id = get_store_id();
  804. $form->user_id = get_user_id();
  805. return $this->asJson($form->orderCommentWaitList());
  806. }
  807. //已评价列表
  808. public function actionOrderCommentList() {
  809. $form = new OrderCommentForm();
  810. $form->attributes = get_params();
  811. $form->user_id = get_user_id();
  812. return $this->asJson($form->orderCommentList());
  813. }
  814. }