WeihuiPayment.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <?php
  2. namespace App\Repositories\Service\Payment;
  3. class WeihuiPayment extends PaymentInterface
  4. {
  5. /**
  6. * 支付请求地址
  7. *
  8. * @var string
  9. */
  10. private $payUrl = 'http://154.91.35.98:8080/api/pay';
  11. /**
  12. * 查询请求地址
  13. *
  14. * @var string
  15. */
  16. private $queryUrl = 'http://154.91.35.98:8080/query/pay';
  17. /**
  18. * 公钥
  19. *
  20. * @var string
  21. */
  22. private $publicKey = 'B6B58B53535D4081991D63D531ADF5C9';
  23. /**
  24. * @var null
  25. */
  26. private static $_instance = null;
  27. /**
  28. * @return WhiteSharkPayment|null
  29. */
  30. public static function getInstance()
  31. {
  32. if (is_null(self::$_instance)) {
  33. self::$_instance = new self();
  34. }
  35. return self::$_instance;
  36. }
  37. public function createPayLink($data = array())
  38. {
  39. $payInfo = [
  40. 'version' => 'v1.0', //商户号
  41. 'type' => $data['pay_attr_code'],
  42. 'userId' => $data['partner_id'],
  43. 'requestNo' => $data['order_sn'],
  44. 'amount' => (string)(sprintf('%.2f', $data['money']) * 100),
  45. 'callBackURL' => $data['notify_url'],
  46. 'redirectUrl' => $data['pay_url'],
  47. ];
  48. $payInfo['sign'] = md5($this->getSign($payInfo) . "key=" . $this->publicKey);
  49. $payInfo['attachData'] = 'DK';
  50. $sRes = $this->httpPost($this->payUrl, $payInfo, 2);
  51. if (empty($sRes)) {
  52. $this->_lastError = '请求异常';
  53. payLogger(__CLASS__, '请求异常data='.$sRes, $payInfo);
  54. return '';
  55. }
  56. $aRes = json_decode($sRes, true);
  57. if (empty($aRes)) {
  58. $this->_lastError = '请求异常!';
  59. payLogger(__CLASS__, '请求异常 (解析) data='.$sRes, $payInfo);
  60. return '';
  61. }
  62. if ($aRes['status'] != 1 || $aRes['message'] != '000000') {
  63. $this->_lastError = '请求异常,请求失败';
  64. payLogger(__CLASS__, '请求异常,请求失败 data='.$sRes, $payInfo);
  65. return '';
  66. }
  67. return $aRes['payUrl'];
  68. }
  69. public function queryOrder($data, &$orderSn, &$money, $partnerId)
  70. {
  71. $queryInfo = [
  72. 'userId' => $partnerId,
  73. 'requestNo' => $orderSn,
  74. 'orderNo' => $data['orderNo'],
  75. ];
  76. $queryInfo['sign'] = md5($this->getSign($queryInfo) . "key=" . $this->publicKey);
  77. $sRes = $this->httpPostJson($this->queryUrl, $queryInfo);
  78. if (empty($sRes)) {
  79. $this->_lastError = '查询请求异常';
  80. payLogger(__CLASS__, '查询请求异常 $queryInfo='.json_encode($queryInfo), $data);
  81. return '';
  82. }
  83. $aRes = json_decode($sRes, true);
  84. if (empty($aRes)) {
  85. $this->_lastError = '查询解析异常';
  86. payLogger(__CLASS__, '查询解析异常 data='.$sRes, $data);
  87. return '';
  88. }
  89. if ($aRes['status'] != 3) {
  90. $this->_lastError = '查询订单状态异常';
  91. payLogger(__CLASS__, '查询订单状态异常 data='.$sRes, $data);
  92. return '';
  93. }
  94. if ($money != $aRes['amount']) {
  95. $this->_lastError = '查询订单金额异常';
  96. payLogger(__CLASS__, '查询订单金额异常 data='.$sRes, $data);
  97. return '';
  98. }
  99. return true;
  100. }
  101. public function notify(&$orderSn, &$tradeNo, &$money, $partnerId)
  102. {
  103. $data = request()->all();
  104. if ($data['status'] != 3) {
  105. payLogger(__CLASS__, '回调订单状态失败', $data);
  106. return false;
  107. }
  108. $info = [
  109. 'userId' => $partnerId,
  110. 'status' => $data['status'],
  111. 'amount' => $data['amount'],
  112. 'payAmount' => $data['payAmount'],
  113. 'requestNo' => $data['requestNo'],
  114. 'orderNo' => $data['orderNo'],
  115. 'payTime' => $data['payTime'],
  116. ];
  117. if (isset($data['message'])) {
  118. $info['message'] = $data['message'];
  119. }
  120. $sign = md5($this->getSign($info) . "key=" . $this->publicKey);
  121. if ($sign != $data['sign']) {
  122. $this->_lastError = '验证失败!';
  123. payLogger(__CLASS__, '验证失败 $sign='.$sign, $data);
  124. return false;
  125. }
  126. $money = $data['amount'] / 100;
  127. $res = $this->queryOrder($data, $data['requestNo'], $data['amount'], $partnerId);
  128. if (empty($res)) {
  129. return '';
  130. }
  131. $orderSn = $data['requestNo'];
  132. $tradeNo = $data['orderNo'];
  133. return true;
  134. }
  135. public function stopNotify()
  136. {
  137. return '000000';
  138. }
  139. }