1
0

Pay.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?php
  2. namespace app\client\controller;
  3. use app\model\Activity;
  4. use app\model\ActivityOrder;
  5. use app\model\Customer;
  6. use app\model\Sms;
  7. class Pay extends Base
  8. {
  9. // public function vecode($phone)
  10. // {
  11. // $code = rand(111111, 999999);
  12. // $data = [
  13. // 'phone' => $phone,
  14. // 'code' => $code,
  15. // 'state' => 0,
  16. // 'purpose' => 'activity_phone_code',
  17. // 'effective_time' => time() + 60 * 5
  18. // ];
  19. // Sms::create($data);
  20. // sendSms($phone, $code);
  21. // return json(['code' => 0, 'vecode' => $code]);
  22. // }
  23. public function mini($id, $type)
  24. {
  25. $token = request()->token;
  26. $appid = config("app.$token[client_type].mini_appid");
  27. $data = $this->pay($appid, $type, $id);
  28. return json($data);
  29. }
  30. private function pay($appid, $type, $id)
  31. {
  32. $order = $this->$type($id);
  33. if (isset($order['code'])) return $order;
  34. $typeArr = [
  35. 'handanyijing' => 'hdyj',
  36. 'xinjushang' => 'xjs'
  37. ];
  38. if (!isset($typeArr[$order['mch']])) return ['code' => self::error_debug_msg, 'msg' => $order['mch'] . '支付账户不存在'];
  39. $type = $typeArr[$order['mch']];
  40. // 获取配置信息
  41. $config = [
  42. 'app_id' => $appid,
  43. 'mch_id' => config("app.$type.mch_id"),
  44. 'key' => config("app.$type.mch_key"),
  45. ];
  46. $param = wxJsapiPay($config, $order, $this->request->token['openid']);
  47. return ['code' => self::success, 'data' => $param];
  48. }
  49. private function activity($id)
  50. {
  51. $param = $this->request->param(['name', 'phone']);
  52. // $param = $this->request->param(['name', 'phone', 'vecode']);
  53. // if (empty($param['name']) || empty($param['phone']))
  54. // return ['code' => self::error_msg, 'msg' => '请输入姓名和手机号'];
  55. // 验证手机号验证码
  56. // $sms = Sms::where(['phone' => $param['phone'], 'code' => $param['vecode'], 'purpose' => 'activity_phone_code', 'state' => 0])->find();
  57. // if (empty($sms)) return ['code' => self::error_msg, 'msg' => '验证码错误'];
  58. // $sms->state = 1;
  59. // $sms->save();
  60. $today = date('Y-m-d');
  61. // 查询活动,获取活动金额
  62. $activity = Activity::where([['start_date', '<=', $today], ['end_date', '>=', $today]])->find($id);
  63. if (empty($activity))
  64. return ['code' => self::error_msg, 'msg' => '活动未开始或已结束'];
  65. if ($activity->money <= 0)
  66. return ['code' => self::error_msg, 'msg' => '无需支付'];
  67. // if ($this->request->token['isEmployee'])
  68. // return ['code' => self::error_msg, 'msg' => '员工无需参加该活动'];
  69. if (empty($activity->wxmch))
  70. return ['code' => self::error_msg, 'msg' => '未设置支付账户'];
  71. // 重复交定排查
  72. $hadPay = ActivityOrder::where(['user_id' => $this->request->token['uid'], 'activity_id' => $id, 'state' => 1])->count();
  73. if ($hadPay)
  74. return ['code' => self::error_msg, 'msg' => '请勿重复交定'];
  75. // 查找该客户所属客户
  76. $belongsToEmployee = Customer::where(['uid' => $this->request->token['uid']])->value('employee_id');
  77. $activityOrder = ActivityOrder::create([
  78. 'order_no' => date('YmdHis') . rand(100000, 999999),
  79. 'money' => $activity['money'],
  80. 'user_id' => $this->request->token['uid'],
  81. 'addtime' => time(),
  82. 'activity_id' => $activity->id,
  83. 'employee_id' => $belongsToEmployee,
  84. 'share_employee_id' => $this->request->share_employee,
  85. 'state' => 0,
  86. 'account' => $activity->wxmch,
  87. 'name' => $param['name'],
  88. 'phone' => $param['phone']
  89. ]);
  90. $mchType = $activity->wxmch;
  91. return [
  92. 'mch' => $mchType,
  93. 'orderNo' => $activityOrder->order_no,
  94. 'money' => $activityOrder->money,
  95. 'body' => '《' . $activity->title . '》活动定金支付',
  96. 'attach' => 'activityOrder',
  97. 'notifyUrl' => url('client/wxNotify/' . $mchType . 'Mini', [], true, true),
  98. ];
  99. }
  100. }