PaySuccess.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. namespace app\api\service\recharge;
  3. use app\api\service\Basics;
  4. use app\api\model\User as UserModel;
  5. use app\api\model\recharge\Order as OrderModel;
  6. //use app\api\model\WxappPrepayId as WxappPrepayIdModel;
  7. use app\api\model\user\BalanceLog as BalanceLogModel;
  8. //use app\common\enum\OrderType as OrderTypeEnum;
  9. use app\common\enum\order\PayType as PayTypeEnum;
  10. use app\common\enum\user\balanceLog\Scene as SceneEnum;
  11. use app\common\enum\recharge\order\PayStatus as PayStatusEnum;
  12. class PaySuccess extends Basics
  13. {
  14. // 订单模型
  15. public $model;
  16. // 当前用户信息
  17. private $user;
  18. /**
  19. * 构造函数
  20. * PaySuccess constructor.
  21. * @param $orderNo
  22. * @throws \think\exception\DbException
  23. */
  24. public function __construct($orderNo)
  25. {
  26. // 实例化订单模型
  27. $this->model = OrderModel::getPayDetail($orderNo);
  28. $this->wxappId = $this->model['wxapp_id'];
  29. // 获取用户信息
  30. $this->user = UserModel::detail($this->model['user_id']);
  31. }
  32. /**
  33. * 获取订单详情
  34. * @return OrderModel|null
  35. */
  36. public function getOrderInfo()
  37. {
  38. return $this->model;
  39. }
  40. /**
  41. * 订单支付成功业务处理
  42. * @param int $payType 支付类型
  43. * @param array $payData 支付回调数据
  44. * @return bool
  45. */
  46. public function onPaySuccess($payType, $payData)
  47. {
  48. return $this->model->transaction(function () use ($payType, $payData) {
  49. // 更新订单状态
  50. $this->model->save([
  51. 'pay_status' => PayStatusEnum::SUCCESS,
  52. 'pay_time' => time(),
  53. 'transaction_id' => $payData['transaction_id']
  54. ]);
  55. // 累积用户余额
  56. $this->user->setInc('balance', $this->model['actual_money']);
  57. // 用户余额变动明细
  58. BalanceLogModel::add(SceneEnum::RECHARGE, [
  59. 'user_id' => $this->user['user_id'],
  60. 'money' => $this->model['actual_money'],
  61. 'wxapp_id' => $this->wxappId,
  62. ], ['order_no' => $this->model['order_no']]);
  63. // 更新prepay_id记录
  64. if ($payType == PayTypeEnum::WECHAT) {
  65. // WxappPrepayIdModel::updatePayStatus($this->model['order_id'], OrderTypeEnum::RECHARGE);
  66. }
  67. return true;
  68. });
  69. }
  70. }