Notify.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <?php
  2. namespace addons\LuckyGroup\common\logic\notify;
  3. use addons\LuckyGroup\common\models\LuckyGroupOrder;
  4. use addons\LuckyGroup\common\enums\LuckyGroupEnum;
  5. use addons\LuckyGroup\common\logic\notify\SmsMessage;
  6. use common\enums\StatusEnum;
  7. use common\helpers\FormatHelper;
  8. use common\helpers\sms\Sms;
  9. use common\models\common\MallSetting;
  10. use common\models\order\Order;
  11. use common\models\user\User;
  12. use common\traits\ErrorTrait;
  13. use common\enums\RabbitMqEnum;
  14. use Overtrue\EasySms\PhoneNumber;
  15. use yii\helpers\Json;
  16. use Exception;
  17. /**
  18. * Class Notify
  19. * @Author: hua
  20. * @DateTime: 2021/10/18 9:39
  21. * @Copyright: copyright (c) 2021 广东七件事集团
  22. * @package common\logic\notify
  23. */
  24. class Notify
  25. {
  26. use ErrorTrait;
  27. /**
  28. * @Author: hua
  29. * @DateTime: 2021/10/18 9:57
  30. * @Copyright: copyright (c) 2021 广东七件事集团
  31. * @param $order_info
  32. * @return bool
  33. */
  34. public function notify($order_info)
  35. {
  36. try {
  37. $order = LuckyGroupOrder::findOne(['order_no' => $order_info['order_no']]);
  38. $res = LuckyGroupOrder::pay($order, $order_info['pay_type']);
  39. if ($res === false) throw new Exception(Order::getStaticError());
  40. return true;
  41. } catch (Exception $e) {
  42. \Yii::error('addons\LuckyGroup\common\logic\notify->notify;Exception'.$e->getMessage().$e->getFile().$e->getLine());
  43. \Yii::error('addons\LuckyGroup\common\logic\notify->notify'.json_encode($order_info));
  44. echo $e->getMessage();
  45. $this->setStaticError($e->getMessage());
  46. return false;
  47. }
  48. }
  49. /**
  50. * @param array $params
  51. * @return void
  52. * @throws \Exception
  53. */
  54. public function send(array $params)
  55. {
  56. \Yii::$app->custom->logs(__METHOD__ . "幸运拼团发送短信 " . Json::encode($params));
  57. \Yii::$app->services->rabbitMq->push(RabbitMqEnum::EXCHANGE_TASK, RabbitMqEnum::TASK_QUEUE, $params,
  58. self::class, 'async_handle');
  59. }
  60. public function async_handle($params)
  61. {
  62. if (empty($params['id'])) return;
  63. try {
  64. $order = LuckyGroupOrder::find()
  65. ->where(['id' => $params['id'], 'status' => StatusEnum::ENABLED])
  66. ->one();
  67. if (empty($order) || !in_array($order->group_status, [LuckyGroupEnum::GROUP_SUCCESS, LuckyGroupEnum::GROUP_FAIL])) {
  68. return;
  69. }
  70. $sms_key = LuckyGroupEnum::SMS_KEY_SUCCESS;
  71. if ($order->group_status == LuckyGroupEnum::GROUP_FAIL) {
  72. $sms_key = LuckyGroupEnum::SMS_KEY_FAIL;
  73. }
  74. //获取主商城短信配置
  75. $mall_config = MallSetting::getConfByGroup($order->mall_id, ['notice_sms'], true);
  76. $mall_sms = $mall_config['notice_sms']['platform']['value'];
  77. if ($mall_sms != 'aliyun') $sms_key = $sms_key.'_'.$mall_sms;
  78. $sms = \Yii::$app->services->setting->addons->get($order->mall_id, LuckyGroupEnum::ADDONS_NAME, "sms.$sms_key") ?? '[]';
  79. $sms_config = !empty($sms) ? Json::decode($sms) : null;
  80. $sms_config = $sms_config['data'] ?? null;
  81. if (empty($sms_config) || empty($sms_config['template_id']) || empty($sms_config['content'])) {
  82. \Yii::error(__METHOD__ . " 未配置短信模板 {$params['id']}");
  83. return true;
  84. }
  85. $user = User::find()
  86. ->where([
  87. 'id' => $order->user_id
  88. ])
  89. ->select('id,mobile,area_code')
  90. ->one();
  91. $mobile = $user->mobile;
  92. $sms_message_attr = [
  93. 'content' => $sms_config['content'],
  94. 'template' => $sms_config['template_id'],
  95. 'data' => [],
  96. 'mall_sms' => $mall_sms,
  97. ];
  98. $area_code = '86';// 初始化区号
  99. $gateways = 'domestic';// 默认国内短信
  100. // 检测是登录并且区号不为空则使用国际短信
  101. if (!empty($user->area_code) && $user->area_code != $area_code) {
  102. $gateways = 'international';
  103. $area_code = $user->area_code;
  104. }
  105. $this->sendSms([
  106. 'mall_id' => $order->mall_id,
  107. 'area_code' => $area_code,
  108. 'mobile' => $mobile,
  109. 'gateways' => $gateways,
  110. 'content' => $sms_message_attr,
  111. ]);
  112. return true;
  113. } catch (\Exception $e) {
  114. var_dump($e->getMessage(), $e->getFile(), $e->getLine());
  115. \Yii::error(FormatHelper::exception($e, __METHOD__));
  116. \Yii::$app->custom->logs(__METHOD__ . "幸运拼团发送短信失败 " . $e->getMessage());
  117. return false;
  118. }
  119. }
  120. public function sendSms($data)
  121. {
  122. try {
  123. $sms = new Sms($data['mall_id'], $data['gateways']);
  124. $message = new SmsMessage($data['content']);
  125. $mobile = new PhoneNumber($data['mobile'], $data['area_code']);
  126. if ($message->mall_sms != 'qcloud') {
  127. $resp = $sms->easySms->send($mobile, $message);
  128. } else {
  129. $resp = $sms->easySms->send($data['mobile'], $message);
  130. }
  131. return true;
  132. } catch (\Throwable $e) {
  133. // $exceptions = $e->getExceptions();
  134. // foreach($exceptions as $ex) {
  135. // echo"错误类型: " . get_class($ex)."\n"; echo"错误信息:".$ex->getMessage()."\n";
  136. // }
  137. $err = [
  138. 'file' => $e->getFile(),
  139. 'msg' => $e->getMessage(),
  140. 'line' => $e->getLine()
  141. ];
  142. \Yii::$app->custom->logs(__METHOD__ . "幸运拼团发送短信失败 " . Json::encode($err));
  143. }
  144. }
  145. }