Notify.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. use think\Db;
  5. use think\Log;
  6. use addons\epay\library\Service;
  7. /**
  8. * 支付回调
  9. */
  10. class Notify extends Api
  11. {
  12. protected $noNeedLogin = ['*'];
  13. protected $noNeedRight = ['*'];
  14. /**
  15. * 支付回调
  16. */
  17. public function notify() {
  18. $paytype = $this->request->param('paytype');
  19. $pay = Service::checkNotify($paytype);
  20. // Log::record("=======================", 'info');
  21. // Log::record("pay:", 'info');
  22. // Log::record($pay, 'info');
  23. // Log::record("=======================", 'info');
  24. if (!$pay) {
  25. echo '签名错误';
  26. return;
  27. }
  28. $data = $pay->verify();
  29. $time = time();
  30. try {
  31. $payamount = $paytype == 'alipay' ? $data['total_amount'] : $data['total_fee'] / 100;
  32. $out_trade_no = $data['out_trade_no'];
  33. Db::startTrans();
  34. try{
  35. $orderModel = new \app\common\model\RecharOrder();
  36. $userModel = new \app\common\model\User();
  37. $orderInfo = $orderModel->where(["order_no"=>$out_trade_no])->find();
  38. $userInfo = $userModel->where(["id"=>$orderInfo["user_id"]])->find();
  39. $res1 = false;
  40. $res2 = false;
  41. $res3 = false;
  42. if($orderInfo['status'] == 0) {
  43. // 修改订单状态
  44. $res1 = $orderModel->update(["status"=>1,"updatetime"=>$time],["order_no"=>$out_trade_no]);
  45. // 充值后
  46. switch($orderInfo['purpose']) {
  47. case 1:
  48. // 修改用户为已缴纳认证费
  49. $userInfo->recharge_auth = 1;
  50. $res2 = $userInfo->save();
  51. $res3 = true;
  52. break;
  53. case 2:
  54. // 添加有眼缘记录--单次付费
  55. $data = [];
  56. $data['user_id'] = $userInfo->id;
  57. $data['fate_user_id'] = $orderInfo->fate_user_id;
  58. if(!\app\common\model\UserFate::where($data)->find()) {
  59. $data['createtime'] = $time;
  60. $res2 = \app\common\model\UserFate::insert($data);
  61. } else {
  62. $res2 = true;
  63. }
  64. // 返利
  65. $preuser_id = $userInfo->pre_user_id;
  66. if($userInfo->vip_duetime < $time) {
  67. $memo = '用户充值获得收益!';
  68. $profit = $payamount * config('site.userProfitRate') * 0.01;
  69. } else {
  70. $memo = '会员充值获得收益!';
  71. $profit = $payamount * config('site.vipProfitRate') * 0.01;
  72. }
  73. if($profit>=0.01 && $preuser_id > 0) {
  74. $res3 = \app\common\model\User::profit($profit,$preuser_id,$memo);
  75. } else {
  76. $res3 = true;
  77. }
  78. break;
  79. case 3:
  80. // 获取vip配置信息
  81. $vip_config_id = $orderInfo['vip_config_id'];
  82. $vipConfigInfo = \app\admin\model\vip\Config::where(['id'=>$vip_config_id])->find();
  83. // 计算vip到期时间
  84. if($userInfo->vip_duetime < $time) {
  85. $duetime = strtotime ( '+'.intval($vipConfigInfo['time']).' month' );
  86. } else {
  87. $duetime = strtotime ( '+'.intval($vipConfigInfo['time']).' month',$userInfo->vip_duetime);
  88. }
  89. // 修改用户为vip
  90. if($userInfo->vip_duetime <= time()) {
  91. $userInfo->view_count = $vipConfigInfo->give_times; // 今日剩余次数
  92. $userInfo->view_date = date('Y-m-d'); // 次数最后更新日期
  93. }
  94. $userInfo->vip_duetime = $duetime;
  95. $res2 = $userInfo->save();
  96. // 添加查看次数
  97. $data = [];
  98. $data['user_id'] = $userInfo->id;
  99. $data['end_date'] = date("Y-m-d",$duetime);
  100. $data['times'] = $vipConfigInfo->give_times;
  101. $data['createtime'] = time();
  102. $res3 = \app\common\model\GiveFateLog::insert($data);
  103. break;
  104. }
  105. }
  106. if($res1 && $res2 !== false && $res3) {
  107. Db::commit();
  108. }
  109. }catch (ValidateException $e) {
  110. Db::rollback();
  111. $this->error($e->getMessage());
  112. } catch (PDOException $e) {
  113. Db::rollback();
  114. $this->error($e->getMessage());
  115. } catch (Exception $e) {
  116. Db::rollback();
  117. $this->error($e->getMessage());
  118. }
  119. //你可以在此编写订单逻辑
  120. } catch (Exception $e) {
  121. }
  122. echo $pay->success();
  123. }
  124. }