Pay.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. namespace app\index\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 Wxbase
  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 sm($id, $type)
  24. {
  25. $appid = config('app.official_appid');
  26. $data = $this->pay($appid, $type, $id);
  27. return json($data);
  28. }
  29. private function pay($appid, $type, $id)
  30. {
  31. $order = $this->$type($id);
  32. if (isset($order['code'])) return $order;
  33. $typeArr = [
  34. 'handanyijing'=>'hdyj',
  35. 'xinjushang'=>'xjs'
  36. ];
  37. if (!isset($typeArr[$order['mch']])) return ['code' => 1, 'msg' => $order['mch'] . '支付账户不存在'];
  38. $type = $typeArr[$order['mch']];
  39. // 获取配置信息
  40. $config = [
  41. 'app_id' => $appid,
  42. 'mch_id' => config("app.$type.mch_id"),
  43. 'key' => config("app.$type.mch_key"),
  44. ];
  45. $param = wxJsapiPay($config, $order, $this->user['openid']);
  46. return ['code' => 0, 'data' => $param];
  47. }
  48. private function activity($id)
  49. {
  50. $param = $this->request->param(['name', 'phone', 'vecode']);
  51. if (empty($param['name']) || empty($param['phone']))
  52. return ['code' => 1, 'msg' => '请输入姓名和手机号'];
  53. // 验证手机号验证码
  54. $sms = Sms::where(['phone' => $param['phone'], 'code' => $param['vecode'], 'purpose' => 'activity_phone_code', 'state' => 0])->find();
  55. if (empty($sms)) return ['code' => 1, 'msg' => '验证码错误'];
  56. $sms->state = 1;
  57. $sms->save();
  58. $today = date('Y-m-d');
  59. // 查询活动,获取活动金额
  60. $activity = Activity::where([['start_date', '<=', $today], ['end_date', '>=', $today]])->find($id);
  61. if (empty($activity))
  62. return ['code' => 1, 'msg' => '活动未开始或已结束'];
  63. if ($activity->money <= 0)
  64. return ['code' => 1, 'msg' => '无需支付'];
  65. if (empty($activity->wxmch))
  66. return ['code' => 1, 'msg' => '未设置支付账户'];
  67. // 重复交定排查
  68. $hadPay = ActivityOrder::where(['user_id' => $this->user['id'], 'activity_id' => $id, 'state' => 1])->count();
  69. if ($hadPay)
  70. return ['code' => 1, 'msg' => '请勿重复交定'];
  71. // 查找该客户所属客户
  72. $belongsToEmployee = Customer::where(['uid' => $this->user['id']])->value('employee_id');
  73. $activityOrder = ActivityOrder::create([
  74. 'order_no' => date('YmdHis') . rand(100000, 999999),
  75. 'money' => $activity['money'],
  76. 'user_id' => $this->user['id'],
  77. 'addtime' => time(),
  78. 'activity_id' => $activity->id,
  79. 'employee_id' => $belongsToEmployee,
  80. 'share_employee_id' => $this->request->share_employee,
  81. 'state' => 0,
  82. 'account' => $activity->wxmch,
  83. 'name' => $param['name'],
  84. 'phone' => $param['phone']
  85. ]);
  86. $mchType = $activity->wxmch;
  87. return [
  88. 'mch' => $mchType,
  89. 'orderNo' => $activityOrder->order_no,
  90. 'money' => $activityOrder->money,
  91. 'body' => '《' . $activity->title . '》活动定金支付',
  92. 'attach' => 'activityOrder',
  93. 'notifyUrl' => url('client/wxNotify/' . $mchType . 'Sm', [], true, true),
  94. ];
  95. }
  96. }