BasePaymentService.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. namespace app\common\service;
  3. use think\facade\Db;
  4. use think\facade\Log;
  5. abstract class BasePaymentService
  6. {
  7. // 支付配置
  8. protected $config;
  9. // 支付方式
  10. protected $payMethod;
  11. // 支付平台配置
  12. protected $payConfig;
  13. /**
  14. * 初始化支付服务
  15. */
  16. public function __construct($payMethod, $payConfigId = 0)
  17. {
  18. $this->payMethod = $payMethod;
  19. // 获取支付配置
  20. $this->payConfig = $this->getPayConfig($payMethod, $payConfigId);
  21. if (!$this->payConfig) {
  22. throw new \Exception('支付配置不存在或已禁用');
  23. }
  24. // 初始化支付平台配置
  25. $this->initConfig();
  26. }
  27. /**
  28. * 获取支付配置
  29. */
  30. public function getPayConfig($payMethod, $payConfigId = 0)
  31. {
  32. $query = Db::table('ba_pay_config')
  33. ->where('type', $payMethod == 'wechat' ? 1 : 2)
  34. ->where('status', 1);
  35. if ($payConfigId > 0) {
  36. $query->where('id', $payConfigId);
  37. }
  38. return $query->order('id', 'desc')->find();
  39. }
  40. /**
  41. * 初始化配置(子类实现)
  42. */
  43. abstract protected function initConfig();
  44. /**
  45. * 生成支付二维码
  46. */
  47. abstract public function createQrCode($orderNo, $amount, $subject, $body = '');
  48. /**
  49. * 处理支付回调
  50. */
  51. abstract public function handleNotify($input);
  52. /**
  53. * 查询支付订单
  54. */
  55. abstract public function queryOrder($orderNo);
  56. /**
  57. * 验证签名
  58. */
  59. abstract protected function verifySign($data, $sign);
  60. /**
  61. * 生成签名
  62. */
  63. abstract protected function generateSign($data);
  64. /**
  65. * 记录支付日志
  66. */
  67. protected function log($message, $data = [], $level = 'info')
  68. {
  69. $logData = [
  70. 'message' => $message,
  71. 'data' => $data,
  72. 'pay_method' => $this->payMethod,
  73. 'time' => date('Y-m-d H:i:s')
  74. ];
  75. Log::write("支付服务: " . json_encode($logData), $level);
  76. }
  77. }