DgPayService.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. namespace App\Services;
  3. use BsPaySdk\core\BsPayClient;
  4. use BsPaySdk\request\V2TradeOnlinepaymentWappayRequest;
  5. use BsPaySdk\request\V2TradePaymentJspayRequest;
  6. use BsPaySdk\request\V2TradePaymentQueryRequest;
  7. use BsPaySdk\request\V2TradePaymentRefundRequest;
  8. use Illuminate\Support\Facades\Log;
  9. class DgPayService
  10. {
  11. protected BsPayClient $client;
  12. public function __construct()
  13. {
  14. // 加载SDK初始化文件
  15. require_once app_path('Support/BsPay/loader.php');
  16. $this->client = new BsPayClient();
  17. }
  18. /**
  19. * 创建支付订单
  20. */
  21. public function createOrder(string $orderNo, float $amount, string $subject, string $payType): array
  22. {
  23. try {
  24. // 根据支付方式选择对应的请求类
  25. $request = match ($payType) {
  26. 'ALIPAY_H5', 'WECHAT_H5' => new V2TradeOnlinepaymentWappayRequest(),
  27. 'ALIPAY_JSAPI', 'WECHAT_JSAPI' => new V2TradePaymentJspayRequest(),
  28. default => throw new \InvalidArgumentException('Unsupported pay type: ' . $payType),
  29. };
  30. // 设置请求参数
  31. $request->setReqDate(date('Ymd'));
  32. $request->setReqSeqId(date('YmdHis') . mt_rand(1000, 9999));
  33. $request->setTransAmt($amount);
  34. $request->setGoodsDesc($subject);
  35. // 其他参数
  36. // 调用接口
  37. $result = $this->client->postRequest($request);
  38. if (!$result || $result->isError()) {
  39. return [
  40. 'success' => false,
  41. 'message' => $result ? $result->getErrorInfo() : '支付失败'
  42. ];
  43. }
  44. return [
  45. 'success' => true,
  46. 'data' => $result->getRspDatas()
  47. ];
  48. } catch (\Exception $e) {
  49. Log::error('DgPay create order error: ' . $e->getMessage());
  50. return [
  51. 'success' => false,
  52. 'message' => $e->getMessage()
  53. ];
  54. }
  55. }
  56. /**
  57. * 查询订单
  58. */
  59. public function queryOrder(string $orderNo): array
  60. {
  61. try {
  62. $request = new V2TradePaymentJspayRequest();
  63. $request->setReqDate(date('Ymd'));
  64. $request->setReqSeqId(date('YmdHis') . mt_rand(1000, 9999));
  65. $result = $this->client->postRequest($request);
  66. if (!$result || $result->isError()) {
  67. return [
  68. 'success' => false,
  69. 'message' => $result ? $result->getErrorInfo() : '查询失败'
  70. ];
  71. }
  72. return [
  73. 'success' => true,
  74. 'data' => $result->getRspDatas()
  75. ];
  76. } catch (\Exception $e) {
  77. Log::error('DgPay query order error: ' . $e->getMessage());
  78. return [
  79. 'success' => false,
  80. 'message' => $e->getMessage()
  81. ];
  82. }
  83. }
  84. /**
  85. * 退款
  86. */
  87. public function refund(string $orderNo, string $refundNo, float $amount): array
  88. {
  89. try {
  90. $request = new V2TradePaymentJspayRequest();
  91. $request->setReqDate(date('Ymd'));
  92. $request->setReqSeqId(date('YmdHis') . mt_rand(1000, 9999));
  93. $result = $this->client->postRequest($request);
  94. if (!$result || $result->isError()) {
  95. return [
  96. 'success' => false,
  97. 'message' => $result ? $result->getErrorInfo() : '退款失败'
  98. ];
  99. }
  100. return [
  101. 'success' => true,
  102. 'data' => $result->getRspDatas()
  103. ];
  104. } catch (\Exception $e) {
  105. Log::error('DgPay refund error: ' . $e->getMessage());
  106. return [
  107. 'success' => false,
  108. 'message' => $e->getMessage()
  109. ];
  110. }
  111. }
  112. /**
  113. * 验证签名
  114. */
  115. public function verifySign(array $data): bool
  116. {
  117. try {
  118. // TODO: 实现签名验证
  119. return true;
  120. } catch (\Exception $e) {
  121. Log::error('DgPay verify sign error: ' . $e->getMessage());
  122. return false;
  123. }
  124. }
  125. }