PayNotifyService.php 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. namespace app\api\service;
  3. use app\common\model\MemberCoinInfo;
  4. use app\common\model\MemberCoinPay;
  5. use app\common\model\Members;
  6. use think\Db;
  7. class PayNotifyService
  8. {
  9. /**
  10. * 更新订单信息
  11. *
  12. * @param string $orderid :订单编号
  13. * @param string $real_amount :第三方支付的金额(现金部分)
  14. *
  15. * @return boolean
  16. */
  17. public function updateOrderCoin($orderid, $real_amount = 0, $callback_order = '', $currency = 'CNY')
  18. {
  19. $memberCoinPayModel = new MemberCoinPay();
  20. $membersModel = new Members();
  21. $result = false;
  22. //消费订单信息
  23. $payInfo = $memberCoinPayModel->field('id,userid,orderid,amount,real_amount,status')->where(['orderid' => $orderid])->find();
  24. if ($payInfo['status'] == 1 && $payInfo['real_amount'] == $real_amount) {
  25. return true;
  26. }
  27. if ($real_amount != '' && $payInfo['real_amount'] != $real_amount) {
  28. $result = false;
  29. //写入日志
  30. log_message('订单编号:' . $orderid . '支付金额不一致,订单状态更新失败', 'error', LOG_PATH . '../paylog/');
  31. } //待支付状态时
  32. elseif ($payInfo['status'] == 0) {
  33. // 启动事务
  34. Db::startTrans();
  35. try {
  36. $memberCoinPayModel->where(['id' => $payInfo['id']])->update(['status' => 1, 'pay_time' => NOW_TIMESTAMP, 'callback_order' => $callback_order, 'currency'=> $currency]);
  37. $members = $membersModel->field('id,amount')->where('id', $payInfo['userid'])->find();
  38. $coinData = [
  39. 'userid' => $payInfo['userid'],
  40. 'orderid' => $payInfo['orderid'],
  41. 'start_amount' => $members['amount'],
  42. 'amount' => $payInfo['amount'],
  43. 'result_amount' => priceFormat($members['amount'] + $payInfo['amount']),
  44. 'type' => 1,
  45. 'remarks' => '平台币充值',
  46. 'create_time' => NOW_TIMESTAMP,
  47. ];
  48. $memberCoinInfoModel = new MemberCoinInfo();
  49. if (!$memberCoinInfoModel->insertGetId($coinData)) {
  50. Db::rollback();
  51. return false;
  52. }
  53. if (!$membersModel->where('id', $payInfo['userid'])->update(['amount' => priceFormat($members['amount'] + $payInfo['amount'])])) {
  54. Db::rollback();
  55. return false;
  56. }
  57. // 提交事务
  58. Db::commit();
  59. return true;
  60. } catch (\Exception $e) {
  61. // 回滚事务
  62. Db::rollback();
  63. //写入日志
  64. log_message('订单编号:' . $orderid . '订单状态更新失败' . $e->getMessage(), 'error', LOG_PATH . '../paylog/');
  65. }
  66. }
  67. return false;
  68. }
  69. }