RefillOil.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. namespace refill\yingdian;
  3. require_once(BASE_HELPER_RAPI_PATH . '/yingdian/config.php');
  4. use refill;
  5. use Log;
  6. class RefillOil extends refill\IRefillOil
  7. {
  8. public function __construct($cfgs)
  9. {
  10. parent::__construct($cfgs);
  11. }
  12. private function req_params(int $card_no, int $amount, int $card_type, string $order_sn)
  13. {
  14. $params['orderNo'] = $order_sn;
  15. $params['cardNumber'] = $card_no;
  16. $params['amount'] = $amount;
  17. $params['operator'] = config::operator[$card_type];
  18. $params['timestamp'] = $this->getMillisecond();
  19. $card_info = refill\util::read_card($card_no,$card_type);
  20. $params['cardPhone'] = $card_info['bind_phone'];
  21. return [$params, $card_info];
  22. }
  23. public function add($card_no, $card_type, $amount, $params,&$net_errno = 0)
  24. {
  25. refill\util::send_test($params['order_sn']);
  26. return [true , '',false];
  27. }
  28. public function query($refill_info)
  29. {
  30. $params['orderNo'] = $refill_info['order_sn'];
  31. $params['timestamp'] = $this->getMillisecond();
  32. $content = "orderNo={$params['orderNo']}" . config::APP_SECRET . $params['timestamp'];
  33. $params['sign'] = md5($content);
  34. $app_key = config::APP_KEY;
  35. $header = [
  36. "App-Channel: {$app_key}"
  37. ];
  38. $resp = http_request(config::QUERY_URL, $params, 'GET', false, $header);
  39. if (empty($resp)) {
  40. return [false, '系统错误'];
  41. }
  42. else
  43. {
  44. Log::record($resp, Log::DEBUG);
  45. $resp = json_decode($resp, true);
  46. if (empty($resp)) {
  47. return [false, '系统错误'];
  48. }
  49. elseif ($resp['code'] == 0)
  50. {
  51. $status = $resp['data']['status'];
  52. if ($status == 'SUCCESS') {
  53. //流水号格式为json,实例:["2421071918070053"]
  54. $official_sn = json_decode($resp['data']['vouchers'], true);
  55. $updata['official_sn'] = $official_sn[0];
  56. Model('refill_order')->edit($refill_info['order_id'], $updata);
  57. $order_state = ORDER_STATE_SUCCESS;
  58. } elseif (in_array($status, ['SUBMIT_FAIL', 'FAIL'])) {
  59. $order_state = ORDER_STATE_CANCEL;
  60. } elseif (in_array($status, ['CREATED', 'SUBMIT', 'CB_WAITING'])) {
  61. $order_state = ORDER_STATE_SEND;
  62. } else {
  63. return [false, $status];
  64. }
  65. return [true, $order_state];
  66. }
  67. else {
  68. return [false, $resp['msg']];
  69. }
  70. }
  71. }
  72. public function balance()
  73. {
  74. return [false, '暂无余额接口'];
  75. }
  76. private function sign($params)
  77. {
  78. $timestamp = $params['timestamp'];
  79. unset($params['timestamp']);
  80. $content = '';
  81. ksort($params);
  82. foreach ($params as $key => $val){
  83. if(false === $this->check_empty($val)) {
  84. $content .= "{$key}={$val}&";
  85. }
  86. }
  87. $content = rtrim($content,'&');
  88. $content .= config::APP_SECRET;
  89. $content .= $timestamp;
  90. Log::record($content, Log::DEBUG);
  91. return md5($content);
  92. }
  93. /**
  94. * 获取毫秒级别的时间戳
  95. */
  96. private function getMillisecond()
  97. {
  98. $cur = microtime (true);
  99. $cur = intval($cur * 1000);
  100. return $cur;
  101. }
  102. }