RefillPhone.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <?php
  2. namespace refill\tongka;
  3. require_once(BASE_HELPER_RAPI_PATH . '/tongka/config.php');
  4. use refill;
  5. use Log;
  6. class RefillPhone extends refill\IRefillThird
  7. {
  8. public function __construct($cfgs)
  9. {
  10. parent::__construct($cfgs);
  11. }
  12. private function getProductCode($goods_id, $sys_pcode)
  13. {
  14. $thrid_refill = Model('thrid_refill');
  15. $product = $thrid_refill->getProviderProduct($this->mStoreID,$goods_id,$sys_pcode);
  16. if (empty($product)) {
  17. return false;
  18. } else {
  19. return $product['channel_code'];
  20. }
  21. }
  22. private function req_params($card_no, string $order_sn, $product_code)
  23. {
  24. $params['third_order_sn'] = $order_sn;
  25. $params['goods_id'] = $product_code;
  26. $params['account'] = $card_no;
  27. $params['call_back'] = config::NOTIFY_URL;
  28. $params['timestamp'] = time();
  29. $params['nonce_str'] = strtoupper($this->createNoncestr());
  30. return $params;
  31. }
  32. public function add($card_no, $card_type, $amount, $params, &$net_errno = 0)
  33. {
  34. $order_sn = $params['order_sn'];
  35. $goods_id = intval($params['goods_id']);
  36. $product_code = $this->getProductCode($goods_id, $params['product_code']);
  37. Model('thrid_refill')->edit_third($params['order_id'], ['chcode' => $product_code]);
  38. $params = $this->req_params($card_no, $order_sn, $product_code);
  39. if(empty($params['goods_id'])) {
  40. return [false, '商品编号错误', false];
  41. }
  42. [$state, $platform_token] = config::getToken();
  43. if($state === false)
  44. {
  45. return [false, '获取token失败'];
  46. }
  47. $header = [
  48. "Authorization:bearer {$platform_token}",
  49. 'Content-Type:application/json;charset=utf-8'
  50. ];
  51. $params['sign'] = config::sign($params);
  52. $params = json_encode($params);
  53. $resp = http_post_data(config::ORDER_URL, $params, $header, $net_errno);
  54. if (empty($resp)) {
  55. return [false, '网络错误', true];
  56. }
  57. else
  58. {
  59. Log::record($resp, Log::DEBUG);
  60. $resp = json_decode($resp, true);
  61. if (empty($resp)) {
  62. return [false, '网络错误', true];
  63. } elseif ($resp['code'] === 0) {
  64. return [true, $resp['data']['order_sn'], false];
  65. } else {
  66. return [false, $resp['msg'], false];
  67. }
  68. }
  69. }
  70. public function query($refill_info)
  71. {
  72. $params['third_order_sn'] = $refill_info['order_sn'];
  73. $params['timestamp'] = time();
  74. $params['nonce_str'] = strtoupper($this->createNoncestr());
  75. $params['sign'] = config::sign($params);
  76. [$state, $platform_token] = config::getToken();
  77. if($state === false)
  78. {
  79. return [false, '获取token失败'];
  80. }
  81. $header = [
  82. "Authorization:bearer {$platform_token}",
  83. 'Content-Type:application/json;charset=utf-8'
  84. ];
  85. $params = json_encode($params);
  86. $resp = http_post_data(config::QUERY_URL, $params, $header);
  87. if (empty($resp)) {
  88. return [false, '网络错误'];
  89. }
  90. else
  91. {
  92. Log::record($resp, Log::DEBUG);
  93. $resp = json_decode($resp, true);
  94. if (empty($resp)) {
  95. return [false, '网络错误'];
  96. }
  97. elseif ($resp['code'] === 0)
  98. {
  99. $status = $resp['data']['status'];
  100. if ($status === 5) {
  101. $order_state = ORDER_STATE_SUCCESS;
  102. } elseif ($status === 6) {
  103. $order_state = ORDER_STATE_CANCEL;
  104. } elseif (in_array($status, [0, 1, 2, 3, 4, 7, 8], true)) {
  105. $order_state = ORDER_STATE_SEND;
  106. } else {
  107. return [false, $resp['msg']];
  108. }
  109. return [true, $order_state];
  110. }
  111. else
  112. {
  113. return [false, $resp['msg']];
  114. }
  115. }
  116. }
  117. public function balance()
  118. {
  119. $params['timestamp'] = time();
  120. $params['nonce_str'] = strtoupper($this->createNoncestr());
  121. $params['sign'] = config::sign($params);
  122. [$state, $platform_token] = config::getToken();
  123. if($state === false)
  124. {
  125. return [false, '获取token失败'];
  126. }
  127. $header = [
  128. "Authorization:bearer {$platform_token}",
  129. 'Content-Type:application/json;charset=utf-8'
  130. ];
  131. $params = json_encode($params);
  132. $resp = http_post_data(config::BALANCE_URL, $params, $header);
  133. if (empty($resp)) {
  134. return [false, '网络错误'];
  135. }
  136. else
  137. {
  138. Log::record($resp, Log::DEBUG);
  139. $resp = json_decode($resp, true);
  140. if (empty($resp)) {
  141. return [false, '网络错误'];
  142. } elseif ($resp['code'] === 0) {
  143. return [true, $resp['data']['balance']];
  144. } else {
  145. return [false, $resp['msg']];
  146. }
  147. }
  148. }
  149. /**
  150. * 作用:产生随机字符串,不长于32位
  151. */
  152. public function createNoncestr( $length = 32 )
  153. {
  154. $chars = "abcdefghijklmnopqrstuvwxyz0123456789";
  155. $str ="";
  156. for ( $i = 0; $i < $length; $i++ ) {
  157. $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);
  158. }
  159. return $str;
  160. }
  161. }