Notify.php 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace addons\ElectronCoupon\common\logic\notify;
  3. use addons\ElectronCoupon\common\models\ElectronCouponGiveLogs;
  4. use addons\ElectronCoupon\common\models\ElectronCouponOrder;
  5. use addons\ElectronCoupon\common\models\ElectronCouponUserCoupon;
  6. use addons\ElectronCoupon\common\enums\ElectronCouponEnums;
  7. use common\traits\ErrorTrait;
  8. use yii\db\Exception;
  9. class Notify
  10. {
  11. use ErrorTrait;
  12. public function notify($order_info)
  13. {
  14. $tran = \Yii::$app->db->beginTransaction();
  15. try {
  16. $coupon_order = ElectronCouponOrder::getOne([
  17. ['order_no' => $order_info['order_no']]
  18. ]);
  19. if ($coupon_order->is_pay == ElectronCouponEnums::PAID) {
  20. throw new Exception('订单已支付 ' . $order_info['order_no']);
  21. }
  22. if ((float)$order_info['total_fee'] != (float)$coupon_order->price) {
  23. //throw new Exception('支付金额不正确 ' . $order_info['order_no']);
  24. }
  25. $update_pay_ststus = ElectronCouponOrder::setData([
  26. 'id' => $coupon_order->id,
  27. 'is_pay' => ElectronCouponEnums::PAID,
  28. 'pay_type' => $order_info['pay_type'],
  29. 'pay_time' => time(),
  30. 'mall_id' => $coupon_order->mall_id
  31. ]);
  32. if ($update_pay_ststus == false) {
  33. throw new Exception('订单更改支付状态失败 ' . $order_info['order_no'] . ElectronCouponOrder::getStaticError());
  34. }
  35. $user_coupon = ElectronCouponUserCoupon::getOne([
  36. ['id' => $coupon_order->user_e_coupon_id],
  37. ['user_id' => $coupon_order->user_id],
  38. ['mall_id' => $coupon_order->mall_id]
  39. ], true);
  40. if (!$user_coupon) {
  41. throw new Exception('找不到会员电子券 ' . $order_info['order_no']);
  42. }
  43. $update_user_counon = ElectronCouponUserCoupon::setData([
  44. 'id' => $user_coupon['id'],
  45. 'receive_amount' => -$coupon_order->number,
  46. 'active_amount' => $coupon_order->number,
  47. 'last_active_time' => time(),
  48. 'mall_id' => $coupon_order->mall_id
  49. ]);
  50. if ($update_user_counon == false) {
  51. throw new Exception('更改会员电子券激活数量失败 ' . $order_info['order_no'] . ElectronCouponUserCoupon::getStaticError());
  52. }
  53. //激活后
  54. $res = ElectronCouponGiveLogs::activeAfter($coupon_order['number'],$coupon_order['user_id'],$user_coupon['id'],time());
  55. if ($res == false) {
  56. throw new Exception(ElectronCouponGiveLogs::getStaticError());
  57. }
  58. $tran->commit();
  59. } catch (\Exception $e) {
  60. $tran->rollBack();
  61. \Yii::error('电子券激活订单支付回调:' . $e->getMessage());
  62. return false;
  63. }
  64. }
  65. }