KaopuPayment.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. namespace App\Repositories\Service\Payment;
  3. class KaopuPayment extends PaymentInterface
  4. {
  5. /**
  6. * 支付请求地址
  7. *
  8. * @var string
  9. */
  10. private $payUrl = 'http://116.62.180.111:8888/WebHandler/H5PayHandler.ashx';
  11. /**
  12. * 查询请求地址
  13. *
  14. * @var string
  15. */
  16. private $queryUrl = 'http://116.62.180.111:8888/WebHandler/H5PayStateHandler.ashx';
  17. const SUCESS_CODE = 200;
  18. /**
  19. * @var null
  20. */
  21. private static $_instance = null;
  22. /**
  23. * @return WhiteSharkPayment|null
  24. */
  25. public static function getInstance()
  26. {
  27. if (is_null(self::$_instance)) {
  28. self::$_instance = new self();
  29. }
  30. return self::$_instance;
  31. }
  32. /**
  33. * 私钥
  34. *
  35. * @var string
  36. */
  37. private $publicKey = 'MIZFYK0C';
  38. public function createPayLink($data = array())
  39. {
  40. $payInfo = [
  41. 'CustomerId' => $data['partner_id'],
  42. 'OrderId' => $data['orderSn'],
  43. 'Money' => $data['money'],
  44. 'notifyUrl' => $data['notify_url']
  45. ];
  46. $md5Sign = md5("CustomerId={$data['partner_id']}&key={$this->publicKey}&Money={$data['money']}&notifyUrl={$data['notify_url']}&OrderId={$data['order_sn']}");
  47. $sRes = $this->httpGet($this->payUrl . '?CustomerId=' . $data['partner_id'] . '&OrderId=' . $data['orderSn']. '&Money=' . $data['money'] . '&notifyUrl=' . $data['notify_url'] . '&MD5sign=' . $md5Sign);
  48. if (empty($sRes)) {
  49. $this->_lastError = '请求异常';
  50. payLogger(__CLASS__,'请求异常data='.$sRes,$payInfo);
  51. return '';
  52. }
  53. $aRes = json_decode($sRes, true);
  54. if (empty($aRes)) {
  55. $this->_lastError = '请求异常!';
  56. payLogger(__CLASS__,'请求异常 (解析) data='.$sRes,$payInfo);
  57. return '';
  58. }
  59. if ($aRes['result_state'] != 'true' || $aRes['msg'] != '成功') {
  60. $this->_lastError = '请求异常,请求失败';
  61. payLogger(__CLASS__,'请求异常,请求失败 data='.$sRes,$payInfo);
  62. return '';
  63. }
  64. return $aRes['payUrl'];
  65. }
  66. public function queryOrder($data, &$orderSn, &$money, $partnerId)
  67. {
  68. $sign = strtoupper(md5("CustomerId={$partnerId}&key={$this->publicKey}&OrderId={$orderSn}"));
  69. $queryUrl = $this->queryUrl . '?CustomerId=' . $partnerId . '&OrderId=' . $orderSn . '&MD5sign=' . $sign;
  70. $sRes = $this->httpGet($queryUrl);
  71. if (empty($sRes)) {
  72. $this->_lastError = '查询请求异常';
  73. payLogger(__CLASS__,'查询请求异常 $queryInfo=' . $queryUrl ,$data);
  74. return '';
  75. }
  76. $aRes = json_decode($sRes, true);
  77. if (empty($aRes)) {
  78. $this->_lastError = '查询解析异常';
  79. payLogger(__CLASS__,'查询解析异常 data='.$sRes,$data);
  80. return '';
  81. }
  82. if ($aRes['result_state'] != true || $aRes['msg'] != '支付成功') {
  83. $this->_lastError = '查询订单状态异常';
  84. payLogger(__CLASS__,'查询订单状态异常 data='.$sRes,$data);
  85. return '';
  86. }
  87. return true;
  88. }
  89. public function notify(&$orderSn, &$tradeNo, &$money, $partnerId)
  90. {
  91. $data = request()->all();
  92. if ($data['code'] != self::SUCESS_CODE) {
  93. payLogger(__CLASS__,'回调订单状态失败',$data);
  94. return false;
  95. }
  96. $sign = strtoupper(md5("code={$data['code']}&key={$this->publicKey}&money={$data['money']}&orderDate={$data['orderDate']}&OrderId={$data['OrderId']}&OrderNumber={$data['OrderNumber']}"));
  97. if ($sign != $data['sign']) {
  98. $this->_lastError = '验证失败!';
  99. payLogger(__CLASS__, '验证失败 $sign=' . $sign, $data);
  100. return false;
  101. }
  102. $money = $data['money'];
  103. $res = $this->queryOrder($data, $data['OrderId'], $money, $partnerId);
  104. if (empty($res)) {
  105. return '';
  106. }
  107. $orderSn = $data['OrderId'];
  108. $tradeNo = $data['OrderNumber'];
  109. return true;
  110. }
  111. public function stopNotify()
  112. {
  113. return 'success';
  114. }
  115. }