RefillPhone.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. namespace refill\yuanmai;
  3. require_once(BASE_HELPER_RAPI_PATH . '/yuanmai/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 $card_type, int $amount, string $order_sn)
  13. {
  14. $params['ispid'] = config::operator[$card_type];
  15. $params['amount'] = $amount;
  16. $params['dealerid'] = config::USER_ID;
  17. $params['orderid'] = $order_sn;
  18. $params['photonum'] = $phone;
  19. $params['backurl'] = config::NOTIFY_URL;
  20. $params['ordertime'] = date("YmdHis");
  21. return $params;
  22. }
  23. public function add($card_no, $card_type, $amount, $params,&$net_errno = 0)
  24. {
  25. refill\util::send_quick($params['order_sn']);
  26. return [true , '',false];
  27. }
  28. public function query($refill_info)
  29. {
  30. $params['dealerid'] = config::USER_ID;
  31. $params['orderid'] = $refill_info['order_sn'];
  32. $content = "dealerid={$params['dealerid']}&orderid={$params['orderid']}&dealerkey=".config::KEY;
  33. $params['sign'] = md5($content);
  34. $resp = https_request(config::QUERY_URL, $params, 'POST');
  35. if (empty($resp)) {
  36. return [false, '网络错误'];
  37. }
  38. else
  39. {
  40. Log::record($resp, Log::DEBUG);
  41. $resp = $this->xmlToArray($resp);
  42. if (empty($resp)) {
  43. return [false, '网络错误'];
  44. }
  45. $resultno = intval($resp['resultno']);
  46. if (in_array($resultno, [2,3])) {
  47. $order_state = ORDER_STATE_SUCCESS;
  48. $updata['official_sn'] = $resp['spsno'];
  49. Model('refill_order')->edit($refill_info['order_id'], $updata);
  50. } elseif ($resultno === 4) {
  51. $order_state = ORDER_STATE_CANCEL;
  52. } elseif ($resultno === 1) {
  53. $order_state = ORDER_STATE_SEND;
  54. } else {
  55. return [false, $resultno];
  56. }
  57. return [true, $order_state];
  58. }
  59. }
  60. public function balance()
  61. {
  62. return [false, '暂无余额接口'];
  63. }
  64. private function sign($params)
  65. {
  66. $userid = config::USER_ID;
  67. $key = config::KEY;
  68. $content = "ispid={$params['ispid']}&amount={$params['amount']}&dealerid={$userid}&orderid={$params['orderid']}&photonum={$params['photonum']}&";
  69. $content .= "ordertime={$params['ordertime']}&mark=&dealerkey={$key}";
  70. return md5($content);
  71. }
  72. public function xmlToArray($xml)
  73. {
  74. $replace_str = str_replace(' ','','encoding="GB2312"');
  75. $xml = str_replace($replace_str, "encoding='utf-8'", $xml);
  76. //禁止引用外部xml实体
  77. libxml_disable_entity_loader(true);
  78. $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
  79. $val = json_decode(json_encode($xmlstring), true);
  80. $result = [];
  81. $data = $val['items']['item'];
  82. foreach ($data as $attr) {
  83. $key = $attr['@attributes']['name'];
  84. $value = $attr['@attributes']['value'];
  85. $result[$key] = $value;
  86. }
  87. return $result;
  88. }
  89. }