JuPayment.php 4.7 KB

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