RefillPhone.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. namespace refill\xuyou_hf;
  3. require_once(BASE_HELPER_RAPI_PATH . '/xuyou_hf/config.php');
  4. use refill;
  5. use Log;
  6. class RefillPhone extends refill\IRefillPhone
  7. {
  8. public function __construct($cfgs)
  9. {
  10. parent::__construct($cfgs);
  11. }
  12. private function req_params(int $phone, string $order_sn, string $productid) : array
  13. {
  14. $params['mchid'] = config::MCH_ID;
  15. $params['orderid'] = $order_sn;
  16. $params['number'] = $phone;
  17. $params['productid'] = $productid;
  18. $params['timestamp'] = $this->getMillisecond();
  19. return $params;
  20. }
  21. public function add($card_no, $card_type, $amount, $params,&$net_errno = 0) : array
  22. {
  23. $params = $this->req_params($card_no, $params['orderid'], $params['productid']);
  24. $sign = $this->sign($params);
  25. $params['backurl'] = config::NOTIFY_URL;
  26. $params['sign'] = $sign;
  27. $params = json_encode($params);
  28. $resp = http_post_data(config::ORDER_URL, $params , config::ExtHeaders);
  29. if (empty($resp)) {
  30. return [false, '系统错误', true];
  31. }
  32. else
  33. {
  34. Log::record($resp, Log::DEBUG);
  35. $resp = json_decode($resp ,true);
  36. if (empty($resp)) {
  37. return [false, '系统错误', true];
  38. } elseif ($resp['status'] === 0) {
  39. return [true, $resp['oid'], false];
  40. }elseif ($resp['status'] === -1){
  41. return [false, $resp['msg'], false];
  42. } else {
  43. return [false, $resp['msg'], false];
  44. }
  45. }
  46. }
  47. public function query($refill_info) : array
  48. {
  49. $params['mchid'] = config::MCH_ID;
  50. $params['orderid'] = $refill_info['orderid'];
  51. $params['sign'] = $this->sign($params);
  52. $params = json_encode($params);
  53. $resp = http_post_data(config::QUERY_URL, $params , config::ExtHeaders);
  54. if (empty($resp)) {
  55. return [false, '系统错误'];
  56. }
  57. else
  58. {
  59. Log::record($resp, Log::DEBUG);
  60. $resp = json_decode($resp, true);
  61. if (empty($resp)) {
  62. return [false, '系统错误'];
  63. }
  64. elseif ($resp['status'] === 2)
  65. {
  66. $save['official_sn'] = strtolower($resp['orderid']) == 'null' ? '' : $resp['orderid'];
  67. Model('refill_order')->edit($refill_info['order_id'], $save);
  68. $order_state = ORDER_STATE_SUCCESS;
  69. return [true, $order_state];
  70. }
  71. elseif ($resp['status'] === -1){
  72. return [false, $resp['msg']];
  73. }
  74. elseif ($resp['status'] === 1){
  75. return [false, $resp['msg']];
  76. }
  77. elseif ($resp['status'] === 3){
  78. return [false, $resp['msg']];
  79. }
  80. elseif ($resp['status'] === 4 && (time() - $refill_info['commit_time'] >= 600))
  81. {
  82. return [true, ORDER_STATE_NOEXIST];
  83. }
  84. else
  85. {
  86. return [false, $resp['message']];
  87. }
  88. }
  89. }
  90. public function balance() : array
  91. {
  92. $params['mchid'] = (string)config::MCH_ID;
  93. $params['sign'] = $this->sign($params);
  94. $params = json_encode($params);
  95. $resp = http_post_data(config::BALANCE_URL, $params , config::ExtHeaders);
  96. if (empty($resp)) {
  97. return [false, '系统错误'];
  98. }
  99. else
  100. {
  101. Log::record($resp, Log::DEBUG);
  102. $resp = json_decode($resp, true);
  103. if (empty($resp)) {
  104. return [false, '系统错误'];
  105. } elseif ($resp['status'] === 1) {
  106. return [true, $resp['balance']];
  107. }elseif ($resp['status'] === -1){
  108. return [false, $resp['msg']];
  109. } else {
  110. return [false, $resp['msg']];
  111. }
  112. }
  113. }
  114. private function sign($params) : string
  115. {
  116. $body = "";
  117. $i = 0;
  118. foreach ($params as $k => $v) {
  119. if (false === $this->check_empty($v) && "@" != substr($v, 0, 1)) {
  120. if ($i == 0) {
  121. $body .= "{$k}" . "=" . urlencode($v);
  122. } else {
  123. $body .= "&" . "{$k}" . "=" . urlencode($v);
  124. }
  125. $i++;
  126. }
  127. }
  128. $body .= "&key=".config::KEY;
  129. return md5($body);
  130. }
  131. /**
  132. * 获取毫秒级别的时间戳
  133. */
  134. private function getMillisecond() : int
  135. {
  136. $cur = microtime (true);
  137. return intval($cur * 1000);
  138. }
  139. }