lzbase.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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. else {
  71. $content = 'error';
  72. }
  73. return $content;
  74. }
  75. public static function msg($code)
  76. {
  77. static $msgs = [0 => '订单提交成功',
  78. 2 => '运营商充值账户余额不足',
  79. 4 => '账户余额不足',
  80. 6 => '暂不支持此商品',
  81. 7 => '连接该运营商设备失败',
  82. 8 => '在规定时间内不得重复提交同一号码',
  83. 10 => '该帐号不能在此计算机缴费',
  84. 11 => '流水号重复',
  85. 30 => '面值不符',
  86. 41 => '该地区维护',
  87. 42 => '运营商设备忙',
  88. 43 => '暂不支持该面额的缴费',
  89. 44 => '无该地区缴费权限',
  90. -2 => '命令已发送,请查看交易流水是否有缴费成功(这种情况是服务器在排队等待处理,间隔10-20分钟后查单核实)',
  91. -3 => '数据添加失败',
  92. -4 => '签名错误',
  93. -5 => '没有此代理商',
  94. -6 => '提交失败',
  95. -7 => '无此接口权限',
  96. -8 => '提交日期不是当天日期',
  97. -9 => '参数不对',
  98. -11 => '手机号码位数不符',
  99. -12 => '绑定IP不符',
  100. 1001 => '销售数量请大于0',
  101. 1002 => '该商品库存维护',
  102. 1003 => '该供货商品库存维护'];
  103. if(array_key_exists($code,$msgs)) {
  104. return $msgs[$code];
  105. }
  106. else {
  107. return '';
  108. }
  109. }
  110. public static function text_content($code,$available)
  111. {
  112. $msg = self::msg($code);
  113. $available = ncPriceFormat($available);
  114. $content = "0|{$msg}|{$available}";
  115. return $content;
  116. }
  117. public static function outsuccess($available)
  118. {
  119. echo self::text_content(0,$available);
  120. return true;
  121. }
  122. public static function outerr($code,$available)
  123. {
  124. echo self::text_content($code,$available);
  125. return true;
  126. }
  127. }