RefillPhone.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. namespace refill\jinglan;
  3. require_once(BASE_HELPER_RAPI_PATH . '/jinglan/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, int $amount, int $card_type, string $order_sn)
  13. {
  14. $params['action'] = 'placeOrder';
  15. $params['requestTime'] = date("Y-m-d H:i:s");
  16. $params['merAccount'] = config::ACCOUNT;
  17. $params['businessType'] = 12;
  18. $params['merOrderNo'] = $order_sn;
  19. $params['rechargeAccount'] = $phone;
  20. $params['rechargeValue'] = $amount;
  21. $params['notifyUrl'] = config::NOTIFY_URL;
  22. $params['ispId'] = config::operator[$card_type];
  23. return $params;
  24. }
  25. public function add($card_no, $card_type, $amount, $params,&$net_errno = 0)
  26. {
  27. $order_sn = $params['order_sn'];
  28. $params = $this->req_params($card_no, $amount, $card_type, $order_sn);
  29. $params['sign'] = $this->sign($params);
  30. $resp = http_request(config::API_URL, $params, 'POST', false, config::ExtHeaders, $net_errno);
  31. if (empty($resp)) {
  32. return [false, '系统错误', true];
  33. }
  34. else
  35. {
  36. Log::record($resp, Log::DEBUG);
  37. $resp = json_decode($resp, true);
  38. if (empty($resp)) {
  39. return [false, '网络错误', true];
  40. } elseif ($resp['resultCode'] === '0') {
  41. return [true, $resp['data']['orderNo'], false];
  42. } elseif (in_array($resp['resultCode'], config::ERRCODES, true)) {
  43. return [false, $resp['resultMsg'], false];
  44. } elseif (in_array($resp['resultCode'], ['12', '13', '14', '15', '999'], true)) {
  45. $net_errno = "HTTP-{$resp['resultCode']}";
  46. return [false, $resp['resultMsg'], true];
  47. } else {
  48. $net_errno = "HTTP-998";
  49. return [false, $resp['resultMsg'], true];
  50. }
  51. }
  52. }
  53. public function query($refill_info)
  54. {
  55. $params_getter = function ($order_sn) {
  56. $params = [];
  57. $params['action'] = 'queryOrder';
  58. $params['requestTime'] = date("Y-m-d H:i:s");
  59. $params['merAccount'] = config::ACCOUNT;
  60. $params['merOrderNo'] = $order_sn;
  61. return $params;
  62. };
  63. $params = $params_getter($refill_info['order_sn']);
  64. $params['sign'] = $this->sign($params);
  65. $resp = http_request(config::API_URL, $params, 'POST', false, config::ExtHeaders, $net_errno);
  66. if (empty($resp)) {
  67. return [false, '系统错误'];
  68. }
  69. else
  70. {
  71. Log::record($resp, Log::DEBUG);
  72. $resp = json_decode($resp, true);
  73. if (empty($resp)) {
  74. return [false, '系统错误'];
  75. } elseif ($resp['resultCode'] === '0') {
  76. if ((time() - $refill_info['commit_time'] < 60)) {
  77. return [false, '下单一分钟后查询'];
  78. }
  79. $status = $resp['data']['orderState'];
  80. if ($status === 24) {
  81. $order_state = ORDER_STATE_SUCCESS;
  82. } elseif (in_array($status, [23, -1], true)) {
  83. $order_state = ORDER_STATE_CANCEL;
  84. } elseif (in_array($status, [0, 20], true)) {
  85. $order_state = ORDER_STATE_SEND;
  86. } else {
  87. return [false, $status];
  88. }
  89. return [true, $order_state];
  90. } elseif ($resp['resultCode'] === '12' && (time() - $refill_info['commit_time'] > 600)) {
  91. return [true, ORDER_STATE_NOEXIST];
  92. } else {
  93. return [false, $resp['resultMsg']];
  94. }
  95. }
  96. }
  97. public function balance()
  98. {
  99. $params_getter = function () {
  100. $params = [];
  101. $params['action'] = 'queryBalance';
  102. $params['requestTime'] = date("Y-m-d H:i:s");
  103. $params['merAccount'] = config::ACCOUNT;
  104. return $params;
  105. };
  106. $params = $params_getter();
  107. $params['sign'] = $this->sign($params);
  108. $resp = http_request(config::API_URL, $params, 'POST', false, config::ExtHeaders, $net_errno);
  109. if (empty($resp)) {
  110. return [false, '系统错误'];
  111. }
  112. else
  113. {
  114. Log::record($resp, Log::DEBUG);
  115. $resp = json_decode($resp, true);
  116. if (empty($resp)) {
  117. return [false, '系统错误'];
  118. } elseif ($resp['resultCode'] === '0') {
  119. return [true, $resp['data']['balance'] / 1000];
  120. } else {
  121. return [false, $resp['resultMsg']];
  122. }
  123. }
  124. }
  125. private function sign($params)
  126. {
  127. ksort($params);
  128. $content = '';
  129. foreach ($params as $key => $value) {
  130. $content .= "{$key}={$value}&";
  131. }
  132. $content .= "key=" . config::KEY;
  133. return md5($content);
  134. }
  135. }