base.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. class lzbaseControl
  3. {
  4. private $mMchid;
  5. private $mAdminid;
  6. private $mUseKey;
  7. protected $merchant_available;
  8. protected $member_available;
  9. public function __construct()
  10. {
  11. $mchid = $_POST['usr'];
  12. $mchinfo = Model('merchant')->getMerchantInfo(['mchid' => $mchid]);
  13. if(empty($mchinfo)) {
  14. throw new LzException(self::text_content(-5,0));
  15. }
  16. else {
  17. $this->mAdminid = intval($mchinfo['admin_id']);
  18. }
  19. $mchinfo = Model('merchant')->getMerchantInfo(['mchid' => $mchid]);
  20. $mod_member = Model('member');
  21. $minfo = $mod_member->getMemberInfo(['member_id' => $this->mAdminid], '*', true);
  22. $this->merchant_available = ncPriceFormat($minfo['available_predeposit'] - $mchinfo['credit_bonus']);
  23. $this->member_available = $minfo['available_predeposit'];
  24. if ($mchinfo['merchant_state'] != 1) {
  25. throw new LzException(self::text_content(-7,$this->merchant_available));
  26. }
  27. $ips = unserialize($mchinfo['ip_white_list']);
  28. if(!empty($ips)) {
  29. $addr = $_SERVER['REMOTE_ADDR'];
  30. Log::record("request ip:{$addr}",Log::DEBUG);
  31. if(!in_array($addr,$ips)) {
  32. throw new LzException(self::text_content(-12,$this->merchant_available));
  33. }
  34. }
  35. $this->mUseKey = intval($mchinfo['use_key']);
  36. if($this->mUseKey && !$this->verify_md5($mchinfo['secure_key'])) {
  37. throw new LzException(self::text_content(-4,$this->merchant_available));
  38. }
  39. $this->mMchid = intval($mchid);
  40. }
  41. public function mchid() : int
  42. {
  43. return $this->mMchid;
  44. }
  45. public function adminid() : int {
  46. return $this->mAdminid;
  47. }
  48. private function verify_md5($key)
  49. {
  50. $input = $_GET;
  51. $sign = $input['sgn'];
  52. $body = $this->sign_body($input);
  53. if($this->mUseKey) {
  54. $body .= $key;
  55. }
  56. return ($sign == strtoupper(md5($body)));
  57. }
  58. private function sign_body($params)
  59. {
  60. $op = $params['op'];
  61. if($op == 'add_mob') {
  62. $content = $params['usr'] . $params['ord'] . $params['mob'] . $params['amt'] . $params['tim'];
  63. }
  64. elseif($op == 'balance') {
  65. $content = $params['usr'];
  66. }
  67. elseif($op == 'query') {
  68. $content = $params['usr'] . $params['ord'];
  69. }
  70. elseif($op == 'add_third') {
  71. $content = $params['usr'] . $params['ord'] . $params['mob'] . $params['product_code'] . $params['tim'];
  72. }
  73. else {
  74. $content = 'error';
  75. }
  76. return $content;
  77. }
  78. public static function msg($code)
  79. {
  80. static $msgs = [0 => '订单提交成功',
  81. 2 => '运营商充值账户余额不足',
  82. 4 => '账户余额不足',
  83. 6 => '暂不支持此商品',
  84. 7 => '连接该运营商设备失败',
  85. 8 => '在规定时间内不得重复提交同一号码',
  86. 10 => '该帐号不能在此计算机缴费',
  87. 11 => '流水号重复',
  88. 30 => '面值不符',
  89. 41 => '该地区维护',
  90. 42 => '运营商设备忙',
  91. 43 => '暂不支持该面额的缴费',
  92. 44 => '无该地区缴费权限',
  93. -2 => '命令已发送,请查看交易流水是否有缴费成功(这种情况是服务器在排队等待处理,间隔10-20分钟后查单核实)',
  94. -3 => '数据添加失败',
  95. -4 => '签名错误',
  96. -5 => '没有此代理商',
  97. -6 => '提交失败',
  98. -7 => '无此接口权限',
  99. -8 => '提交日期不是当天日期',
  100. -9 => '参数不对',
  101. -11 => '手机号码位数不符',
  102. -12 => '绑定IP不符',
  103. 1001 => '销售数量请大于0',
  104. 1002 => '该商品库存维护',
  105. 1003 => '该供货商品库存维护'];
  106. if(array_key_exists($code,$msgs)) {
  107. return $msgs[$code];
  108. }
  109. else {
  110. return '';
  111. }
  112. }
  113. public static function text_content($code,$available)
  114. {
  115. $msg = self::msg($code);
  116. $available = ncPriceFormat($available);
  117. $content = "{$code}|{$msg}|{$available}";
  118. return $content;
  119. }
  120. public static function outsuccess($available)
  121. {
  122. echo self::text_content(0,$available);
  123. return true;
  124. }
  125. public static function outerr($code,$available)
  126. {
  127. echo self::text_content($code,$available);
  128. return true;
  129. }
  130. }