ChanJetController.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace api\controllers;
  3. use addons\Chanjet\common\global_func\Common;
  4. use addons\Chanjet\common\models\AddonsChanjetAppTicket;
  5. use addons\Chanjet\common\models\AddonsChanjetOtherMsg;
  6. use common\enums\AddonsEnum;
  7. use Yii;
  8. use yii\helpers\Json;
  9. class ChanJetController extends OnAuthController
  10. {
  11. public $enableCsrfValidation = false;
  12. public $modelClass = '';
  13. protected $authOptional = ['index'];
  14. protected function verbs()
  15. {
  16. $verbs = parent::verbs();
  17. $verbs['index'] = ['POST', 'GET', 'HEAD']; //methods you need in action
  18. return $verbs;
  19. }
  20. /**
  21. * 接收畅捷通消息
  22. *
  23. * @return void
  24. */
  25. public function actionIndex()
  26. {
  27. Yii::error([
  28. 'title' => '畅捷通消息',
  29. 'get' => Yii::$app->request->get(),
  30. 'post' => Yii::$app->request->post()
  31. ]);
  32. $encryptMsg = Yii::$app->request->post('encryptMsg', '');
  33. if (empty($encryptMsg)) {
  34. Yii::$app->controller->asJson(['result' => 'success'])->send();
  35. return;
  36. }
  37. // 解密并写记录,用于获取token
  38. $messageKey = Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_CHANJET, 'basic.message_key');
  39. if (empty($messageKey)) {
  40. Yii::$app->controller->asJson(['result' => 'success'])->send();
  41. return;
  42. }
  43. $decodeData = Common::decryptAES($encryptMsg, $messageKey);
  44. if (empty($decodeData)) {
  45. Yii::$app->controller->asJson(['result' => 'success'])->send();
  46. return;
  47. }
  48. $dataToArray = Json::decode($decodeData);
  49. // 判断类型
  50. if (!empty($dataToArray['msgType']) && $dataToArray['msgType'] === 'APP_TICKET') {
  51. $count = AddonsChanjetAppTicket::find()
  52. ->where(['mall_id' => $this->mall_id])
  53. ->count();
  54. if ($count) {
  55. AddonsChanjetAppTicket::updateAll(['decode_data' => $dataToArray, 'updated_at' => time()], ['mall_id' => $this->mall_id]);
  56. } else {
  57. AddonsChanjetAppTicket::setData([
  58. 'mall_id' => $this->mall_id,
  59. 'decode_data' => $dataToArray
  60. ]);
  61. }
  62. } else {
  63. AddonsChanjetOtherMsg::setData([
  64. 'mall_id' => $this->mall_id,
  65. 'msg' => $decodeData
  66. ]);
  67. // TODO 如果是库存变动消息,更新库存
  68. }
  69. // 接收到消息后,必须这种返回
  70. Yii::$app->controller->asJson(['result' => 'success'])->send();
  71. }
  72. }