xiaoyu 3 年之前
父節點
當前提交
8048b31533
共有 100 個文件被更改,包括 2720 次插入8681 次删除
  1. 9 3
      .gitignore
  2. 33 0
      .gitmodules
  3. 12 3
      admin/control/refill_evidence.php
  4. 1 0
      admin/control/task.php
  5. 4 4
      admin/templates/default/css/recharge.css
  6. 5 4
      admin/templates/default/merchant.refill.evidence_list.php
  7. 226 185
      admin/templates/default/provider.amount.control.php
  8. 1 0
      admin/templates/default/recharge.manual.edit.php
  9. 23 8
      admin/templates/default/refill.evidence.edit.php
  10. 5 0
      composer.json
  11. 667 0
      composer.lock
  12. 二進制
      composer.phar
  13. 9 0
      core/framework/libraries/log.php
  14. 110 88
      data/config/xyz/refill.ini.php
  15. 125 103
      data/config/yl/refill.ini.php
  16. 13 4
      docker/compose/xyz/cli/docker-compose.yml
  17. 3 0
      docker/compose/xyz/conf/php/vender-init
  18. 0 1
      h5py
  19. 4 0
      helper/bank/bcm.php
  20. 4 0
      helper/bank/ccb.php
  21. 4 0
      helper/bank/ccbb.php
  22. 5 1
      helper/bank/cmbc.php
  23. 122 0
      helper/bank/cmbc16.php
  24. 135 0
      helper/bank/cmbc28.php
  25. 5 1
      helper/bank/cmbcex.php
  26. 3 1
      helper/bank/converter.php
  27. 26 25
      helper/bank/execl_loader.php
  28. 二進制
      helper/refill/api/xyz/dongyefs/20220417黑龙江移动调价函.png
  29. 1 1
      helper/refill/api/xyz/dongyefs/config.php
  30. 二進制
      helper/refill/api/xyz/guochuang/20220412青海黑龙江移动调价函.png
  31. 二進制
      helper/refill/api/xyz/guochuang/20220413广东移动调价函.png
  32. 二進制
      helper/refill/api/xyz/guochuang/20220415青海黑龙江广东移动调价函.jpg
  33. 二進制
      helper/refill/api/xyz/guochuang/20220416江西联通调价函.png
  34. 二進制
      helper/refill/api/xyz/guochuang/20220417黑龙江移动调价函.png
  35. 4 4
      helper/refill/api/xyz/guochuang/config.php
  36. 1 0
      helper/refill/api/xyz/huoshenguoman/config.php
  37. 4 1
      helper/refill/api/xyz/huoshenguoman/开户信息.txt
  38. 二進制
      helper/refill/api/xyz/kuaikuaifs/20220413青海移动调价函.png
  39. 二進制
      helper/refill/api/xyz/kuaikuaifs/20220418黑龙江移动调价函.png
  40. 二進制
      helper/refill/api/xyz/kuaikuaifs/20220418黑龙江移动调价函(17点).png
  41. 7 2
      helper/refill/api/xyz/kuaikuaifs/config.php
  42. 11 1
      helper/refill/api/xyz/pengxinda/API信息.txt
  43. 6 0
      helper/refill/api/xyz/pengxinda/config.php
  44. 34 17
      helper/refill/api/xyz/yunchonggongman/RefillCallBack.php
  45. 70 55
      helper/refill/api/xyz/yunchonggongman/RefillPhone.php
  46. 0 11
      helper/refill/api/xyz/yunchonggongman/api.txt
  47. 20 14
      helper/refill/api/xyz/yunchonggongman/config.php
  48. 27 0
      helper/refill/api/xyz/yunchonggongman/开户信息.txt
  49. 15 15
      helper/refill/api/xyz/zhongst/config.php
  50. 33 29
      helper/refill/api/xyz/zhongst/开户信息.txt
  51. 34 17
      helper/refill/api/xyz/zhongst_mix/RefillCallBack.php
  52. 69 55
      helper/refill/api/xyz/zhongst_mix/RefillPhone.php
  53. 25 9
      helper/refill/api/xyz/zhongst_mix/api.txt
  54. 26 14
      helper/refill/api/xyz/zhongst_mix/config.php
  55. 2 2
      helper/refill/api/yl/baixuannew_high/config.php
  56. 6 4
      helper/refill/api/yl/baixuannew_high/对接文档-yezi.txt
  57. 2 2
      helper/refill/api/yl/baixuannew_normal/config.php
  58. 3 3
      helper/refill/api/yl/baixuannew_normal/对接文档-yezi.txt
  59. 1 1
      helper/refill/api/yl/dongyefs/config.php
  60. 4 4
      helper/refill/api/yl/guochuang/config.php
  61. 1 0
      helper/refill/api/yl/huoshenguoman/config.php
  62. 48 0
      helper/refill/api/yl/kailinyu/RefillCallBack.php
  63. 155 0
      helper/refill/api/yl/kailinyu/RefillPhone.php
  64. 55 0
      helper/refill/api/yl/kailinyu/config.php
  65. 35 0
      helper/refill/api/yl/kailinyu/对接文档-yezi.txt
  66. 2 2
      helper/refill/api/yl/lingzhman/config.php
  67. 3 5
      helper/refill/api/yl/lingzhman/椰子慢充.txt
  68. 14 4
      helper/refill/api/yl/pengxinda/API信息.txt
  69. 8 2
      helper/refill/api/yl/pengxinda/config.php
  70. 34 17
      helper/refill/api/yl/yunchonggongman/RefillCallBack.php
  71. 70 55
      helper/refill/api/yl/yunchonggongman/RefillPhone.php
  72. 25 9
      helper/refill/api/yl/yunchonggongman/api.txt
  73. 20 14
      helper/refill/api/yl/yunchonggongman/config.php
  74. 15 15
      helper/refill/api/yl/zhongst/config.php
  75. 33 29
      helper/refill/api/yl/zhongst/开户信息.txt
  76. 34 17
      helper/refill/api/yl/zhongst_mix/RefillCallBack.php
  77. 69 55
      helper/refill/api/yl/zhongst_mix/RefillPhone.php
  78. 25 9
      helper/refill/api/yl/zhongst_mix/api.txt
  79. 26 14
      helper/refill/api/yl/zhongst_mix/config.php
  80. 16 4
      test/TestRefill.php
  81. 30 0
      test/TestRefillYl.php
  82. 19 13
      test/TestSpreadsheet.php
  83. 1 1
      vendor/autoload.php
  84. 7 7
      vendor/composer/autoload_real.php
  85. 4 4
      vendor/composer/autoload_static.php
  86. 10 10
      vendor/composer/installed.json
  87. 1 1
      vendor/ezyang/htmlpurifier
  88. 1 0
      vendor/phpoffice/phpspreadsheet
  89. 0 226
      vendor/phpoffice/phpspreadsheet/.php-cs-fixer.dist.php
  90. 0 22
      vendor/phpoffice/phpspreadsheet/.phpcs.xml.dist
  91. 0 958
      vendor/phpoffice/phpspreadsheet/CHANGELOG.md
  92. 0 20
      vendor/phpoffice/phpspreadsheet/CONTRIBUTING.md
  93. 0 21
      vendor/phpoffice/phpspreadsheet/LICENSE
  94. 0 30
      vendor/phpoffice/phpspreadsheet/README.md
  95. 0 110
      vendor/phpoffice/phpspreadsheet/composer.json
  96. 0 6182
      vendor/phpoffice/phpspreadsheet/phpstan-baseline.neon
  97. 0 51
      vendor/phpoffice/phpspreadsheet/phpstan-conditional.php
  98. 0 26
      vendor/phpoffice/phpspreadsheet/phpstan.neon.dist
  99. 0 56
      vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/ArrayEnabled.php
  100. 0 0
      vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/BinaryComparison.php

+ 9 - 3
.gitignore

@@ -67,7 +67,6 @@ fabric.properties
 db
 data/upload
 php_errors.log
-data/log/20170824.log
 /logs/
 /hfive/
 /data/log/
@@ -87,8 +86,15 @@ server/mac_start.sh
 /composer.json
 /composer.phar
 /composer.lock
-/vendor
 phpunit.xml
 /project
 /upfile.php
-/icp
+/icp
+/vendor/ezyang
+/vendor/maennchen
+/vendor/markbaker
+/vendor/myclabs
+/vendor/phpoffice
+/vendor/psr
+/vendor/symfony
+/favicon.ico

+ 33 - 0
.gitmodules

@@ -0,0 +1,33 @@
+[submodule "vendor/maennchen/zipstream-php"]
+  path = vendor/maennchen/zipstream-php
+  url = https://github.com/maennchen/ZipStream-PHP.git
+[submodule "vendor/markbaker/complex"]
+  path = vendor/markbaker/complex
+  url = https://github.com/MarkBaker/PHPComplex.git
+[submodule "vendor/markbaker/matrix"]
+  path = vendor/markbaker/matrix
+  url = https://github.com/MarkBaker/PHPMatrix.git
+[submodule "vendor/myclabs/php-enum"]
+  path = vendor/myclabs/php-enum
+  url = https://github.com/myclabs/php-enum.git
+[submodule "vendor/psr/http-client"]
+  path = vendor/psr/http-client
+  url = https://github.com/php-fig/http-client.git
+[submodule "vendor/psr/http-factory"]
+  path = vendor/psr/http-factory
+  url = https://github.com/php-fig/http-factory.git
+[submodule "vendor/psr/http-message"]
+  path = vendor/psr/http-message
+  url = https://github.com/php-fig/http-message.git
+[submodule "vendor/psr/simple-cache"]
+  path = vendor/psr/simple-cache
+  url = https://github.com/php-fig/simple-cache.git
+[submodule "vendor/ezyang/htmlpurifier"]
+  path = vendor/ezyang/htmlpurifier
+  url = https://github.com/ezyang/htmlpurifier.git
+[submodule "vendor/phpoffice/phpspreadsheet"]
+  path = vendor/phpoffice/phpspreadsheet
+  url = https://github.com/PHPOffice/PhpSpreadsheet.git
+[submodule "vendor/symfony/polyfill-mbstring"]
+  path = vendor/symfony/polyfill-mbstring
+  url = https://github.com/symfony/polyfill-mbstring.git

+ 12 - 3
admin/control/refill_evidence.php

@@ -109,7 +109,7 @@ class refill_evidenceControl extends SystemControl
     {
         $status_text = ['申请中', '已通过', '已驳回'];
         $operation_text = ['未预存', '已预存'];
-        $add_type_text = ['商户预存','后台手动预存','后台手动调款','余额找平'];
+        $add_type_text = ['商户预存', '后台手动预存', '后台手动调款', '余额找平', '平台转款'];
         $is_bank_text = ['否','是'];
 
         $merchants = [];
@@ -154,8 +154,17 @@ class refill_evidenceControl extends SystemControl
         $model_merchant = Model('merchant');
         if(chksubmit())
         {
-            $bz = $_POST['bz'];
-            $resp = $model_merchant->editRefillEvidence(['apply_id' => $apply_id], ['bz' => $bz]);
+            $data = [];
+            if(!empty($_POST['bz'])) {
+                $data['bz'] = $_POST['bz'];
+            }
+            if(!empty($_POST['add_type'])) {
+                $data['add_type'] = $_POST['add_type'];
+            }
+            if (empty($data)) {
+                showMessage('编辑成功', 'index.php?act=refill_evidence&op=index');
+            }
+            $resp = $model_merchant->editRefillEvidence(['apply_id' => $apply_id], $data);
             if ($resp) {
                 showMessage('编辑成功', 'index.php?act=refill_evidence&op=index');
             } else {

+ 1 - 0
admin/control/task.php

@@ -50,6 +50,7 @@ class taskControl extends SystemControl
         $model = Model('task');
         $resp = $model->Del($task_id);
         if($resp) {
+            $this->log("手动删除任务,任务id:{$task_id}");
             showMessage('删除成功', 'index.php?act=task&op=index');
         }else{
             showMessage('任务删除失败');

+ 4 - 4
admin/templates/default/css/recharge.css

@@ -61,7 +61,7 @@
 
 
 /* 提示 */
-.tip_info{border-top: 0 !important;color: #e60d0d;font-size:13px;}
+.tip_info{border-top: 0 !important;color: #e60d0d;font-size:13px;line-height: 3;}
 
 /* 表格 */
 .tableFixed {
@@ -69,10 +69,10 @@
   top: 54px;
   background-color: #fff;
 }
-.tableContent {
+/* .tableContent {
   display: block;
   padding-top: 142px;
-}
+} */
 .tbStatus {
   position: fixed;
   top:177px;
@@ -86,7 +86,7 @@
 .provider_amount_control .tb-type2 th.td { padding-right: 0;border-bottom: 1px dotted #CBE9F3;}
 .provider_amount_control .fixed-bar { margin-left:0px;padding-left:20px;}
 .provider_amount_control #tableHread { position: fixed;top:137px;left:20px;background-color: #fff;z-index:999;width: 96.5%;}
-.provider_amount_control .tableContent { display: block;padding-top: 79px;padding-right: 54px;}
+/* .provider_amount_control .tableContent { display: block;padding-top: 79px;padding-right: 54px;} */
 .provider_amount_control #tableHread th,
 .provider_amount_control #tableHread td{ background-color: #fff;}
 .provider_amount_control .batch-td { text-align: center;width: 165px;min-width:165px;padding-right: 10px;}

+ 5 - 4
admin/templates/default/merchant.refill.evidence_list.php

@@ -108,6 +108,7 @@
                         <option value="2" <?php if($_GET['add_type'] == '2'){ echo 'selected';}?>>后台手动预存</option>
                         <option value="3" <?php if($_GET['add_type'] == '3'){ echo 'selected';}?>>后台手动调款</option>
                         <option value="4" <?php if($_GET['add_type'] == '4'){ echo 'selected';}?>>余额找平</option>
+                        <option value="5" <?php if($_GET['add_type'] == '5'){ echo 'selected';}?>>平台转款</option>
                     </select>
                 </td>
                 <th><label for="is_bank">转款类型</label></th>
@@ -177,9 +178,9 @@
                 <th>申请编号</th>
                 <th>机构名称</th>
                 <th>申请金额</th>
-                <th class="align-center">转账银行开户人姓名</th>
-                <th class="align-center">转账银行名称</th>
-                <th class="align-center">收款银行</th>
+                <th class="align-left">转账银行开户人姓名</th>
+                <th class="align-left">转账银行名称</th>
+                <th class="align-left">收款银行</th>
                 <th>申请后可用金额</th>
                 <th class="align-center">是否银行转账</th>
                 <th class="align-center">申请状态</th>
@@ -187,7 +188,7 @@
                 <th class="align-center">申请日期</th>
                 <th class="align-center">审核日期</th>
                 <th class="align-center">审核管理员</th>
-                <th class="align-center">备注信息</th>
+                <th class="align-left">备注信息</th>
                 <th class="align-center">预存方式</th>
                 <th class="align-center">操作</th>
             </tr>

+ 226 - 185
admin/templates/default/provider.amount.control.php

@@ -1,17 +1,23 @@
-<link href="<?php echo ADMIN_TEMPLATES_URL;?>/css/recharge.css?<?php echo rand(1,10);?>" rel="stylesheet" type="text/css" id="cssfile2" />
+<link href="<?php echo ADMIN_TEMPLATES_URL; ?>/css/recharge.css?<?php echo rand(1, 10); ?>" rel="stylesheet" type="text/css" id="cssfile2" />
 <style>
     .batch {
         vertical-align: middle;
         display: inline-block;
-        *display: inline /*IE7*/;
+        *display: inline
+            /*IE7*/
+        ;
         margin-left: 4px;
         position: relative;
         z-index: 1;
-        *zoom: 1 /*IE7*/;
+        *zoom: 1
+            /*IE7*/
+        ;
     }
+
     .batch i {
         cursor: pointer;
     }
+
     .batch-input {
         background-color: #FFF;
         white-space: nowrap;
@@ -19,14 +25,16 @@
         border: solid 1px #BCE8F1;
         position: absolute;
         z-index: 1;
-        top: -70px;
-        left: -75px;
+        bottom: -75px;
+        left: -88px;
         box-shadow: 3px 3px 0 rgba(153, 153, 153, 0.25);
     }
+
     .batch-input h6 {
         font-size: 12px;
         color: #555;
     }
+
     .batch-input .text {
         vertical-align: middle;
         clear: both;
@@ -34,17 +42,20 @@
         vertical-align: middle;
         margin-right: 4px;
     }
+
     .batch-input .arrow {
-        background: url(<?php echo SHOP_SITE_URL;?>/templates/default/images/seller/ncsc_bg_img.png) no-repeat -240px -20px;
+        background: url(<?php echo SHOP_SITE_URL; ?>/templates/default/images/seller/ncsc_bg_img.png) no-repeat -240px -20px;
         display: block;
         width: 10px;
         height: 5px;
-        margin-left: -5px;
-        bottom: -5px;
+        margin-left: 1px;
+        top: -5px;
         left: 50%;
         position: absolute;
         z-index: 2;
+        transform: rotate(180deg);
     }
+
     .batch-input a.close {
         font-size: 11px;
         line-height: 12px;
@@ -62,15 +73,62 @@
         position: absolute;
         z-index: 2;
     }
+
     .text.price {
         width: 40px;
     }
+
     .text.pricee {
         width: 40px;
     }
+
     .fixed-bar {
         width: 100%;
     }
+
+    #price_table {
+        table-layout: fixed;
+        width: 100%;
+        height: calc(100vh - 220px);
+        overflow: auto;
+        display: block;
+        margin-top: 80px;
+    }
+
+    #price_table tr th:first-child {
+        position: sticky;
+        top: 0;
+        left: 0;
+        background: #fff;
+        box-shadow: 2px 0 2px rgb(0 0 0 / 10%);
+        z-index: 11;
+    }
+
+    #price_table tr:first-child {
+        position: sticky;
+        top: 0;
+        z-index: 11;
+        background: #fff;
+    }
+
+    #price_table tr:nth-child(2) {
+        position: sticky;
+        top: 38px;
+        z-index: 11;
+        background: #fff;
+    }
+
+    #price_table tr td:first-child {
+        display: block;
+        position: sticky;
+        left: 0;
+        box-shadow: 2px 0 2px rgb(0 0 0 / 10%);
+        z-index: 10;
+    }
+
+    #price_table tbody tr:hover .batch-td {
+        background: #cbe9f3 !important;
+    }
 </style>
 <?php defined('InShopNC') or exit('Access Invalid!'); ?>
 <div class="page provider_amount_control">
@@ -98,144 +156,119 @@
     </div>
     <div class="fixed-empty"></div>
     <form id="price_form" enctype="multipart/form-data" method="post">
-        <input type="hidden" name="form_submit" value="ok"/>
+        <input type="hidden" name="form_submit" value="ok" />
         <table class="table tb-type2 tableFixed">
-            <tbody class="tbody" >
-            <tr>
-                <td colspan="2" class="required" ><label>单量设置:</label></td>
-            </tr>
-            <tr>
-                <td class="tip_info">
-                    单量:请输入大于等于-1的数字,-1表示不限;&nbsp;&nbsp;&nbsp;&nbsp;
-                    优先级:请输入1-100的数字;&nbsp;&nbsp;&nbsp;&nbsp;是否启动:1-开启,0-关闭
-                </td>
-            </tr>
-            <tr class="noborder">
-                <table class="table tb-type2" style="margin-top: 77px;">
-                    <thead id="tableHread">
-                        <tr class="w550" style="display:block;">
-                            <th class="align-center w120 mw120"></th>
-                            <?php foreach ($output['providers'] as $provider) { ?>
-                            <th class="align-center w165 mw165"><?php echo $provider['store_name']?>(<?php if($provider['opened'] == 1){?>
-                                <span style="color: #0bb20c">开启</span>
-                            <?php }?><?php if($provider['opened'] == 2){?>
+            <tbody class="tbody">
+                <tr>
+                    <td colspan="2" class="required"><label>单量设置:</label></td>
+                </tr>
+                <tr>
+                    <td class="tip_info">
+                        单量:请输入大于等于-1的数字,-1表示不限;&nbsp;&nbsp;&nbsp;&nbsp;
+                        优先级:请输入1-100的数字;&nbsp;&nbsp;&nbsp;&nbsp;是否启动:1-开启,0-关闭
+                    </td>
+                </tr>
+                <tr class="noborder">
+                    <table class="table tb-type2" id="price_table">
+                        <tbody class="tbody tableContent">
+                            <tr>
+                                <th class="align-center w120 mw120">渠道名称</th>
+                                <?php foreach ($output['providers'] as $provider) { ?>
+                                    <th class="align-center w165 mw165"><?php echo $provider['store_name'] ?>(<?php if ($provider['opened'] == 1) { ?>
+                                        <span style="color: #0bb20c">开启</span>
+                                        <?php } ?><?php if ($provider['opened'] == 2) { ?>
                                         <span style="color: #f30707">关闭</span>
-                            <?php }?>)
-                            <?php }?>
-                        </tr>
-                        <tr class="w500" style="display:block;">
-                            <td class="align-center w120 mw120" style="height:16px"></td>
-                            <?php foreach ($output['providers'] as $provider) { ?>
-                            <td class="batch-td">
-                                <div class="listNum">
-                                    单量
-                                    <div class="batch" style="display: inline-block"><i class="icon-edit" title="批量操作"></i>
-                                        <div class="batch-input" style="display:none">
-                                            <h6>批量设置单量(大于等于-1):</h6>
-                                            <a href="javascript:void(0)" class="close">X</a>
-                                            <input name="" type="number" class="text pricee quantity"/>
-                                            <a href="javascript:void(0)" class="ncsc-btn-quantity" data-type="pricee">设置</a><span
-                                                    class="arrow"></span>
+                                        <?php } ?>)
+                                    <?php } ?>
+                            </tr>
+                            <tr>
+                                <th class="align-center w120 mw120" style="height:16px">类目</td>
+                                    <?php foreach ($output['providers'] as $provider) { ?>
+                                <th class="batch-td">
+                                    <div class="listNum">
+                                        单量
+                                        <div class="batch" style="display: inline-block"><i class="icon-edit" title="批量操作"></i>
+                                            <div class="batch-input" style="display:none">
+                                                <h6>批量设置单量(大于等于-1):</h6>
+                                                <a href="javascript:void(0)" class="close">X</a>
+                                                <input name="" type="number" class="text pricee quantity" />
+                                                <a href="javascript:void(0)" class="ncsc-btn-quantity" data-type="pricee">设置</a><span class="arrow"></span>
+                                            </div>
                                         </div>
                                     </div>
-                                </div>
-                                <div class="priority">
-                                    优先级
-                                </div>
-                                <div class="priority">
-                                    开关
-                                    <div class="batch" style="display: inline-block"><i class="icon-edit" title="批量操作"></i>
-                                        <div class="batch-input" style="display:none">
-                                            <h6>批量设置开关(0/1):</h6>
-                                            <a href="javascript:void(0)" class="close">X</a>
-                                            <input name="" type="number" class="text price"/>
-                                            <a href="javascript:void(0)" class="ncsc-btn-mini" data-type="price">设置</a><span
-                                                    class="arrow"></span>
+                                    <div class="priority">
+                                        优先级
+                                    </div>
+                                    <div class="priority">
+                                        开关
+                                        <div class="batch" style="display: inline-block"><i class="icon-edit" title="批量操作"></i>
+                                            <div class="batch-input" style="display:none">
+                                                <h6>批量设置开关(0/1):</h6>
+                                                <a href="javascript:void(0)" class="close">X</a>
+                                                <input name="" type="number" class="text price" />
+                                                <a href="javascript:void(0)" class="ncsc-btn-mini" data-type="price">设置</a><span class="arrow"></span>
+                                            </div>
                                         </div>
                                     </div>
-                                </div>
-                            </td>
-                            <?php }?>
-
-                        </tr>
+                                </th>
+                            <?php } ?>
 
-                    </thead>
-                    <tbody class="tbody tableContent">
-                        <?php foreach ($output['form']['amountData'] as $key => $amount) { ?>
-                        <tr class="w500 trFlex" data-color="<?php echo $amount['type'];?>">
-                            <td style="text-align: center;width: 120px;min-width:120px;" class="tbFlex">
-                                <?php echo $amount['text']?>
-                            </td>
-                            <?php foreach ($output['providers'] as $provider) { ?>
-                                <input type="hidden" name="str[]" value="<?php echo "{$provider['provider_id']}-{$amount['type']}-{$amount['amount']}-{$output['datas'][$provider['provider_id']][$key]['has']}";?>">
+                            </tr>
+                            <?php foreach ($output['form']['amountData'] as $key => $amount) { ?>
+                                <tr class="w500 trFlex">
+                                    <td style="text-align: center;width: 120px;min-width:120px;" class="tbFlex" data-color="<?php echo $amount['type']; ?>">
+                                        <?php echo $amount['text'] ?>
+                                    </td>
+                                    <?php foreach ($output['providers'] as $provider) { ?>
+                                        <input type="hidden" name="str[]" value="<?php echo "{$provider['provider_id']}-{$amount['type']}-{$amount['amount']}-{$output['datas'][$provider['provider_id']][$key]['has']}"; ?>">
 
-                            <td class="batch-td">
-                                <div class="listNum">
-                                    <input type="text" class="input-one styleOne w46" name="speed[]" autocomplete="off"
-                                           value="<?php echo $output['datas'][$provider['provider_id']][$key]['speed']?>"
-                                           <?php if($output['datas'][$provider['provider_id']][$key]['has'] == 0){?>
-                                               readOnly
-                                               style="background-color:#eaeaea;"
-                                            <?php }?>
-                                    >
-                                </div>
-                                <div class="priority">
-                                    <input type="text" class="input-tow styleTow w32" name="sort[]" autocomplete="off"
-                                           value="<?php echo $output['datas'][$provider['provider_id']][$key]['sort']?>"
-                                           <?php if($output['datas'][$provider['provider_id']][$key]['has'] == 0){?>
-                                               readOnly
-                                               style="background-color:#eaeaea;"
-                                            <?php }?>
-                                    >
-                                </div>
-                                <div class="priority">
-                                    <input type="text" class="input-three styleTow w32" name="opened[]" autocomplete="off"
-                                           value="<?php echo $output['datas'][$provider['provider_id']][$key]['opened']?>"
-                                            <?php if($output['datas'][$provider['provider_id']][$key]['has'] == 0){?>
-                                                readOnly
-                                                style="background-color:#eaeaea;"
-                                            <?php }?>
-                                    >
-                                </div>
-                            </td>
-                            <?php }?>
-                        </tr>
-                        <?php }?>
-                    </tbody>
-                </table>
-            </tr>
+                                        <td class="batch-td" data-color="<?php echo $amount['type']; ?>">
+                                            <div class="listNum">
+                                                <input type="text" class="input-one styleOne w46" name="speed[]" autocomplete="off" value="<?php echo $output['datas'][$provider['provider_id']][$key]['speed'] ?>" <?php if ($output['datas'][$provider['provider_id']][$key]['has'] == 0) { ?> readOnly style="background-color:#eaeaea;" <?php } ?>>
+                                            </div>
+                                            <div class="priority">
+                                                <input type="text" class="input-tow styleTow w32" name="sort[]" autocomplete="off" value="<?php echo $output['datas'][$provider['provider_id']][$key]['sort'] ?>" <?php if ($output['datas'][$provider['provider_id']][$key]['has'] == 0) { ?> readOnly style="background-color:#eaeaea;" <?php } ?>>
+                                            </div>
+                                            <div class="priority">
+                                                <input type="text" class="input-three styleTow w32" name="opened[]" autocomplete="off" value="<?php echo $output['datas'][$provider['provider_id']][$key]['opened'] ?>" <?php if ($output['datas'][$provider['provider_id']][$key]['has'] == 0) { ?> readOnly style="background-color:#eaeaea;" <?php } ?>>
+                                            </div>
+                                        </td>
+                                    <?php } ?>
+                                </tr>
+                            <?php } ?>
+                        </tbody>
+                    </table>
+                </tr>
             </tbody>
             <tfoot>
-            <tr class="tfoot">
-                <td colspan="15"><a href="JavaScript:void(0);" class="btn" style="margin-top: 15px" id="submitBtn"><span><?php echo $lang['nc_submit']; ?></span></a></td>
-            </tr>
+                <tr class="tfoot">
+                    <td colspan="15"><a href="JavaScript:void(0);" class="btn" style="margin-top: 15px" id="submitBtn"><span><?php echo $lang['nc_submit']; ?></span></a></td>
+                </tr>
             </tfoot>
         </table>
     </form>
 </div>
-<script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/js/dialog/dialog.js" id="dialog_js"
-        charset="utf-8"></script>
+<script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/js/dialog/dialog.js" id="dialog_js" charset="utf-8"></script>
 <script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/js/jquery-ui/jquery.ui.js"></script>
 <script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/js/ajaxfileupload/ajaxfileupload.js"></script>
 <script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/js/jquery.Jcrop/jquery.Jcrop.js"></script>
-<script type="text/javascript" src="<?php echo RESOURCE_SITE_URL;?>/refill/layer.js"></script>
-<link href="<?php echo RESOURCE_SITE_URL; ?>/js/jquery.Jcrop/jquery.Jcrop.min.css" rel="stylesheet" type="text/css"
-      id="cssfile2"/>
+<script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/refill/layer.js"></script>
+<link href="<?php echo RESOURCE_SITE_URL; ?>/js/jquery.Jcrop/jquery.Jcrop.min.css" rel="stylesheet" type="text/css" id="cssfile2" />
 <script type="text/javascript">
-    $(function () {
-        $(window).scroll(function() {
-            let toLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
-            if (toLeft>0) {
-                let headLeft = toLeft - 20
-                $('#tableHread')[0].style.left = '-'+headLeft+'px'
-            } else if (toLeft == 0) {
-                $('#tableHread')[0].style.left = 20+'px'
-            }
-        });
+    $(function() {
+        // $(window).scroll(function() {
+        //     let toLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
+        //     if (toLeft > 0) {
+        //         let headLeft = toLeft - 20
+        //         $('#tableHread')[0].style.left = '-' + headLeft + 'px'
+        //     } else if (toLeft == 0) {
+        //         $('#tableHread')[0].style.left = 20 + 'px'
+        //     }
+        // });
         let isSubmit = true
-        $('.input-one').blur(function () {
+        $('.input-one').blur(function() {
             let value = $(this)[0].value
-            if (value >= -1 ) {
+            if (value >= -1) {
                 isSubmit = true;
                 $(this)[0].style['borderColor'] = ''
             } else {
@@ -243,7 +276,7 @@
                 $(this)[0].style['borderColor'] = '#e64444'
             }
         })
-        $('.input-tow').blur(function () {
+        $('.input-tow').blur(function() {
             let value = $(this)[0].value
             if (value >= 1 && value <= 100) {
                 isSubmit = true;
@@ -253,7 +286,7 @@
                 $(this)[0].style['borderColor'] = '#e64444'
             }
         })
-        $('.input-three').blur(function () {
+        $('.input-three').blur(function() {
             let value = $(this)[0].value
             if (value == 0 || value == 1) {
                 isSubmit = true
@@ -265,17 +298,17 @@
         })
 
         // 开始获取当前地址
-        let type = '<?php echo $_GET['type'];?>';
-        let form = '<?php echo $_GET['form'];?>';
-        $(".classA").each(function () {
-           if (type+'-'+form == $(this).attr("data-type")) {
-               $(this).addClass('current')
-               $(this).attr('href','JavaScript:void(0);')
-           }
+        let type = '<?php echo $_GET['type']; ?>';
+        let form = '<?php echo $_GET['form']; ?>';
+        $(".classA").each(function() {
+            if (type + '-' + form == $(this).attr("data-type")) {
+                $(this).addClass('current')
+                $(this).attr('href', 'JavaScript:void(0);')
+            }
         })
 
         // 提交
-        $("#submitBtn").click(function () {
+        $("#submitBtn").click(function() {
             console.log('isSubmit', isSubmit);
             if (isSubmit) {
                 $("#price_form").submit();
@@ -283,100 +316,108 @@
         })
 
         // tab样式
-        $(".tab-base a").click(function () {
+        $(".tab-base a").click(function() {
             $(this).addClass('current')
             $(this).siblings().removeClass('current')
         })
         // 表格hover时背景
-        $('.trFlex').each(function () {
-            let color = $(this).attr('data-color')
-            if (color ==  4 || color ==  1) {
-                $(this).css('background', '#f1dde6')
-            } else if (color == 5 || color ==  2) {
-                $(this).css('background', '#c8c6f3')
-            } else if (color == 6) {
-                $(this).css('background', '#f2f3c6')
+        $('#price_table td').each(function() {
+            let colorIndex = $(this).attr('data-color')
+            const colorArr = ['#fff', '#f1dde6', '#c8c6f3', '#fff', '#f1dde6', '#c8c6f3', '#f2f3c6', '#fff'];
+            if (colorArr[colorIndex]) {
+                $(this).css('background', colorArr[colorIndex]);
             } else {
-                $(this).css('background', '#fff')
+                $(this).css('background', '#fff');
             }
-            $(this).hover(function () {
-                $(this)[0].style.backgroundColor = '#cbe9f3'
-            },function() {
-                if (color ==  4 || color ==  1) {
-                    $(this).css('background', '#f1dde6')
-                } else if (color == 5  || color ==  2) {
-                    $(this).css('background', '#c8c6f3')
 
-                } else if (color == 6) {
-                    $(this).css('background', '#f2f3c6')
+            // if (color == 4 || color == 1) {
+            //     $(this).css('background', '#f1dde6')
+            // } else if (color == 5 || color == 2) {
+            //     $(this).css('background', '#c8c6f3')
+            // } else if (color == 6) {
+            //     $(this).css('background', '#f2f3c6')
+            // } else {
+            //     $(this).css('background', '#fff')
+            // }
+        })
 
-                } else {
-                    $(this).css('background', '#fff')
+        // $('#price_table .tableContent tr').hover(function() {
+        //         $(this)[0].style.backgroundColor = '#cbe9f3'
+        //     }, function() {
+        //         if (color == 4 || color == 1) {
+        //             $(this).css('background', '#f1dde6')
+        //         } else if (color == 5 || color == 2) {
+        //             $(this).css('background', '#c8c6f3')
+
+        //         } else if (color == 6) {
+        //             $(this).css('background', '#f2f3c6')
+
+        //         } else {
+        //             $(this).css('background', '#fff')
+
+        //         }
+        //     })
 
-                }
-            })
-        })
         // 批量设置开关
-        $('.batch > .icon-edit').click(function () {
+        $('.batch > .icon-edit').click(function() {
             $('.batch > .batch-input').hide();
             $(this).next().show();
         });
-        $('.batch-input > .close').click(function () {
+        $('.batch-input > .close').click(function() {
             $(this).parent().hide();
         });
-        $('.price').change(function () {
+        $('.price').change(function() {
             let val = $(this).val()
             if (val != '1' && val != '0') {
                 layer.msg('开关只能设置0或1');
             }
         })
         // 点击设置
-        $('.ncsc-btn-mini').click(function () {
+        $('.ncsc-btn-mini').click(function() {
             let price = $(this).siblings('.price').val()
             if (price != '1' && price != '0') {
                 layer.msg('开关只能设置0或1');
                 return
             }
             var lie = $(this).parents('.batch-td').prevAll().length
-            $('.input-three').each(function () {
-               let tdCon = $(this).parents('td').prevAll().length / 2
-               let readOnly = $(this).attr('readOnly')
-               if (lie == tdCon && !readOnly) {
-                   $(this).val(price)
-               }
+            $('.input-three').each(function() {
+                let tdCon = $(this).parents('td').prevAll().length / 2
+                let readOnly = $(this).attr('readOnly')
+                if (lie == tdCon && !readOnly) {
+                    $(this).val(price)
+                }
             })
-            
+
         })
         // 单量设置开关
-        $('.batch > .icon-edit').click(function () {
-        $('.batch > .batch-input').hide();
-        $(this).next().show();
+        $('.batch > .icon-edit').click(function() {
+            $('.batch > .batch-input').hide();
+            $(this).next().show();
         });
-        $('.batch-input > .close').click(function () {
+        $('.batch-input > .close').click(function() {
             $(this).parent().hide();
         });
-        $('.pricee').change(function () {
+        $('.pricee').change(function() {
             let val = $(this).val()
             if (val <= -2) {
                 layer.msg('单量只能设置大于-1');
             }
         })
         // 点击设置
-        $('.ncsc-btn-quantity').click(function () {
+        $('.ncsc-btn-quantity').click(function() {
             let quantity = $(this).siblings('.quantity').val()
             if (quantity <= -2) {
                 layer.msg('单量只能设置大于-1');
                 return
             }
             let lie = $(this).parents('.batch-td').prevAll().length;
-        $('.input-one').each(function(index, item) {
-               let tdCon = $(this).parents('td').prevAll().length / 2
-               let readOnly = $(this).attr('readOnly')
-               if (lie == tdCon && !readOnly) {
-                   $(this).val(quantity)
-               }
+            $('.input-one').each(function(index, item) {
+                let tdCon = $(this).parents('td').prevAll().length / 2
+                let readOnly = $(this).attr('readOnly')
+                if (lie == tdCon && !readOnly) {
+                    $(this).val(quantity)
+                }
             })
         })
     });
-</script>
- 
+</script>

+ 1 - 0
admin/templates/default/recharge.manual.edit.php

@@ -62,6 +62,7 @@
                     <select name="add_type" id="add_type">
                         <option value="3">手动调款</option>
                         <option value="4">余额找平</option>
+                        <option value="5">平台转款</option>
                     </select>
                 </td>
                 <td class="vatop tips"></td>

+ 23 - 8
admin/templates/default/refill.evidence.edit.php

@@ -33,29 +33,44 @@
                 </td>
             </tr>
             <tr>
-                <td colspan="2" class="required"><label>申请金额:</label></td>
+                <td colspan="2" class="required"><label class="validation">调款类型:</label></td>
             </tr>
             <tr class="noborder">
                 <td class="vatop rowform">
-                    <?php echo $output['evidence_info']['amount'];?>
+                    <select name="add_type" id="add_type">
+                        <option value="1" <?php if($output['evidence_info']['add_type'] == '1'){ echo 'selected'; }?>>商户预存</option>
+                        <option value="2" <?php if($output['evidence_info']['add_type'] == '2'){ echo 'selected'; }?>>后台手动预存</option>
+                        <option value="3" <?php if($output['evidence_info']['add_type'] == '3'){ echo 'selected'; }?>>后台手动调款</option>
+                        <option value="4" <?php if($output['evidence_info']['add_type'] == '4'){ echo 'selected'; }?>>余额找平</option>
+                        <option value="5" <?php if($output['evidence_info']['add_type'] == '5'){ echo 'selected'; }?>>平台转款</option>
+                    </select>
                 </td>
+                <td class="vatop tips"></td>
             </tr>
             <tr>
-                <td colspan="2" class="required"><label>转账信息:</label></td>
+                <td colspan="2" class="required"><label>申请状态:</label></td>
             </tr>
             <tr class="noborder">
                 <td class="vatop rowform">
-                    转账银行 :<?php echo $output['evidence_info']['bank_name'];?> |
-                    开户人名称 :<?php echo $output['evidence_info']['bank_username'];?>
+                    审核状态 :<?php echo $output['evidence_info']['status_text'];?> |
+                    预存状态 :<?php echo $output['evidence_info']['operation_text'];?>
                 </td>
             </tr>
             <tr>
-                <td colspan="2" class="required"><label>申请状态:</label></td>
+                <td colspan="2" class="required"><label>申请金额:</label></td>
             </tr>
             <tr class="noborder">
                 <td class="vatop rowform">
-                    审核状态 :<?php echo $output['evidence_info']['status_text'];?> |
-                    预存状态 :<?php echo $output['evidence_info']['operation_text'];?>
+                    <?php echo $output['evidence_info']['amount'];?>
+                </td>
+            </tr>
+            <tr>
+                <td colspan="2" class="required"><label>转账信息:</label></td>
+            </tr>
+            <tr class="noborder">
+                <td class="vatop rowform">
+                    转账银行 :<?php echo $output['evidence_info']['bank_name'];?> |
+                    开户人名称 :<?php echo $output['evidence_info']['bank_username'];?>
                 </td>
             </tr>
             <tr>

+ 5 - 0
composer.json

@@ -0,0 +1,5 @@
+{
+    "require": {
+        "phpoffice/phpspreadsheet": "^1.22"
+    }
+}

+ 667 - 0
composer.lock

@@ -0,0 +1,667 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "e442471d898d555cab75123cc5bc6f4a",
+    "packages": [
+        {
+            "name": "ezyang/htmlpurifier",
+            "version": "v4.14.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/ezyang/htmlpurifier.git",
+                "reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/12ab42bd6e742c70c0a52f7b82477fcd44e64b75",
+                "reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.2"
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "library/HTMLPurifier.composer.php"
+                ],
+                "psr-0": {
+                    "HTMLPurifier": "library/"
+                },
+                "exclude-from-classmap": [
+                    "/library/HTMLPurifier/Language/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Edward Z. Yang",
+                    "email": "admin@htmlpurifier.org",
+                    "homepage": "http://ezyang.com"
+                }
+            ],
+            "description": "Standards compliant HTML filter written in PHP",
+            "homepage": "http://htmlpurifier.org/",
+            "keywords": [
+                "html"
+            ],
+            "time": "2021-12-25T01:21:49+00:00"
+        },
+        {
+            "name": "maennchen/zipstream-php",
+            "version": "2.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/maennchen/ZipStream-PHP.git",
+                "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/c4c5803cc1f93df3d2448478ef79394a5981cc58",
+                "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58",
+                "shasum": ""
+            },
+            "require": {
+                "myclabs/php-enum": "^1.5",
+                "php": ">= 7.1",
+                "psr/http-message": "^1.0",
+                "symfony/polyfill-mbstring": "^1.0"
+            },
+            "require-dev": {
+                "ext-zip": "*",
+                "guzzlehttp/guzzle": ">= 6.3",
+                "mikey179/vfsstream": "^1.6",
+                "phpunit/phpunit": ">= 7.5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "ZipStream\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Paul Duncan",
+                    "email": "pabs@pablotron.org"
+                },
+                {
+                    "name": "Jonatan Männchen",
+                    "email": "jonatan@maennchen.ch"
+                },
+                {
+                    "name": "Jesse Donat",
+                    "email": "donatj@gmail.com"
+                },
+                {
+                    "name": "András Kolesár",
+                    "email": "kolesar@kolesar.hu"
+                }
+            ],
+            "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.",
+            "keywords": [
+                "stream",
+                "zip"
+            ],
+            "funding": [
+                {
+                    "url": "https://opencollective.com/zipstream",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2020-05-30T13:11:16+00:00"
+        },
+        {
+            "name": "markbaker/complex",
+            "version": "3.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/MarkBaker/PHPComplex.git",
+                "reference": "ab8bc271e404909db09ff2d5ffa1e538085c0f22"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/ab8bc271e404909db09ff2d5ffa1e538085c0f22",
+                "reference": "ab8bc271e404909db09ff2d5ffa1e538085c0f22",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "require-dev": {
+                "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+                "phpcompatibility/php-compatibility": "^9.0",
+                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.3",
+                "squizlabs/php_codesniffer": "^3.4"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Complex\\": "classes/src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mark Baker",
+                    "email": "mark@lange.demon.co.uk"
+                }
+            ],
+            "description": "PHP Class for working with complex numbers",
+            "homepage": "https://github.com/MarkBaker/PHPComplex",
+            "keywords": [
+                "complex",
+                "mathematics"
+            ],
+            "time": "2021-06-29T15:32:53+00:00"
+        },
+        {
+            "name": "markbaker/matrix",
+            "version": "3.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/MarkBaker/PHPMatrix.git",
+                "reference": "c66aefcafb4f6c269510e9ac46b82619a904c576"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/c66aefcafb4f6c269510e9ac46b82619a904c576",
+                "reference": "c66aefcafb4f6c269510e9ac46b82619a904c576",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1 || ^8.0"
+            },
+            "require-dev": {
+                "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+                "phpcompatibility/php-compatibility": "^9.0",
+                "phpdocumentor/phpdocumentor": "2.*",
+                "phploc/phploc": "^4.0",
+                "phpmd/phpmd": "2.*",
+                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.3",
+                "sebastian/phpcpd": "^4.0",
+                "squizlabs/php_codesniffer": "^3.4"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Matrix\\": "classes/src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mark Baker",
+                    "email": "mark@demon-angel.eu"
+                }
+            ],
+            "description": "PHP Class for working with matrices",
+            "homepage": "https://github.com/MarkBaker/PHPMatrix",
+            "keywords": [
+                "mathematics",
+                "matrix",
+                "vector"
+            ],
+            "time": "2021-07-01T19:01:15+00:00"
+        },
+        {
+            "name": "myclabs/php-enum",
+            "version": "1.8.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/myclabs/php-enum.git",
+                "reference": "b942d263c641ddb5190929ff840c68f78713e937"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/myclabs/php-enum/zipball/b942d263c641ddb5190929ff840c68f78713e937",
+                "reference": "b942d263c641ddb5190929ff840c68f78713e937",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "php": "^7.3 || ^8.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.5",
+                "squizlabs/php_codesniffer": "1.*",
+                "vimeo/psalm": "^4.6.2"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "MyCLabs\\Enum\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP Enum contributors",
+                    "homepage": "https://github.com/myclabs/php-enum/graphs/contributors"
+                }
+            ],
+            "description": "PHP Enum implementation",
+            "homepage": "http://github.com/myclabs/php-enum",
+            "keywords": [
+                "enum"
+            ],
+            "funding": [
+                {
+                    "url": "https://github.com/mnapoli",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/myclabs/php-enum",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-07-05T08:18:36+00:00"
+        },
+        {
+            "name": "phpoffice/phpspreadsheet",
+            "version": "1.22.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
+                "reference": "3a9e29b4f386a08a151a33578e80ef1747037a48"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/3a9e29b4f386a08a151a33578e80ef1747037a48",
+                "reference": "3a9e29b4f386a08a151a33578e80ef1747037a48",
+                "shasum": ""
+            },
+            "require": {
+                "ext-ctype": "*",
+                "ext-dom": "*",
+                "ext-fileinfo": "*",
+                "ext-gd": "*",
+                "ext-iconv": "*",
+                "ext-libxml": "*",
+                "ext-mbstring": "*",
+                "ext-simplexml": "*",
+                "ext-xml": "*",
+                "ext-xmlreader": "*",
+                "ext-xmlwriter": "*",
+                "ext-zip": "*",
+                "ext-zlib": "*",
+                "ezyang/htmlpurifier": "^4.13",
+                "maennchen/zipstream-php": "^2.1",
+                "markbaker/complex": "^3.0",
+                "markbaker/matrix": "^3.0",
+                "php": "^7.3 || ^8.0",
+                "psr/http-client": "^1.0",
+                "psr/http-factory": "^1.0",
+                "psr/simple-cache": "^1.0"
+            },
+            "require-dev": {
+                "dealerdirect/phpcodesniffer-composer-installer": "dev-master",
+                "dompdf/dompdf": "^1.0",
+                "friendsofphp/php-cs-fixer": "^3.2",
+                "jpgraph/jpgraph": "^4.0",
+                "mpdf/mpdf": "8.0.17",
+                "phpcompatibility/php-compatibility": "^9.3",
+                "phpstan/phpstan": "^1.1",
+                "phpstan/phpstan-phpunit": "^1.0",
+                "phpunit/phpunit": "^8.5 || ^9.0",
+                "squizlabs/php_codesniffer": "^3.6",
+                "tecnickcom/tcpdf": "^6.4"
+            },
+            "suggest": {
+                "dompdf/dompdf": "Option for rendering PDF with PDF Writer (doesn't yet support PHP8)",
+                "jpgraph/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers",
+                "mpdf/mpdf": "Option for rendering PDF with PDF Writer",
+                "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer (doesn't yet support PHP8)"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Maarten Balliauw",
+                    "homepage": "https://blog.maartenballiauw.be"
+                },
+                {
+                    "name": "Mark Baker",
+                    "homepage": "https://markbakeruk.net"
+                },
+                {
+                    "name": "Franck Lefevre",
+                    "homepage": "https://rootslabs.net"
+                },
+                {
+                    "name": "Erik Tilt"
+                },
+                {
+                    "name": "Adrien Crivelli"
+                }
+            ],
+            "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine",
+            "homepage": "https://github.com/PHPOffice/PhpSpreadsheet",
+            "keywords": [
+                "OpenXML",
+                "excel",
+                "gnumeric",
+                "ods",
+                "php",
+                "spreadsheet",
+                "xls",
+                "xlsx"
+            ],
+            "time": "2022-02-18T12:57:07+00:00"
+        },
+        {
+            "name": "psr/http-client",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-client.git",
+                "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
+                "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.0 || ^8.0",
+                "psr/http-message": "^1.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Client\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for HTTP clients",
+            "homepage": "https://github.com/php-fig/http-client",
+            "keywords": [
+                "http",
+                "http-client",
+                "psr",
+                "psr-18"
+            ],
+            "time": "2020-06-29T06:28:15+00:00"
+        },
+        {
+            "name": "psr/http-factory",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-factory.git",
+                "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+                "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.0.0",
+                "psr/http-message": "^1.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Message\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interfaces for PSR-7 HTTP message factories",
+            "keywords": [
+                "factory",
+                "http",
+                "message",
+                "psr",
+                "psr-17",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "time": "2019-04-30T12:38:16+00:00"
+        },
+        {
+            "name": "psr/http-message",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-message.git",
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Message\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for HTTP messages",
+            "homepage": "https://github.com/php-fig/http-message",
+            "keywords": [
+                "http",
+                "http-message",
+                "psr",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "time": "2016-08-06T14:39:51+00:00"
+        },
+        {
+            "name": "psr/simple-cache",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/simple-cache.git",
+                "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+                "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\SimpleCache\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interfaces for simple caching",
+            "keywords": [
+                "cache",
+                "caching",
+                "psr",
+                "psr-16",
+                "simple-cache"
+            ],
+            "time": "2017-10-23T01:57:42+00:00"
+        },
+        {
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.25.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825",
+                "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1"
+            },
+            "provide": {
+                "ext-mbstring": "*"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "1.23-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-11-30T18:21:41+00:00"
+        }
+    ],
+    "packages-dev": [],
+    "aliases": [],
+    "minimum-stability": "stable",
+    "stability-flags": [],
+    "prefer-stable": false,
+    "prefer-lowest": false,
+    "platform": [],
+    "platform-dev": [],
+    "plugin-api-version": "1.1.0"
+}

二進制
composer.phar


+ 9 - 0
core/framework/libraries/log.php

@@ -107,6 +107,15 @@ class Log
     }
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public static function set_level($level) {
+        self::instance()->mCurLevel = $level;
+    }
+
+    public static function enable_sql(bool $enable) {
+        self::instance()->mOpenSql = $enable;
+    }
+
     public static function record($message, $lev = self::ERR)
     {
         self::instance()->doRecord($message, $lev);

+ 110 - 88
data/config/xyz/refill.ini.php

@@ -585,75 +585,68 @@ $wantong_phone = ['name' => 'wantong', 'store_id' => 36, 'qualitys' => '4',
 
 $zhongst_phone = ['name' => 'zhongst', 'store_id' => 39, 'qualitys' => '2',
     'amount' => [
-        1 => [
-            ['goods_id' => 7544, 'price' => 1.04, 'quality' => 2, 'card_type' => 'chinaunicom']
-        ],
-        2 => [
-            ['goods_id' => 7545, 'price' => 2.08, 'quality' => 2, 'card_type' => 'chinaunicom']
-        ],
-        3 => [
-            ['goods_id' => 7546, 'price' => 3.12, 'quality' => 2, 'card_type' => 'chinaunicom']
-        ],
-        4 => [
-            ['goods_id' => 7547, 'price' => 4.16, 'quality' => 2, 'card_type' => 'chinaunicom']
-        ],
         5 => [
-            ['goods_id' => 7548, 'price' => 5.2, 'quality' => 2, 'card_type' => 'chinaunicom']
+            ['goods_id' => 7548, 'price' => 5.2, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7548, 'price' => 5.2, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         6 => [
-            ['goods_id' => 7549, 'price' => 6.24, 'quality' => 2, 'card_type' => 'chinaunicom']
+            ['goods_id' => 7549, 'price' => 6.24, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7549, 'price' => 6.24, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         7 => [
-            ['goods_id' => 7550, 'price' => 7.28, 'quality' => 2, 'card_type' => 'chinaunicom']
+            ['goods_id' => 7550, 'price' => 7.28, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7550, 'price' => 7.28, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         8 => [
-            ['goods_id' => 7551, 'price' => 8.32, 'quality' => 2, 'card_type' => 'chinaunicom']
+            ['goods_id' => 7551, 'price' => 8.32, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7551, 'price' => 8.32, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         9 => [
-            ['goods_id' => 7552, 'price' => 9.36, 'quality' => 2, 'card_type' => 'chinaunicom']
+            ['goods_id' => 7552, 'price' => 9.36, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7552, 'price' => 9.36, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
 
         10 => [
-            ['goods_id' => 6464, 'price' => 10.04, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 6464, 'price' => 10.4, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 6464, 'price' => 10.05, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 6464, 'price' => 10.1, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
 
         20 => [
-            ['goods_id' => 6465, 'price' => 20.08, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 6465, 'price' => 20.8, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 6465, 'price' => 20.1, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 6465, 'price' => 20.2, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
 
         30 => [
-            ['goods_id' => 6466, 'price' => 30.36, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 6466, 'price' => 30.18, 'quality' => 2, 'card_type' => 'chinamobile'],
             ['goods_id' => 6466, 'price' => 30.12, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 6466, 'price' => 30.45, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 6466, 'price' => 30.09, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
 
         50 => [
             ['goods_id' => 6467, 'price' => 50.1, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 6467, 'price' => 50.1, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 6467, 'price' => 50.2, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 6467, 'price' => 50.05, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 6467, 'price' => 50.1, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
 
         100 => [
             ['goods_id' => 6468, 'price' => 100.2, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 6468, 'price' => 100.2, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 6468, 'price' => 99.9, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 6468, 'price' => 100.1, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 6468, 'price' => 100.1, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         200 => [
             ['goods_id' => 6469, 'price' => 200.4, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 6469, 'price' => 200.4, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 6469, 'price' => 199.8, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 6469, 'price' => 200.2, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 6469, 'price' => 200.2, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         300 => [
             ['goods_id' => 6470, 'price' => 300.6, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 6470, 'price' => 300.6, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 6470, 'price' => 299.7, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 6470, 'price' => 300.3, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 6470, 'price' => 300.3, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         500 => [
             ['goods_id' => 6471, 'price' => 501, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 6471, 'price' => 501, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 6471, 'price' => 499.5, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 6471, 'price' => 500.5, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 6471, 'price' => 500.5, 'quality' => 2, 'card_type' => 'chinatelecom']
         ]
     ],
     'official_sn' => true, 'refill_type' => 'api'];
@@ -1689,14 +1682,22 @@ $yunchonggong_phone = ['name' => 'yunchonggong', 'store_id' => 87,'qualitys' =>
 
 $yunchonggongman_phone = ['name' => 'yunchonggongman', 'store_id' => 88,'qualitys' => '5',
     'amount' => [
-        10 => [['goods_id' => 6805, 'price' => 9.03, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        20 => [['goods_id' => 6806, 'price' => 18.06, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        30 => [['goods_id' => 6807, 'price' => 27.09, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        50 => [['goods_id' => 6808, 'price' => 45.15, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        100 => [['goods_id' => 6809, 'price' => 90.3, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        200 => [['goods_id' => 6810, 'price' => 180.6, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        300 => [['goods_id' => 6811, 'price' => 270.9, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        500 => [['goods_id' => 6812, 'price' => 451.5, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']]
+//        10 => [['goods_id' => 6805, 'price' => 9.03, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
+//        20 => [['goods_id' => 6806, 'price' => 18.06, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
+//        30 => [['goods_id' => 6807, 'price' => 27.09, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
+        50 => [
+            ['goods_id' => 6808, 'price' => 45.9, 'quality' => 5, 'card_type' => 'chinatelecom']
+        ],
+        100 => [
+            ['goods_id' => 6809, 'price' => 91.3, 'quality' => 5, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 6809, 'price' => 91.8, 'quality' => 5, 'card_type' => 'chinatelecom']
+        ],
+        200 => [
+            ['goods_id' => 6810, 'price' => 182.6, 'quality' => 5, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 6810, 'price' => 183.6, 'quality' => 5, 'card_type' => 'chinatelecom']
+        ],
+//        300 => [['goods_id' => 6811, 'price' => 270.9, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
+//        500 => [['goods_id' => 6812, 'price' => 451.5, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']]
     ],
     'official_sn' => true, 'refill_type' => 'api'];
 
@@ -2500,86 +2501,90 @@ $yunchonggong_yd_phone = ['name' => 'yunchonggong_yd', 'store_id' => 120, 'quali
 $guochuang_nation_phone = ['name' => 'guochuang_nation', 'store_id' => 121, 'qualitys' => '2',
     'amount' => [
         1  => [
-            ['goods_id' => 7051, 'price' => 1.25, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7051, 'price' => 1.061, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7051, 'price' => 1.018, 'quality' => 2, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7051, 'price' => 1.031, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         2  => [
-            ['goods_id' => 7052, 'price' => 2.05, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7052, 'price' => 2.122, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7052, 'price' => 2.036, 'quality' => 2, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7052, 'price' => 2.062, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         3  => [
-            ['goods_id' => 7053, 'price' => 3.075, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7053, 'price' => 3.183, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7053, 'price' => 3.054, 'quality' => 2, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7053, 'price' => 3.093, 'quality' => 2, 'card_type' => 'chinatelecom']
-
         ],
         4  => [
-            ['goods_id' => 7054, 'price' => 4.1, 'quality' => 2, 'card_type' => 'chinaunicom']
+            ['goods_id' => 7054, 'price' => 4.244, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7054, 'price' => 4.072, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7054, 'price' => 4.204, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         5  => [
             ['goods_id' => 7055, 'price' => 5.305, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7055, 'price' => 5.125, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7055, 'price' => 5.09, 'quality' => 2, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7055, 'price' => 5.155, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         6  => [
             ['goods_id' => 7056, 'price' => 6.306, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7056, 'price' => 6.15, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7056, 'price' => 6.108, 'quality' => 2, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7056, 'price' => 6.186, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         7  => [
             ['goods_id' => 7057, 'price' => 7.308, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7057, 'price' => 7.175, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7057, 'price' => 7.126, 'quality' => 2, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7057, 'price' => 7.217, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         8  => [
             ['goods_id' => 7058, 'price' => 8.308, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7058, 'price' => 8.2, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7058, 'price' => 8.144, 'quality' => 2, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7058, 'price' => 8.248, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         9  => [
             ['goods_id' => 7059, 'price' => 9.3105, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7059, 'price' => 9.225, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7059, 'price' => 9.162, 'quality' => 2, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7059, 'price' => 9.279, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
 
         10 => [
-            ['goods_id' => 7060, 'price' => 10.38, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7060, 'price' => 10.05, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 7060, 'price' => 10.23, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 7060, 'price' => 10.31, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7060, 'price' => 10.04, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7060, 'price' => 10.12, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         20 => [
-            ['goods_id' => 7061, 'price' => 20.62, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7061, 'price' => 20.64, 'quality' => 2, 'card_type' => 'chinamobile'],
             ['goods_id' => 7061, 'price' => 20.08, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 7061, 'price' => 20.46, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 7061, 'price' => 20.17, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         30 => [
-            ['goods_id' => 7062, 'price' => 30.27, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7062, 'price' => 30.045, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 7062, 'price' => 30.24, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 7062, 'price' => 30.18, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7062, 'price' => 30.09, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7062, 'price' => 30.18, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         50 => [
             ['goods_id' => 7063, 'price' => 50.1, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7063, 'price' => 50.075, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7063, 'price' => 50, 'quality' => 2, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7063, 'price' => 50.175, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         100 => [
             ['goods_id' => 7064, 'price' => 100.2, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7064, 'price' => 100.15, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 7064, 'price' => 100.3, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 7064, 'price' => 100, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7064, 'price' => 100.1, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         200 => [
             ['goods_id' => 7065, 'price' => 200.4, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7065, 'price' => 200.3, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 7065, 'price' => 200.6, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 7065, 'price' => 200, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7065, 'price' => 200.2, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         300 => [
             ['goods_id' => 7066, 'price' => 300.6, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7066, 'price' => 300.45, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 7066, 'price' => 300.9, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 7066, 'price' => 300, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7066, 'price' => 300.3, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         500 => [
             ['goods_id' => 7067, 'price' => 501, 'quality' => 2, 'card_type' => 'chinamobile'],
             ['goods_id' => 7067, 'price' => 500.5, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 7067, 'price' => 501.5, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 7067, 'price' => 500.5, 'quality' => 2, 'card_type' => 'chinatelecom']
         ]
     ],
     'official_sn' => true, 'refill_type' => 'api'];
@@ -2621,14 +2626,31 @@ $shimier_phone = ['name' => 'shimier', 'store_id' => 123,'qualitys' => '1',
 
 $zhongst_mix_phone = ['name' => 'zhongst_mix', 'store_id' => 124, 'qualitys' => '2',
     'amount' => [
-        10 => [['goods_id' => 7084, 'price' => 9.93, 'quality' => 2, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        20 => [['goods_id' => 7085, 'price' => 19.86, 'quality' => 2, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        30 => [['goods_id' => 7086, 'price' => 29.79, 'quality' => 2, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        50 => [['goods_id' => 7087, 'price' => 49.65, 'quality' => 2, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        100 => [['goods_id' => 7088, 'price' => 99.3, 'quality' => 2, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        200 => [['goods_id' => 7089, 'price' => 198.6, 'quality' => 2, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        300 => [['goods_id' => 7090, 'price' => 297.9, 'quality' => 2, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        500 => [['goods_id' => 7091, 'price' => 496.5, 'quality' => 2, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']]
+//        10 => [['goods_id' => 7084, 'price' => 9.96, 'quality' => 2, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
+//        20 => [['goods_id' => 7085, 'price' => 19.92, 'quality' => 2, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
+        30 => [
+            ['goods_id' => 7086, 'price' => 29.88, 'quality' => 2, 'card_type' => 'chinatelecom']
+        ],
+        50 => [
+            ['goods_id' => 7087, 'price' => 49.8, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7087, 'price' => 49.8, 'quality' => 2, 'card_type' => 'chinatelecom']
+        ],
+        100 => [
+            ['goods_id' => 7088, 'price' => 99.6, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7088, 'price' => 99.6, 'quality' => 2, 'card_type' => 'chinatelecom']
+        ],
+        200 => [
+            ['goods_id' => 7089, 'price' => 199.2, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7089, 'price' => 199.2, 'quality' => 2, 'card_type' => 'chinatelecom']
+        ],
+        300 => [
+            ['goods_id' => 7090, 'price' => 298.8, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7090, 'price' => 298.8, 'quality' => 2, 'card_type' => 'chinatelecom']
+        ],
+        500 => [
+            ['goods_id' => 7091, 'price' => 498, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7091, 'price' => 498, 'quality' => 2, 'card_type' => 'chinatelecom']
+        ]
     ],
     'official_sn' => true, 'refill_type' => 'api'];
 
@@ -5094,16 +5116,16 @@ $ruizhi_tax_phone = ['name' => 'ruizhi_tax', 'store_id' => 202, 'qualitys' => '2
 
 $pengxinda_phone = ['name' => 'pengxinda', 'store_id' => 203,'qualitys' => '2',
     'amount' => [
-//        10 => [
-//            ['goods_id' => 7706, 'price' => 10.37, 'quality' => 2, 'card_type' => 'chinamobile'],
-//            ['goods_id' => 7706, 'price' => 10.37, 'quality' => 2, 'card_type' => 'chinaunicom'],
-//            ['goods_id' => 7706, 'price' => 10.37, 'quality' => 2, 'card_type' => 'chinatelecom']
-//        ],
-//        20 => [
-//            ['goods_id' => 7707, 'price' => 20.74, 'quality' => 2, 'card_type' => 'chinamobile'],
-//            ['goods_id' => 7707, 'price' => 20.74, 'quality' => 2, 'card_type' => 'chinaunicom'],
-//            ['goods_id' => 7707, 'price' => 20.74, 'quality' => 2, 'card_type' => 'chinatelecom']
-//        ],
+        10 => [
+            ['goods_id' => 7706, 'price' => 10.8, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7706, 'price' => 10.8, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7706, 'price' => 10.8, 'quality' => 2, 'card_type' => 'chinatelecom']
+        ],
+        20 => [
+            ['goods_id' => 7707, 'price' => 21.6, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7707, 'price' => 21.6, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7707, 'price' => 21.6, 'quality' => 2, 'card_type' => 'chinatelecom']
+        ],
         30 => [
 //            ['goods_id' => 7708, 'price' => 31.11, 'quality' => 2, 'card_type' => 'chinamobile'],
             ['goods_id' => 7708, 'price' => 31.065, 'quality' => 2, 'card_type' => 'chinaunicom'],
@@ -5300,10 +5322,10 @@ $huoshenguoman_phone = ['name' => 'huoshenguoman', 'store_id' => 209, 'qualitys'
 //            ['goods_id' => 7756, 'price' => 27.45, 'quality' => 5, 'card_type' => 'chinaunicom'],
 //            ['goods_id' => 7756, 'price' => 27.6, 'quality' => 5, 'card_type' => 'chinatelecom']
 //        ],
-//        50 => [
+        50 => [
 //            ['goods_id' => 7757, 'price' => 45.75, 'quality' => 5, 'card_type' => 'chinaunicom'],
-//            ['goods_id' => 7757, 'price' => 46, 'quality' => 5, 'card_type' => 'chinatelecom']
-//        ],
+            ['goods_id' => 7757, 'price' => 46, 'quality' => 5, 'card_type' => 'chinatelecom']
+        ],
         100 => [
             ['goods_id' => 7758, 'price' => 91.5, 'quality' => 5, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7758, 'price' => 92, 'quality' => 5, 'card_type' => 'chinatelecom']

+ 125 - 103
data/config/yl/refill.ini.php

@@ -585,75 +585,68 @@ $wantong_phone = ['name' => 'wantong', 'store_id' => 36, 'qualitys' => '4',
 
 $zhongst_phone = ['name' => 'zhongst', 'store_id' => 39, 'qualitys' => '2',
     'amount' => [
-        1 => [
-            ['goods_id' => 7544, 'price' => 1.04, 'quality' => 2, 'card_type' => 'chinaunicom']
-        ],
-        2 => [
-            ['goods_id' => 7545, 'price' => 2.08, 'quality' => 2, 'card_type' => 'chinaunicom']
-        ],
-        3 => [
-            ['goods_id' => 7546, 'price' => 3.12, 'quality' => 2, 'card_type' => 'chinaunicom']
-        ],
-        4 => [
-            ['goods_id' => 7547, 'price' => 4.16, 'quality' => 2, 'card_type' => 'chinaunicom']
-        ],
         5 => [
-            ['goods_id' => 7548, 'price' => 5.2, 'quality' => 2, 'card_type' => 'chinaunicom']
+            ['goods_id' => 7548, 'price' => 5.2, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7548, 'price' => 5.2, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         6 => [
-            ['goods_id' => 7549, 'price' => 6.24, 'quality' => 2, 'card_type' => 'chinaunicom']
+            ['goods_id' => 7549, 'price' => 6.24, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7549, 'price' => 6.24, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         7 => [
-            ['goods_id' => 7550, 'price' => 7.28, 'quality' => 2, 'card_type' => 'chinaunicom']
+            ['goods_id' => 7550, 'price' => 7.28, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7550, 'price' => 7.28, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         8 => [
-            ['goods_id' => 7551, 'price' => 8.32, 'quality' => 2, 'card_type' => 'chinaunicom']
+            ['goods_id' => 7551, 'price' => 8.32, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7551, 'price' => 8.32, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         9 => [
-            ['goods_id' => 7552, 'price' => 9.36, 'quality' => 2, 'card_type' => 'chinaunicom']
+            ['goods_id' => 7552, 'price' => 9.36, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7552, 'price' => 9.36, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
 
         10 => [
-            ['goods_id' => 6464, 'price' => 10.04, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 6464, 'price' => 10.4, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 6464, 'price' => 10.05, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 6464, 'price' => 10.1, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
 
         20 => [
-            ['goods_id' => 6465, 'price' => 20.08, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 6465, 'price' => 20.8, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 6465, 'price' => 20.1, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 6465, 'price' => 20.2, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
 
         30 => [
-            ['goods_id' => 6466, 'price' => 30.09, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 6466, 'price' => 30.18, 'quality' => 2, 'card_type' => 'chinamobile'],
             ['goods_id' => 6466, 'price' => 30.12, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 6466, 'price' => 30.45, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 6466, 'price' => 30.09, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
 
         50 => [
-            ['goods_id' => 6467, 'price' => 50.05, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 6467, 'price' => 50.1, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 6467, 'price' => 50.2, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 6467, 'price' => 50.1, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 6467, 'price' => 50.05, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 6467, 'price' => 50.1, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
 
         100 => [
-            ['goods_id' => 6468, 'price' => 100.1, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 6468, 'price' => 100.2, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 6468, 'price' => 99.9, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 6468, 'price' => 100.2, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 6468, 'price' => 100.1, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 6468, 'price' => 100.1, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         200 => [
-            ['goods_id' => 6469, 'price' => 200.2, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 6469, 'price' => 200.4, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 6469, 'price' => 199.8, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 6469, 'price' => 200.4, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 6469, 'price' => 200.2, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 6469, 'price' => 200.2, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         300 => [
-            ['goods_id' => 6470, 'price' => 300.3, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 6470, 'price' => 300.6, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 6470, 'price' => 299.7, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 6470, 'price' => 300.6, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 6470, 'price' => 300.3, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 6470, 'price' => 300.3, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         500 => [
-            ['goods_id' => 6471, 'price' => 500.5, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 6471, 'price' => 501, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 6471, 'price' => 499.5, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 6471, 'price' => 501, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 6471, 'price' => 500.5, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 6471, 'price' => 500.5, 'quality' => 2, 'card_type' => 'chinatelecom']
         ]
     ],
     'official_sn' => true, 'refill_type' => 'api'];
@@ -1689,14 +1682,22 @@ $yunchonggong_phone = ['name' => 'yunchonggong', 'store_id' => 87,'qualitys' =>
 
 $yunchonggongman_phone = ['name' => 'yunchonggongman', 'store_id' => 88,'qualitys' => '5',
     'amount' => [
-        10 => [['goods_id' => 6805, 'price' => 9.03, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        20 => [['goods_id' => 6806, 'price' => 18.06, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        30 => [['goods_id' => 6807, 'price' => 27.09, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        50 => [['goods_id' => 6808, 'price' => 45.15, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        100 => [['goods_id' => 6809, 'price' => 90.3, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        200 => [['goods_id' => 6810, 'price' => 180.6, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        300 => [['goods_id' => 6811, 'price' => 270.9, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        500 => [['goods_id' => 6812, 'price' => 451.5, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']]
+//        10 => [['goods_id' => 6805, 'price' => 9.03, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
+//        20 => [['goods_id' => 6806, 'price' => 18.06, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
+//        30 => [['goods_id' => 6807, 'price' => 27.09, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
+        50 => [
+            ['goods_id' => 6808, 'price' => 45.9, 'quality' => 5, 'card_type' => 'chinatelecom']
+        ],
+        100 => [
+            ['goods_id' => 6809, 'price' => 91.3, 'quality' => 5, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 6809, 'price' => 91.8, 'quality' => 5, 'card_type' => 'chinatelecom']
+        ],
+        200 => [
+            ['goods_id' => 6810, 'price' => 182.6, 'quality' => 5, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 6810, 'price' => 183.6, 'quality' => 5, 'card_type' => 'chinatelecom']
+        ],
+//        300 => [['goods_id' => 6811, 'price' => 270.9, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
+//        500 => [['goods_id' => 6812, 'price' => 451.5, 'quality' => 5, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']]
     ],
     'official_sn' => true, 'refill_type' => 'api'];
 
@@ -2500,86 +2501,90 @@ $yunchonggong_yd_phone = ['name' => 'yunchonggong_yd', 'store_id' => 120, 'quali
 $guochuang_nation_phone = ['name' => 'guochuang_nation', 'store_id' => 121, 'qualitys' => '2',
     'amount' => [
         1  => [
-            ['goods_id' => 7051, 'price' => 1.25, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7051, 'price' => 1.061, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7051, 'price' => 1.018, 'quality' => 2, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7051, 'price' => 1.031, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         2  => [
-            ['goods_id' => 7052, 'price' => 2.05, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7052, 'price' => 2.122, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7052, 'price' => 2.036, 'quality' => 2, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7052, 'price' => 2.062, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         3  => [
-            ['goods_id' => 7053, 'price' => 3.075, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7053, 'price' => 3.183, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7053, 'price' => 3.054, 'quality' => 2, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7053, 'price' => 3.093, 'quality' => 2, 'card_type' => 'chinatelecom']
-
         ],
         4  => [
-            ['goods_id' => 7054, 'price' => 4.1, 'quality' => 2, 'card_type' => 'chinaunicom']
+            ['goods_id' => 7054, 'price' => 4.244, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7054, 'price' => 4.072, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7054, 'price' => 4.204, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         5  => [
             ['goods_id' => 7055, 'price' => 5.305, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7055, 'price' => 5.125, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7055, 'price' => 5.09, 'quality' => 2, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7055, 'price' => 5.155, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         6  => [
             ['goods_id' => 7056, 'price' => 6.306, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7056, 'price' => 6.15, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7056, 'price' => 6.108, 'quality' => 2, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7056, 'price' => 6.186, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         7  => [
             ['goods_id' => 7057, 'price' => 7.308, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7057, 'price' => 7.175, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7057, 'price' => 7.126, 'quality' => 2, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7057, 'price' => 7.217, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         8  => [
             ['goods_id' => 7058, 'price' => 8.308, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7058, 'price' => 8.2, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7058, 'price' => 8.144, 'quality' => 2, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7058, 'price' => 8.248, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         9  => [
             ['goods_id' => 7059, 'price' => 9.3105, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7059, 'price' => 9.225, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7059, 'price' => 9.162, 'quality' => 2, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7059, 'price' => 9.279, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
 
         10 => [
-            ['goods_id' => 7060, 'price' => 10.38, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7060, 'price' => 10.05, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 7060, 'price' => 10.23, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 7060, 'price' => 10.31, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7060, 'price' => 10.04, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7060, 'price' => 10.12, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         20 => [
-            ['goods_id' => 7061, 'price' => 20.62, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7061, 'price' => 20.64, 'quality' => 2, 'card_type' => 'chinamobile'],
             ['goods_id' => 7061, 'price' => 20.08, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 7061, 'price' => 20.46, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 7061, 'price' => 20.17, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         30 => [
-            ['goods_id' => 7062, 'price' => 30.27, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7062, 'price' => 30.045, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 7062, 'price' => 30.24, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 7062, 'price' => 30.18, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7062, 'price' => 30.09, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7062, 'price' => 30.18, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         50 => [
             ['goods_id' => 7063, 'price' => 50.1, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7063, 'price' => 50.075, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7063, 'price' => 50, 'quality' => 2, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7063, 'price' => 50.175, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         100 => [
             ['goods_id' => 7064, 'price' => 100.2, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7064, 'price' => 100.15, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 7064, 'price' => 100.3, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 7064, 'price' => 100, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7064, 'price' => 100.1, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         200 => [
             ['goods_id' => 7065, 'price' => 200.4, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7065, 'price' => 200.3, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 7065, 'price' => 200.6, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 7065, 'price' => 200, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7065, 'price' => 200.2, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         300 => [
             ['goods_id' => 7066, 'price' => 300.6, 'quality' => 2, 'card_type' => 'chinamobile'],
-            ['goods_id' => 7066, 'price' => 300.45, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 7066, 'price' => 300.9, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 7066, 'price' => 300, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7066, 'price' => 300.3, 'quality' => 2, 'card_type' => 'chinatelecom']
         ],
         500 => [
             ['goods_id' => 7067, 'price' => 501, 'quality' => 2, 'card_type' => 'chinamobile'],
             ['goods_id' => 7067, 'price' => 500.5, 'quality' => 2, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 7067, 'price' => 501.5, 'quality' => 2, 'card_type' => 'chinatelecom']
+            ['goods_id' => 7067, 'price' => 500.5, 'quality' => 2, 'card_type' => 'chinatelecom']
         ]
     ],
     'official_sn' => true, 'refill_type' => 'api'];
@@ -2621,14 +2626,31 @@ $shimier_phone = ['name' => 'shimier', 'store_id' => 123,'qualitys' => '1',
 
 $zhongst_mix_phone = ['name' => 'zhongst_mix', 'store_id' => 124, 'qualitys' => '2',
     'amount' => [
-        10 => [['goods_id' => 7084, 'price' => 9.93, 'quality' => 2, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        20 => [['goods_id' => 7085, 'price' => 19.86, 'quality' => 2, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        30 => [['goods_id' => 7086, 'price' => 29.79, 'quality' => 2, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        50 => [['goods_id' => 7087, 'price' => 49.65, 'quality' => 2, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        100 => [['goods_id' => 7088, 'price' => 99.3, 'quality' => 2, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        200 => [['goods_id' => 7089, 'price' => 198.6, 'quality' => 2, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        300 => [['goods_id' => 7090, 'price' => 297.9, 'quality' => 2, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
-        500 => [['goods_id' => 7091, 'price' => 496.5, 'quality' => 2, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']]
+//        10 => [['goods_id' => 7084, 'price' => 9.96, 'quality' => 2, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
+//        20 => [['goods_id' => 7085, 'price' => 19.92, 'quality' => 2, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
+        30 => [
+            ['goods_id' => 7086, 'price' => 29.88, 'quality' => 2, 'card_type' => 'chinatelecom']
+        ],
+        50 => [
+            ['goods_id' => 7087, 'price' => 49.8, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7087, 'price' => 49.8, 'quality' => 2, 'card_type' => 'chinatelecom']
+        ],
+        100 => [
+            ['goods_id' => 7088, 'price' => 99.6, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7088, 'price' => 99.6, 'quality' => 2, 'card_type' => 'chinatelecom']
+        ],
+        200 => [
+            ['goods_id' => 7089, 'price' => 199.2, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7089, 'price' => 199.2, 'quality' => 2, 'card_type' => 'chinatelecom']
+        ],
+        300 => [
+            ['goods_id' => 7090, 'price' => 298.8, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7090, 'price' => 298.8, 'quality' => 2, 'card_type' => 'chinatelecom']
+        ],
+        500 => [
+            ['goods_id' => 7091, 'price' => 498, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7091, 'price' => 498, 'quality' => 2, 'card_type' => 'chinatelecom']
+        ]
     ],
     'official_sn' => true, 'refill_type' => 'api'];
 
@@ -4006,22 +4028,22 @@ $yamiao_normal_phone = ['name' => 'yamiao_normal', 'store_id' => 172, 'qualitys'
 //        10 => [['goods_id' => 7463, 'price' => 9.55, 'quality' => 1, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
 //        20 => [['goods_id' => 7464, 'price' => 19.1, 'quality' => 1, 'card_type' => 'chinamobile,chinaunicom,chinatelecom']],
         30 => [
-            ['goods_id' => 7465, 'price' => 28.71, 'quality' => 1, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7465, 'price' => 28.8, 'quality' => 1, 'card_type' => 'chinamobile'],
             ['goods_id' => 7465, 'price' => 28.65, 'quality' => 1, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7465, 'price' => 28.38, 'quality' => 1, 'card_type' => 'chinatelecom'],
         ],
         50 => [
-            ['goods_id' => 7466, 'price' => 47.85, 'quality' => 1, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7466, 'price' => 48, 'quality' => 1, 'card_type' => 'chinamobile'],
             ['goods_id' => 7466, 'price' => 47.75, 'quality' => 1, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7466, 'price' => 47.3, 'quality' => 1, 'card_type' => 'chinatelecom']
         ],
         100 => [
-            ['goods_id' => 7467, 'price' => 95.7, 'quality' => 1, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7467, 'price' => 96, 'quality' => 1, 'card_type' => 'chinamobile'],
             ['goods_id' => 7467, 'price' => 95.5, 'quality' => 1, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7467, 'price' => 94.6, 'quality' => 1, 'card_type' => 'chinatelecom']
         ],
         200 => [
-            ['goods_id' => 7468, 'price' => 191.4, 'quality' => 1, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7468, 'price' => 192, 'quality' => 1, 'card_type' => 'chinamobile'],
             ['goods_id' => 7468, 'price' => 191, 'quality' => 1, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7468, 'price' => 189.2, 'quality' => 1, 'card_type' => 'chinatelecom']
         ],
@@ -5096,16 +5118,16 @@ $ruizhi_tax_phone = ['name' => 'ruizhi_tax', 'store_id' => 202, 'qualitys' => '2
 
 $pengxinda_phone = ['name' => 'pengxinda', 'store_id' => 203,'qualitys' => '2',
     'amount' => [
-//        10 => [
-//            ['goods_id' => 7706, 'price' => 10.37, 'quality' => 2, 'card_type' => 'chinamobile'],
-//            ['goods_id' => 7706, 'price' => 10.37, 'quality' => 2, 'card_type' => 'chinaunicom'],
-//            ['goods_id' => 7706, 'price' => 10.37, 'quality' => 2, 'card_type' => 'chinatelecom']
-//        ],
-//        20 => [
-//            ['goods_id' => 7707, 'price' => 20.74, 'quality' => 2, 'card_type' => 'chinamobile'],
-//            ['goods_id' => 7707, 'price' => 20.74, 'quality' => 2, 'card_type' => 'chinaunicom'],
-//            ['goods_id' => 7707, 'price' => 20.74, 'quality' => 2, 'card_type' => 'chinatelecom']
-//        ],
+        10 => [
+            ['goods_id' => 7706, 'price' => 10.8, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7706, 'price' => 10.8, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7706, 'price' => 10.8, 'quality' => 2, 'card_type' => 'chinatelecom']
+        ],
+        20 => [
+            ['goods_id' => 7707, 'price' => 21.6, 'quality' => 2, 'card_type' => 'chinamobile'],
+            ['goods_id' => 7707, 'price' => 21.6, 'quality' => 2, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 7707, 'price' => 21.6, 'quality' => 2, 'card_type' => 'chinatelecom']
+        ],
         30 => [
 //            ['goods_id' => 7708, 'price' => 31.11, 'quality' => 2, 'card_type' => 'chinamobile'],
             ['goods_id' => 7708, 'price' => 31.065, 'quality' => 2, 'card_type' => 'chinaunicom'],
@@ -5302,10 +5324,10 @@ $huoshenguoman_phone = ['name' => 'huoshenguoman', 'store_id' => 209, 'qualitys'
 //            ['goods_id' => 7756, 'price' => 27.45, 'quality' => 5, 'card_type' => 'chinaunicom'],
 //            ['goods_id' => 7756, 'price' => 27.6, 'quality' => 5, 'card_type' => 'chinatelecom']
 //        ],
-//        50 => [
+        50 => [
 //            ['goods_id' => 7757, 'price' => 45.75, 'quality' => 5, 'card_type' => 'chinaunicom'],
-//            ['goods_id' => 7757, 'price' => 46, 'quality' => 5, 'card_type' => 'chinatelecom']
-//        ],
+            ['goods_id' => 7757, 'price' => 46, 'quality' => 5, 'card_type' => 'chinatelecom']
+        ],
         100 => [
             ['goods_id' => 7758, 'price' => 91.5, 'quality' => 5, 'card_type' => 'chinaunicom'],
             ['goods_id' => 7758, 'price' => 92, 'quality' => 5, 'card_type' => 'chinatelecom']
@@ -5374,7 +5396,7 @@ $phone_providers = [
 //    ['name' => 'yuanmai', 'cfg' => $yuanmai_phone],
 //    ['name' => 'langke', 'cfg' => $langke_phone],
 //    ['name' => 'yunlingds', 'cfg' => $yunlingds_phone],
-//    ['name' => 'lingzhman', 'cfg' => $lingzhman_phone],
+    ['name' => 'lingzhman', 'cfg' => $lingzhman_phone],
 //    ['name' => 'qijutang', 'cfg' => $qijutang_phone],
     ['name' => 'lingzhman48', 'cfg' => $lingzhman48_phone],
 //    ['name' => 'cangbu', 'cfg' => $cangbu_phone],
@@ -5385,7 +5407,7 @@ $phone_providers = [
 //    ['name' => 'hongxudayz', 'cfg' => $hongxudayz_phone],
 //    ['name' => 'hongxudagy', 'cfg' => $hongxudagy_phone],
     ['name' => 'yunchonggong', 'cfg' => $yunchonggong_phone],
-//    ['name' => 'yunchonggongman', 'cfg' => $yunchonggongman_phone],
+    ['name' => 'yunchonggongman', 'cfg' => $yunchonggongman_phone],
 //    ['name' => 'hongxudayz996', 'cfg' => $hongxudayz996_phone],
 //    ['name' => 'hongxudagy996', 'cfg' => $hongxudagy996_phone],
 //    ['name' => 'bingdht', 'cfg' => $bingdht_phone],
@@ -5419,7 +5441,7 @@ $phone_providers = [
     ['name' => 'guochuang_nation', 'cfg' => $guochuang_nation_phone],
 //    ['name' => 'tianyanman', 'cfg' => $tianyanman_phone],
 //    ['name' => 'shimier', 'cfg' => $shimier_phone],
-//    ['name' => 'zhongst_mix', 'cfg' => $zhongst_mix_phone],
+    ['name' => 'zhongst_mix', 'cfg' => $zhongst_mix_phone],
     ['name' => 'jinfeng', 'cfg' => $jinfeng_phone],
     ['name' => 'hangtong', 'cfg' => $hangtong_phone],
 //    ['name' => 'dashang', 'cfg' => $dashang_phone],
@@ -5460,7 +5482,7 @@ $phone_providers = [
     ['name' => 'ruixunda', 'cfg' => $ruixunda_phone],
 //    ['name' => 'dashang_kami', 'cfg' => $dashang_kami_phone],
     ['name' => 'yamiao_high', 'cfg' => $yamiao_high_phone],
-//    ['name' => 'yamiao_normal', 'cfg' => $yamiao_normal_phone],
+    ['name' => 'yamiao_normal', 'cfg' => $yamiao_normal_phone],
     ['name' => 'cangxin', 'cfg' => $cangxin_phone],
     ['name' => 'cangxin_high', 'cfg' => $cangxin_high_phone],
 //    ['name' => 'jiyemei', 'cfg' => $jiyemei_phone],
@@ -5489,10 +5511,10 @@ $phone_providers = [
 //    ['name' => 'hangtongyj', 'cfg' => $hangtongyj_phone],
     ['name' => 'ruixundaman', 'cfg' => $ruixundaman_phone],
 //    ['name' => 'ruizhi_tax', 'cfg' => $ruizhi_tax_phone],
-//    ['name' => 'pengxinda', 'cfg' => $pengxinda_phone],
+    ['name' => 'pengxinda', 'cfg' => $pengxinda_phone],
     ['name' => 'huazhong', 'cfg' => $huazhong_phone],
     ['name' => 'yamiaoman', 'cfg' => $yamiaoman_phone],
-//    ['name' => 'kailinyu', 'cfg' => $kailinyu_phone],
+    ['name' => 'kailinyu', 'cfg' => $kailinyu_phone],
 //    ['name' => 'kuaikuaifs', 'cfg' => $kuaikuaifs_phone],
     ['name' => 'youheman', 'cfg' => $youheman_phone],
     ['name' => 'huoshenguoman', 'cfg' => $huoshenguoman_phone],

+ 13 - 4
docker/compose/xyz/cli/docker-compose.yml

@@ -23,8 +23,17 @@ services:
       - ../conf/php/php-swoole.ini:/usr/local/etc/php/php.ini
       - /nfs/upload:/var/www/html/data/upload
       - /mnt/shoplog:/var/www/html/data/log
+      - ../conf/php/vender-init:/usr/local/bin/vender-init
     container_name: "panda-swoole"
-    deploy:
-      resources:
-        limits:
-          cpus: '8'
+
+  vender:
+    image: php-zts:7.3.18
+    volumes:
+      - ../../../../:/var/www/html
+      - ../conf/etc/localtime:/etc/localtime:ro
+      - ../conf/php/php.ini:/usr/local/etc/php/php.ini
+      - /nfs/upload:/var/www/html/data/upload
+      - /mnt/shoplog:/var/www/html/data/log
+      - ../conf/php/vender-init:/usr/local/bin/vender-init
+    container_name: "panda-vender"
+    command: ['vender-init']

+ 3 - 0
docker/compose/xyz/conf/php/vender-init

@@ -0,0 +1,3 @@
+#!/bin/sh
+cd /var/www/html
+php ./composer.phar require phpoffice/phpspreadsheet

+ 0 - 1
h5py

@@ -1 +0,0 @@
-Subproject commit 514deb9838453e53442bb9451ce93c3b26c8fc01

+ 4 - 0
helper/bank/bcm.php

@@ -24,6 +24,10 @@ class bcm implements IBank
 
     public function match($line) : bool
     {
+        if(count(self::$format) != count($line)) {
+            return false;
+        }
+
         if($this->mKnown == false)
         {
             if($line[0] == '查询账号:' && $line[2] == '户  名:') {

+ 4 - 0
helper/bank/ccb.php

@@ -44,6 +44,10 @@ class ccb implements IBank
 
     public function match($line) : bool
     {
+        if(count(self::$format) != count($line)) {
+            return false;
+        }
+
         if($this->mKnown != 2)
         {
             if($line[0] == '账  号' && $line[2] == '账户名称') {

+ 4 - 0
helper/bank/ccbb.php

@@ -58,6 +58,10 @@ class ccbb implements IBank
 
     public function match($line) : bool
     {
+        if(count(self::$format) != count($line)) {
+            return false;
+        }
+
         $diff = array_diff(self::$format,$line);
         return empty($diff);
     }

+ 5 - 1
helper/bank/cmbc.php

@@ -26,6 +26,10 @@ class cmbc implements IBank
 
     public function match($line): bool
     {
+        if(count(self::$format) != count($line)) {
+            return false;
+        }
+
         if ($this->mKnown != 2)
         {
             if ($line[0] == '标题' && $line[3] == '账号名称') {
@@ -92,7 +96,7 @@ class cmbc implements IBank
     public function convert($line): array
     {
         $money_type = $line[2];
-        $trade_time = strtotime($line[3] . ' ' . $line[4]);
+        $trade_time = strtotime($line[3] . ' ' . sprintf("%06d",intval($line[4])));
         if($trade_time == false) {
             return [];
         }

+ 122 - 0
helper/bank/cmbc16.php

@@ -0,0 +1,122 @@
+<?php
+
+
+namespace bank;
+
+//招商银行
+class cmbc16 implements IBank
+{
+    private $mKnown;
+    private $mName;
+    private $mNo;
+    private $mBank;
+
+    public function __construct()
+    {
+        $this->clear();
+    }
+
+    public function clear()
+    {
+        $this->mKnown = 0;
+        $this->mName = '';
+        $this->mNo = '';
+        $this->mBank = '';
+    }
+
+    public function match($line): bool
+    {
+        if(count(self::$format) != count($line)) {
+            return false;
+        }
+
+        if ($this->mKnown != 2)
+        {
+            if ($line[0] == '标题' && $line[3] == '账号名称') {
+                $this->mName = $line[4];
+                $this->mKnown += 1;
+            }
+            elseif ($line[6] == '银行账号')
+            {
+                $this->mNo = $line[7];
+                if($this->mNo == '110946610810701') {
+                    $this->mBank = '招商银行北苑路支行';
+                }
+                elseif ($this->mNo == '110945155010101') {
+                    $this->mBank = '招商银行北苑路支行';
+                }
+
+                $this->mKnown += 1;
+            }
+        }
+
+        $diff = array_diff(self::$format, $line);
+        return empty($diff);
+    }
+
+    static $format = [
+        0 => '账号',
+        1 => '账号名称',
+        2 => '币种',
+        3 => '交易日',
+        4 => '交易时间',
+        5 => '起息日',
+        6 => '交易类型',
+        7 => '借方金额',
+        8 => '贷方金额',
+        9 => '余额',
+        10 => '摘要',
+        11 => '流水号',
+        12 => '收(付)方名称',
+        13 => '收(付)方账号',
+        14 => '收(付)方开户行名',
+        15 => ''
+    ];
+
+    public function convert($line): array
+    {
+        $money_type = $line[2];
+        $trade_time = strtotime($line[3] . ' ' . sprintf("%06d",intval($line[4])));
+        if($trade_time == false) {
+            return [];
+        }
+
+        $out = mb_str_replace(',', '', $line[7]);
+        $in = mb_str_replace(',', '', $line[8]);
+        $left = mb_str_replace(',', '', $line[9]);
+        $subject = $line[10];
+        $trade_no = $line[11];
+
+        $other_name = $line[12];
+        $other_no = $line[13];
+        $other_bank = $line[14];
+
+        $remark = '';
+        $proof_no = '';
+        $post_date = '';
+        $proof_type = '';
+
+        $result = [
+            'trade_time' => $trade_time,
+            'out_amount' => $out,
+            'in_amount' => $in,
+            'left_amount' => $left,
+            'money_type' => $money_type,
+            'other_name' => $other_name,
+            'other_no' => $other_no,
+            'other_bank' => $other_bank,
+            'post_date' => $post_date,
+            'rsubject' => $subject,
+            'remark' => $remark,
+            'trade_no' => $trade_no,
+            'proof_type' => $proof_type,
+            'proof_no' => $proof_no,
+            'self_name' => $this->mName,
+            'self_no' => $this->mNo,
+            'self_bank' => $this->mBank,
+            'service_charge' => 0.0
+        ];
+
+        return $result;
+    }
+}

+ 135 - 0
helper/bank/cmbc28.php

@@ -0,0 +1,135 @@
+<?php
+
+
+namespace bank;
+
+//招商银行
+class cmbc28 implements IBank
+{
+    private $mKnown;
+    private $mName;
+    private $mNo;
+    private $mBank;
+
+    public function __construct()
+    {
+        $this->clear();
+    }
+
+    public function clear()
+    {
+        $this->mKnown = 0;
+        $this->mName = '';
+        $this->mNo = '';
+        $this->mBank = '';
+    }
+
+    public function match($line): bool
+    {
+        if(count(self::$format) != count($line)) {
+            return false;
+        }
+
+        if ($this->mKnown != 2)
+        {
+            if ($line[0] == '标题' && $line[3] == '账号名称') {
+                $this->mName = $line[4];
+                $this->mKnown += 1;
+            }
+            elseif ($line[6] == '银行账号')
+            {
+                $this->mNo = $line[7];
+                if($this->mNo == '110946610810701') {
+                    $this->mBank = '招商银行北苑路支行';
+                }
+                elseif ($this->mNo == '110945155010101') {
+                    $this->mBank = '招商银行北苑路支行';
+                }
+
+                $this->mKnown += 1;
+            }
+        }
+
+        $diff = array_diff(self::$format, $line);
+        return empty($diff);
+    }
+
+    static $format = [
+        0 => '账号',
+        1 => '账号名称',
+        2 => '币种',
+        3 => '交易日',
+        4 => '交易时间',
+        5 => '起息日',
+        6 => '交易类型',
+        7 => '借方金额',
+        8 => '贷方金额',
+        9 => '余额',
+        10 => '用途',
+        11 => '流水号',
+        12 => '收(付)方名称',
+        13 => '收(付)方账号',
+        14 => '收(付)方开户行行号',
+        15 => '收(付)方开户行名',
+        16 => '收(付)方开户行地址',
+        17 => '母(子)公司账号分行名',
+        18 => '母(子)公司账号',
+        19 => '母(子)公司名称',
+        20 => '信息标志',
+        21 => '有否附件信息',
+        22 => '冲账标志',
+        23 => '扩展摘要',
+        24 => '交易分析码',
+        25 => '票据号',
+        26 => '商务支付订单号',
+        27 => '内部编号',
+        28 => '公司一卡通号'
+    ];
+
+    public function convert($line): array
+    {
+        $money_type = $line[2];
+        $trade_time = strtotime($line[3] . ' ' . sprintf("%06d",intval($line[4])));
+        if($trade_time == false) {
+            return [];
+        }
+
+        $out = mb_str_replace(',', '', $line[7]);
+        $in = mb_str_replace(',', '', $line[8]);
+        $left = mb_str_replace(',', '', $line[9]);
+        $subject = $line[10];
+        $trade_no = $line[11];
+
+        $other_name = $line[12];
+        $other_no = $line[13];
+        $other_bank = $line[15];
+
+        $remark = '';
+        $proof_no = '';
+        $post_date = '';
+        $proof_type = '';
+
+        $result = [
+            'trade_time' => $trade_time,
+            'out_amount' => $out,
+            'in_amount' => $in,
+            'left_amount' => $left,
+            'money_type' => $money_type,
+            'other_name' => $other_name,
+            'other_no' => $other_no,
+            'other_bank' => $other_bank,
+            'post_date' => $post_date,
+            'rsubject' => $subject,
+            'remark' => $remark,
+            'trade_no' => $trade_no,
+            'proof_type' => $proof_type,
+            'proof_no' => $proof_no,
+            'self_name' => $this->mName,
+            'self_no' => $this->mNo,
+            'self_bank' => $this->mBank,
+            'service_charge' => 0.0
+        ];
+
+        return $result;
+    }
+}

+ 5 - 1
helper/bank/cmbcex.php

@@ -26,6 +26,10 @@ class cmbcex implements IBank
 
     public function match($line): bool
     {
+        if(count(self::$format) != count($line)) {
+            return false;
+        }
+
         if ($this->mKnown != 2)
         {
             if ($line[0] == '标题' && $line[3] == '账号名称') {
@@ -91,7 +95,7 @@ class cmbcex implements IBank
     public function convert($line): array
     {
         $money_type = $line[2];
-        $trade_time = strtotime($line[3] . ' ' . $line[4]);
+        $trade_time = strtotime($line[3] . ' ' . sprintf("%06d",intval($line[4])));
         if($trade_time == false) {
             return [];
         }

+ 3 - 1
helper/bank/converter.php

@@ -9,6 +9,8 @@ require_once(__DIR__ . '/ccbb.php');
 require_once(__DIR__ . '/spdb.php');
 require_once(__DIR__ . '/cmbc.php');
 require_once(__DIR__ . '/cmbcex.php');
+require_once(__DIR__ . '/cmbc16.php');
+require_once(__DIR__ . '/cmbc28.php');
 require_once(__DIR__ . '/hfb.php');
 
 function mb_str_replace($search, $replace, $subject)
@@ -44,7 +46,7 @@ class converter
     public function __construct()
     {
         $this->mState = 0;
-        $this->mConveters = [new ccb(), new ccbb(), new bcm(), new spdb(), new cmbc(), new cmbcex(), new hfb()];
+        $this->mConveters = [new ccb(), new ccbb(), new bcm(), new spdb(), new cmbc(), new cmbcex(), new cmbc16(), new cmbc28(), new hfb()];
         $this->clear();
     }
 

+ 26 - 25
helper/bank/execl_loader.php

@@ -5,29 +5,10 @@ namespace bank;
 require_once(BASE_ROOT_PATH . '/vendor/autoload.php');
 
 use PhpOffice;
-//use PhpOffice\PhpSpreadsheet\Cell\DataType;
-//use PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder;
+use PhpOffice\PhpSpreadsheet\Cell\DataType;
+use PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder;
 use Log;
 
-//class CustomValueBinder extends AdvancedValueBinder
-//{
-//    public static function dataTypeForValue($value): string
-//    { //只重写dataTypeForValue方法,去掉一些不必要的判断
-//        if (is_null($value)) {
-//            return DataType::TYPE_NULL;
-//        } elseif ($value instanceof PhpOffice\PhpSpreadsheet\RichText\RichText) {
-//            return DataType::TYPE_INLINE;
-//        } elseif (is_string($value) && $value[0] === '=' && strlen($value) > 1) {
-//            return DataType::TYPE_FORMULA;
-//        } elseif (is_bool($value)) {
-//            return DataType::TYPE_BOOL;
-//        } elseif (is_float($value) || is_int($value)) {
-//            return DataType::TYPE_NUMERIC;
-//        }
-//        return DataType::TYPE_STRING;
-//    }
-//}
-
 function file_generator($path)
 {
     if (!file_exists($path)) {
@@ -56,6 +37,26 @@ function file_generator($path)
 }
 
 
+class CustomValueBinder extends AdvancedValueBinder
+{
+    public static function dataTypeForValue($value): string
+    { //只重写dataTypeForValue方法,去掉一些不必要的判断
+        if (is_null($value)) {
+            return DataType::TYPE_NULL;
+        } elseif ($value instanceof PhpOffice\PhpSpreadsheet\RichText\RichText) {
+            return DataType::TYPE_INLINE;
+        } elseif (is_string($value) && $value[0] === '=' && strlen($value) > 1) {
+            return DataType::TYPE_FORMULA;
+        } elseif (is_bool($value)) {
+            return DataType::TYPE_BOOL;
+        } elseif (is_float($value) || is_int($value)) {
+            return DataType::TYPE_NUMERIC;
+        }
+        return DataType::TYPE_STRING;
+    }
+}
+
+
 class execl_loader
 {
     public function load_dirs($dirs)
@@ -69,7 +70,7 @@ class execl_loader
     {
         $files = file_generator($dir);
         foreach ($files as $file) {
-            Log::record("$file",Log::DEBUG);
+            Log::record("$file",Log::WARING);
             $this->load_file($file);
         }
     }
@@ -100,7 +101,7 @@ class execl_loader
                     foreach ($cellIterator as $cell)
                     {
                         if ($cell !== null) {
-                            $item[] = trim($cell->getFormattedValue());
+                            $item[] = trim($cell->getValue());
                         }
                     }
 
@@ -126,11 +127,11 @@ class execl_loader
             elseif($key === 'line')
             {
                 $line = $convert->convert($val);
-                if(!empty($line)) {
+                if(!empty($line) && !empty($line['trade_no'])) {
                     $inserter($line);
                 }
                 else {
-                    Log::record(json_encode($val),Log::DEBUG);
+                    Log::record(json_encode($val,JSON_UNESCAPED_UNICODE),Log::WARING);
                 }
             }
             else {

二進制
helper/refill/api/xyz/dongyefs/20220417黑龙江移动调价函.png


+ 1 - 1
helper/refill/api/xyz/dongyefs/config.php

@@ -79,7 +79,7 @@ class config
         "4-10-13" => 9.89, "4-20-13" => 19.78, "4-30-13" => 29.67, "4-50-13" => 49.45, "4-100-13" => 98.9, "4-200-13" => 197.8, "4-300-13" => 296.7, "4-500-13" => 494.5,//福建 13
         "4-10-19" => 9.95, "4-20-19" => 19.9, "4-30-19" => 29.85, "4-50-19" => 49.75, "4-100-19" => 99.5, "4-200-19" => 199, "4-300-19" => 298.5, "4-500-19" => 497.5,//广东 19
         "4-10-29" => 9.8, "4-20-29" => 19.6, "4-30-29" => 29.4, "4-50-29" => 49, "4-100-29" => 98, "4-200-29" => 196, "4-300-29" => 294, "4-500-29" => 490,//青海 29
-        "4-10-8" => 10, "4-20-8" => 20, "4-30-8" => 30, "4-50-8" => 50, "4-100-8" => 100, "4-200-8" => 200, "4-300-8" => 300, "4-500-8" => 500,//黑龙江 8
+        "4-10-8" => 9.97, "4-20-8" => 19.94, "4-30-8" => 29.91, "4-50-8" => 49.85, "4-100-8" => 99.7, "4-200-8" => 199.4, "4-300-8" => 299.1, "4-500-8" => 498.5,//黑龙江 8
         "4-50-5" => 50.1, "4-100-5" => 100.2, "4-200-5" => 200.4, "4-300-5" => 300.6, "4-500-5" => 501,//内蒙古 5
 
         //电信

二進制
helper/refill/api/xyz/guochuang/20220412青海黑龙江移动调价函.png


二進制
helper/refill/api/xyz/guochuang/20220413广东移动调价函.png


二進制
helper/refill/api/xyz/guochuang/20220415青海黑龙江广东移动调价函.jpg


二進制
helper/refill/api/xyz/guochuang/20220416江西联通调价函.png


二進制
helper/refill/api/xyz/guochuang/20220417黑龙江移动调价函.png


+ 4 - 4
helper/refill/api/xyz/guochuang/config.php

@@ -66,13 +66,13 @@ class config
         "4-10-2" => 10.15, "4-20-2" => 19.92, "4-30-2" => 29.88, "4-50-2" => 49.8, "4-100-2" => 99.6, "4-200-2" => 199.2, "4-300-2" => 298.8, "4-500-2" => 498,//天津 2
         "4-10-6" => 9.75, "4-20-6" => 19.5, "4-30-6" => 29.25, "4-50-6" => 48.75, "4-100-6" => 97.5, "4-200-6" => 195, "4-300-6" => 292.5, "4-500-6" => 487.5,//辽宁 6
         "4-10-9" => 9.94, "4-20-9" => 19.88, "4-30-9" => 29.82, "4-50-9" => 49.7, "4-100-9" => 99.4,//上海 9
-        "4-10-8" => 10, "4-20-8" => 20, "4-30-8" => 30, "4-50-8" => 50, "4-100-8" => 100, "4-200-8" => 200, "4-300-8" => 300, "4-500-8" => 500 ,//黑龙江 8
-        "4-10-29" => 9.78, "4-20-29" => 19.56, "4-30-29" => 29.34, "4-50-29" => 48.9, "4-100-29" => 97.8, "4-200-29" => 195.6, "4-300-29" => 293.4, "4-500-29" => 489,//青海 29
+        "4-10-8" => 9.973, "4-20-8" => 19.946, "4-30-8" => 29.919, "4-50-8" => 49.865, "4-100-8" => 99.73, "4-200-8" => 199.46, "4-300-8" => 299.19, "4-500-8" => 498.65 ,//黑龙江 8
+        "4-10-29" => 9.76, "4-20-29" => 19.52, "4-30-29" => 29.28, "4-50-29" => 48.8, "4-100-29" => 97.6, "4-200-29" => 195.2, "4-300-29" => 292.8, "4-500-29" => 488,//青海 29
         "4-10-28" => 9.985, "4-20-28" => 19.97, "4-30-28" => 29.955, "4-50-28" => 49.925, "4-100-28" => 99.85, "4-200-28" => 199.7, "4-300-28" => 299.55, "4-500-28" => 499.25,//甘肃 28
         "4-10-13" => 10.22, "4-20-13" => 19.94, "4-30-13" => 29.91, "4-50-13" => 49.85, "4-100-13" => 99.7, "4-200-13" => 199.4, "4-300-13" => 300.9, "4-500-13" => 501.5,//福建 13
         "4-10-5" => 9.99, "4-20-5" => 19.98, "4-30-5" => 29.97, "4-50-5" => 49.95, "4-100-5" => 99.9, "4-200-5" => 200.4, "4-300-5" => 300.6, "4-500-5" => 501,//内蒙古 5
         "4-30-18" => 29.835, "4-50-18" => 49.725, "4-100-18" => 99.45, "4-200-18" => 198.3,//湖南 18
-        "4-10-19" => 9.97, "4-20-19" => 19.94, "4-30-19" => 29.895, "4-50-19" => 49.825, "4-100-19" => 99.65, "4-200-19" => 199.3, "4-300-19" => 298.95, "4-500-19" => 498.25,//广东 19
+        "4-10-19" => 9.97, "4-20-19" => 19.94, "4-30-19" => 29.865, "4-50-19" => 49.775, "4-100-19" => 99.55, "4-200-19" => 199.1, "4-300-19" => 298.65, "4-500-19" => 497.75,//广东 19
         "4-10-7" => 9.82, "4-20-7" => 19.64, "4-30-7" => 29.46, "4-50-7" => 49.1, "4-100-7" => 98.2, "4-200-7" => 196.4, "4-300-7" => 294.6, "4-500-7" => 491,//吉林 7
         "4-10-1" => 10.31, "4-20-1" => 20.32, "4-30-1" => 30.33, "4-50-1" => 50.35, "4-100-1" => 100.4, "4-200-1" => 200.3, "4-300-1" => 300.45, "4-500-1" => 500.75,//北京 1
         "4-10-22" => 10.015, "4-20-22" => 20.03, "4-30-22" => 30.045, "4-50-22" => 50.075, "4-100-22" => 100.15, "4-200-22" => 200.3, "4-300-22" => 300.45, "4-500-22" => 500.75,//重庆 22
@@ -87,7 +87,7 @@ class config
         "5-10-19" => 10.04, "5-20-19" => 20.08, "5-30-19" => 29.97, "5-50-19" => 49.95, "5-100-19" => 99.9, "5-200-19" => 199.8, "5-300-19" => 299.7, "5-500-19" => 499.5,//广东 19
         "5-10-1" => 9.99, "5-20-1" => 19.98, "5-30-1" => 29.97, "5-50-1" => 49.95, "5-100-1" => 99.9, "5-200-1" => 199.8, "5-300-1" => 299.7, "5-500-1" => 499.5,//北京 1
         "5-10-22" => 10.04, "5-20-22" => 20.08, "5-30-22" => 30.12, "5-50-22" => 50.2, "5-100-22" => 100.4, "5-200-22" => 200.8, "5-300-22" => 301.2, "5-500-22" => 502,//重庆 22
-        "5-10-14" => 10.03, "5-20-14" => 20.06, "5-30-14" => 30.06, "5-50-14" => 50.1, "5-100-14" => 100.2, "5-200-14" => 200.4, "5-300-14" => 300.6, "5-500-14" => 501,//江西 14
+        "5-10-14" => 10.04, "5-20-14" => 20.08, "5-30-14" => 30.06, "5-50-14" => 50.1, "5-100-14" => 100.2, "5-200-14" => 200.4, "5-300-14" => 300.6, "5-500-14" => 501,//江西 14
         "5-20-23" => 20.08, "5-30-23" => 30.12, "5-50-23" => 50.2, "5-100-23" => 100.4, "5-200-23" => 200.8, "5-300-23" => 301.2, "5-500-23" => 502,//四川 23
         //电信
         "6-10-27" => 9.94, "6-20-27" => 19.88, "6-30-27" => 29.82, "6-50-27" => 49.7, "6-100-27" => 99.4, "6-200-27" => 198.8, "6-300-27" => 298.5, "6-500-27" => 497.5,//陕西 27

+ 1 - 0
helper/refill/api/xyz/huoshenguoman/config.php

@@ -22,6 +22,7 @@ class config
             200 => 100033,
         ],
         mtopcard\ChinaTelecomCard => [
+            50  => 100023,
             100 => 100024,
             200 => 100025,
         ],

+ 4 - 1
helper/refill/api/xyz/huoshenguoman/开户信息.txt

@@ -18,4 +18,7 @@ appSecret:vfrkNedzDCXXdIdT
 100033  慢充联通200
 
 100024  慢充电信100
-100025  慢充电信200
+100025  慢充电信200
+
+2022.4.13
+100023 慢充电信50

二進制
helper/refill/api/xyz/kuaikuaifs/20220413青海移动调价函.png


二進制
helper/refill/api/xyz/kuaikuaifs/20220418黑龙江移动调价函.png


二進制
helper/refill/api/xyz/kuaikuaifs/20220418黑龙江移动调价函(17点).png


+ 7 - 2
helper/refill/api/xyz/kuaikuaifs/config.php

@@ -36,6 +36,10 @@ class config
                 30 => '2c922ab97f8d9843017f905ce1fc1d90',   50 => '2c922ab97f8d9843017f905ce2031d92',   100 => '2c922ab97f8d9843017f905ce20b1d94',
                 200 => '2c922ab97f8d9843017f905ce2141d96',  300 => '2c922ab97f8d9843017f905ce21f1d98',  500 => '2c922ab97f8d9843017f905ce2251d9a',
             ],
+            //北京
+            1  => [
+                10 => '2c922ab980096b54018026fdc6652997',   20 => '2c922ab980096b54018026fdc6612995',
+            ]
         ],
         mtopcard\ChinaUnicomCard => [
 
@@ -48,9 +52,10 @@ class config
     //key格式 卡类型-面值-regin_no
     const Price = [
         //移动
-        "4-5-29" => 4.88, "4-10-29" => 9.76, "4-20-29" => 19.52, "4-30-29" => 29.28, "4-50-29" => 48.8, "4-100-29" => 97.6, "4-200-29" => 195.2, "4-300-29" => 292.8, "4-500-29" => 488,//青海 29
-        "4-10-8" => 9.98, "4-20-8" => 19.96, "4-30-8" => 29.94, "4-50-8" => 49.9, "4-100-8" => 99.8, "4-200-8" => 199.6, "4-300-8" => 299.4, "4-500-8" => 499,//黑龙江 8
+        "4-5-29" => 4.87, "4-10-29" => 9.74, "4-20-29" => 19.48, "4-30-29" => 29.22, "4-50-29" => 48.7, "4-100-29" => 97.4, "4-200-29" => 194.8, "4-300-29" => 292.2, "4-500-29" => 487,//青海 29
+        "4-10-8" => 9.955, "4-20-8" => 19.91, "4-30-8" => 29.865, "4-50-8" => 49.775, "4-100-8" => 99.55, "4-200-8" => 199.1, "4-300-8" => 298.65, "4-500-8" => 497.75,//黑龙江 8
         "4-10-19" => 9.95, "4-20-19" => 19.9, "4-30-19" => 29.85, "4-50-19" => 49.75, "4-100-19" => 99.5, "4-200-19" => 199, "4-300-19" => 298.5, "4-500-19" => 497.5,//广东 19
+        "4-10-1" => 10.3, "4-20-1" => 20.6,//北京 1
     ];
 
     public static function sign($params)

+ 11 - 1
helper/refill/api/xyz/pengxinda/API信息.txt

@@ -28,4 +28,14 @@
  11002100 	电信电渠全国100	
  11002200 	电信电渠全国200	
  11002300 	电信电渠全国300	
- 11002500 	电信电渠全国500
+ 11002500 	电信电渠全国500
+
+ 2022.4.13新增
+ 100210	移动话费10
+ 100220	移动话费20
+
+ 1200210	联通10
+ 1200220	联通20
+
+ 1100210	电信10
+ 1100220	电信20

+ 6 - 0
helper/refill/api/xyz/pengxinda/config.php

@@ -14,6 +14,8 @@ class config
     const NOTIFY_URL = BASE_SITE_URL . "/mobile/callback/refill_pengxinda.php";
     const Product = [
         mtopcard\ChinaMobileCard => [
+            10  => 100210,
+            20  => 100220,
             50  => 100250,
             100 => 1002100,
             200 => 1002200,
@@ -21,6 +23,8 @@ class config
             500 => 1002500
         ],
         mtopcard\ChinaUnicomCard => [
+            10  => 1200210,
+            20  => 1200220,
             30  => 1200230,
             50  => 1200250,
             100 => 12002100,
@@ -28,6 +32,8 @@ class config
             300 => 12002300
         ],
         mtopcard\ChinaTelecomCard => [
+            10  => 1100210,
+            20  => 1100220,
             50  => 1100250,
             100 => 11002100,
             200 => 11002200,

+ 34 - 17
helper/refill/api/xyz/yunchonggongman/RefillCallBack.php

@@ -8,8 +8,10 @@ class RefillCallBack implements refill\IRefillCallBack
 {
     public function verify($params): bool
     {
-        $sign = $this->sign($params);
-        if ($params['szVerifyString'] == $sign) {
+        $input = $params;
+        unset($input['sign']);
+        $sign = $this->sign($input);
+        if ($params['sign'] == $sign) {
             return true;
         } else {
             return false;
@@ -18,33 +20,48 @@ class RefillCallBack implements refill\IRefillCallBack
 
     private function sign($params)
     {
-        $userid = config::USER_ID;
-        $key = config::KEY;
-        $content = "szAgentId={$userid}&szOrderId={$params['szOrderId']}&szPhoneNum={$params['szPhoneNum']}&nDemo={$params['nDemo']}&fSalePrice={$params['fSalePrice']}";
-        $content .= "&nFlag={$params['nFlag']}&szKey={$key}";
+        $params['appSecret'] = config::APP_SECRET;
+        ksort($params);
+        $content = '';
+        foreach ($params as $key => $value) {
+            if($this->check_empty($value) === false) {
+                $content .= "{$key}={$value}&";
+            }
+        }
+        $content = rtrim($content, '&');
         return md5($content);
     }
 
+    private function check_empty($value)
+    {
+        if (!isset($value))
+            return true;
+        if ($value === null)
+            return true;
+        if (trim($value) === "")
+            return true;
+
+        return false;
+    }
+
     public function notify($params)
     {
-        $status = intval($params['nFlag']);
-        $order_sn = $params['szOrderId'];
+        $status = intval($params['orderStatus']);
+        $order_sn = $params['outOrderId'];
         $order_info = Model('vr_order')->getOrderInfo(['order_sn' => $order_sn]);
         if (empty($order_info)) {
             return [false, false, false,false];
         }
-        $order_id = $order_info['order_id'];
 
+        $order_id = $order_info['order_id'];
         if ($status === 2) {
-            $data['official_sn'] = strtolower($params['szRtnMsg']) == 'null' ? '' : $params['szRtnMsg'];
+            $data['official_sn'] = strtolower($params['ext1']) == 'null' ? '' : $params['ext1'];
             Model('refill_order')->edit($order_id, $data);
-            return [$order_id, true, false,true];
-        }
-        elseif ($status === 3) {
-            return [$order_id, false, true,true];
-        }
-        else {
-            return [$order_id, false, false,false];
+            return [$order_id, true, false, true];
+        } elseif ($status === 3) {
+            return [$order_id, false, true, true];
+        } else {
+            return [$order_id, false, false, false];
         }
     }
 }

+ 70 - 55
helper/refill/api/xyz/yunchonggongman/RefillPhone.php

@@ -16,15 +16,14 @@ class RefillPhone extends refill\IRefillPhone
 
     private function req_params(int $phone, int $amount, int $card_type, string $order_sn)
     {
-        $params['szAgentId'] = config::USER_ID;
-        $params['szOrderId'] = $order_sn;
-        $params['szPhoneNum'] = $phone;
-        $params['nMoney'] = $amount;
-        $params['nSortType'] = config::operator[$card_type];
-        $params['nProductClass'] = 1;
-        $params['nProductType'] = 1;
-        $params['szTimeStamp'] = date("Y-m-d H:i:s");
-        $params['szNotifyUrl'] = config::NOTIFY_URL;
+        $params['appId'] = config::APP_ID;
+        $params['outOrderId'] = $order_sn;
+        $params['uuid'] = $phone;
+        $params['itemId'] = config::PRODUCT[$card_type][$amount];
+        $params['itemFace'] = $amount;
+        $params['amount'] = 1;
+        $params['callbackUrl'] = config::NOTIFY_URL;
+        $params['timestamp'] = date("YmdHis").$this->get_millisecond();
         return $params;
     }
 
@@ -32,9 +31,11 @@ class RefillPhone extends refill\IRefillPhone
     {
         $order_sn = $params['order_sn'];
         $params = $this->req_params($card_no, $amount, $card_type, $order_sn);
-
+        if(empty($params['itemId'])) {
+            return [false, '商品编号错误', false];
+        }
         $sign = $this->sign($params);
-        $params['szVerifyString'] = $sign;
+        $params['sign'] = $sign;
 
         $resp = http_request(config::ORDER_URL, $params, 'POST', false, config::ExtHeaders, $net_errno);
 
@@ -45,32 +46,28 @@ class RefillPhone extends refill\IRefillPhone
         {
             Log::record($resp, Log::DEBUG);
             $resp = json_decode($resp, true);
-
-            $nRtn = $resp['nRtn'];
             if (empty($resp)) {
                 return [false, '网络错误', true];
-            } elseif ($nRtn === 0) {
-                return [true, '', false];
-            } elseif (in_array($nRtn, config::ERR_NOS, true)) {
-                return [false, $resp['szRtnCode'], false];
-            } elseif (in_array($nRtn, [2050, 999], true)) {
-                $net_errno = "HTTP-{$nRtn}";
-                return [false, $resp['szRtnCode'], true];
+            } elseif ($resp['code'] === '00') {
+                return [true, $resp['orderId'], false];
+            } elseif (in_array($resp['code'], config::ERRCODES, true)) {
+                return [false, $resp['msg'], false];
+            } elseif (in_array($resp['code'], ['-22', '-23', '-99'], true)) {
+                $net_errno = "HTTP-{$resp['code']}";
+                return [false, $resp['msg'], true];
             } else {
-                $err = 998;
-                $net_errno = "HTTP-{$err}";
-                return [false, $resp['szRtnCode'], true];
+                $net_errno = "HTTP-998";
+                return [false, $resp['msg'], true];
             }
         }
     }
 
     public function query($refill_info)
     {
-        $params['szAgentId'] = config::USER_ID;
-        $params['szOrderId'] = $refill_info['order_sn'];
-        $key = config::KEY;
-        $content = "szAgentId={$params['szAgentId']}&szOrderId={$params['szOrderId']}&szKey={$key}";
-        $params['szVerifyString'] = md5($content);
+        $params['appId'] = config::APP_ID;
+        $params['outOrderId'] = $refill_info['order_sn'];
+        $params['timestamp'] = date("YmdHis").$this->get_millisecond();
+        $params['sign'] = $this->sign($params);
 
         $resp = http_request(config::QUERY_URL, $params, 'POST', false, config::ExtHeaders);
 
@@ -84,32 +81,36 @@ class RefillPhone extends refill\IRefillPhone
             if (empty($resp)) {
                 return [false, '网络错误'];
             }
-
-            $status = $resp['nRtn'];
-            if ($status === 5012) {
-                $updata['official_sn'] = $resp['szRtnMsg'];
-                Model('refill_order')->edit($refill_info['order_id'], $updata);
-                $order_state = ORDER_STATE_SUCCESS;
-            } elseif ($status === 5013) {
-                $order_state = ORDER_STATE_CANCEL;
-            } elseif (in_array($status, [5011,5019],true)) {
-                $order_state = ORDER_STATE_SEND;
-            } elseif ($status === 5005 && (time() - $refill_info['commit_time'] >= 300)) {
-                $order_state = ORDER_STATE_NOEXIST;
-            } else {
-                return [false, $resp['szRtnMsg']];
+            elseif ($resp['code'] === '00')
+            {
+                $status = $resp['orderStatus'];
+                if ($status === '2') {
+                    $updata['official_sn'] = $resp['ext1'];
+                    Model('refill_order')->edit($refill_info['order_id'], $updata);
+                    $order_state = ORDER_STATE_SUCCESS;
+                } elseif ($status === '3') {
+                    $order_state = ORDER_STATE_CANCEL;
+                } elseif ($status === '1') {
+                    $order_state = ORDER_STATE_SEND;
+                } elseif ($status === '4' && (time() - $refill_info['commit_time'] >= 600)) {
+                    $order_state = ORDER_STATE_NOEXIST;
+                } else {
+                    return [false, $resp['msg']];
+                }
+                return [true, $order_state];
+            }
+            else
+            {
+                return [false, $resp['msg']];
             }
-
-            return [true, $order_state];
         }
     }
 
     public function balance()
     {
-        $params['szAgentId'] = config::USER_ID;
-        $key = config::KEY;
-        $content = "szAgentId={$params['szAgentId']}&szKey={$key}";
-        $params['szVerifyString'] = md5($content);
+        $params['appId'] = config::APP_ID;
+        $params['timestamp'] = date("YmdHis").$this->get_millisecond();
+        $params['sign'] = $this->sign($params);
 
         $resp = http_request(config::BALANCE_URL, $params, 'POST', false, config::ExtHeaders);
 
@@ -122,20 +123,34 @@ class RefillPhone extends refill\IRefillPhone
             $resp = json_decode($resp, true);
             if (empty($resp)) {
                 return [false, '网络错误'];
-            } elseif ($resp['nRtn'] == 0) {
-                return [true, $resp['fBalance']];
+            } elseif ($resp['code'] === '00') {
+                return [true, $resp['balance']];
             } else {
-                return [false, $resp['szRtnCode']];
+                return [false, $resp['msg']];
             }
         }
     }
 
+    /**
+     * 获取毫秒级别的时间戳
+     */
+    private function get_millisecond()
+    {
+        list($usec, $sec) = explode(" ", microtime());
+        return round($usec*1000);
+    }
+
     private function sign($params)
     {
-        $userid = config::USER_ID;
-        $key = config::KEY;
-        $content = "szAgentId={$userid}&szOrderId={$params['szOrderId']}&szPhoneNum={$params['szPhoneNum']}&nMoney={$params['nMoney']}&nSortType={$params['nSortType']}";
-        $content .= "&nProductClass={$params['nProductClass']}&nProductType={$params['nProductType']}&szTimeStamp={$params['szTimeStamp']}&szKey={$key}";
+        $params['appSecret'] = config::APP_SECRET;
+        ksort($params);
+        $content = '';
+        foreach ($params as $key => $value) {
+            if($this->check_empty($value) === false) {
+                $content .= "{$key}={$value}&";
+            }
+        }
+        $content = rtrim($content, '&');
         return md5($content);
     }
 }

+ 0 - 11
helper/refill/api/xyz/yunchonggongman/api.txt

@@ -1,11 +0,0 @@
-
-话费下单地址:http://47.98.253.40:10186/plat/api/old/submitorder
-查询地址:http://47.98.253.40:10186/plat/api/old/queryorder
-查询余额地址:http://47.98.253.40:10186/plat/api/old/queryBalance
-系统及客户端地址:http://47.98.253.40:10186/plat/index
-账号 yezi
-密码123456
-ID:200008
-秘钥:3c2372623d07477499cf8e35710c7a7f
-
-对接文档地址:https://docs.qq.com/doc/DWkV1VkxQVk13eEtQ

+ 20 - 14
helper/refill/api/xyz/yunchonggongman/config.php

@@ -6,22 +6,28 @@ namespace refill\yunchonggongman;
 use mtopcard;
 class config
 {
-    //903
-    const ORDER_URL = 'http://47.98.253.40:10186/plat/api/old/submitorder';
-    const QUERY_URL= 'http://47.98.253.40:10186/plat/api/old/queryorder';
-    const BALANCE_URL= 'http://47.98.253.40:10186/plat/api/old/queryBalance';
+    const ORDER_URL = 'http://119.23.54.206:8911/api/order/submit';
+    const QUERY_URL = 'http://119.23.54.206:8911/api/order/query';
+    const BALANCE_URL = 'http://119.23.54.206:8911/api/account/balance';
 
-    const USER_ID= '200008';
-    const KEY = '3c2372623d07477499cf8e35710c7a7f';
+    const APP_ID = 'P9EYSTJenh';
+    const APP_SECRET = 'vqWljdxFEXWDIAQo';
     const NOTIFY_URL = BASE_SITE_URL . "/mobile/callback/refill_yunchonggongman.php";
-    const operator = [
-        mtopcard\ChinaMobileCard  => 1,
-        mtopcard\ChinaUnicomCard  => 2,
-        mtopcard\ChinaTelecomCard => 3
-    ];
-    const ExtHeaders = ['Content-Type:application/x-www-form-urlencoded;charset=utf-8'];
 
-    const ERR_NOS = [
-        1000,1001,1003,1004,2001,2002,2003,2020,2021,1006,2030,3003
+    const PRODUCT = [
+        mtopcard\ChinaMobileCard => [
+
+        ],
+        mtopcard\ChinaUnicomCard => [
+            100 => 100119,
+            200 => 100120
+        ],
+        mtopcard\ChinaTelecomCard => [
+            50  => 100121,
+            100 => 100111,
+            200 => 100112
+        ],
     ];
+    const ExtHeaders = ['Content-Type:application/x-www-form-urlencoded;charset=utf-8'];
+    const ERRCODES = ['-10', '-12', '-13', '-14', '-15', '-16', '-18', '-21'];
 }

+ 27 - 0
helper/refill/api/xyz/yunchonggongman/开户信息.txt

@@ -0,0 +1,27 @@
+后台地址:http://119.23.54.206:8888
+帐号:manye
+密码:159069
+二级密码:xsYH0230
+appId:P9EYSTJenh
+appSecret:vqWljdxFEXWDIAQo
+后台-商品列表,可查看已配置商品信息
+后台-安全中心,可配置IP白名单
+接口文档:https://www.showdoc.com.cn/1686453783298366/7925312871840290
+话费直充接口:http://119.23.54.206:8911/api/hf/order/submit
+通用直充接口:http://119.23.54.206:8911/api/order/submit
+卡密提取接口:http://119.23.54.206:8911/api/card/get
+查询接口接口:http://119.23.54.206:8911/api/order/query
+余额查询接口:http://119.23.54.206:8911/api/account/balance
+
+
+100119
+慢充联通100
+100120
+慢充联通200
+100111
+慢充电信100
+100112
+慢充电信200
+
+100121
+慢充电信50

+ 15 - 15
helper/refill/api/xyz/zhongst/config.php

@@ -15,7 +15,7 @@ class config
     const NOTIFY_URL = BASE_SITE_URL . "/mobile/refill_zhongst.php";
     const PRODUCT = [
         mtopcard\ChinaMobileCard => [
-            30  => 100088,
+            30  => 100008,
             50  => 100009,
             100 => 100010,
             200 => 100011,
@@ -23,10 +23,6 @@ class config
             500 => 100013
         ],
         mtopcard\ChinaUnicomCard => [
-            1  	=> 100014,
-            2  	=> 100015,
-            3  	=> 100016,
-            4  	=> 100017,
             5  	=> 100018,
             6  	=> 100019,
             7  	=> 100020,
@@ -35,21 +31,25 @@ class config
             10  => 100023,
             20  => 100024,
             30  => 100025,
-            50  => 100026,
-            100 => 100027,
-            200 => 100028,
-            300 => 100029,
-            500 => 100030
+            50  => 100084,
+            100 => 100085,
+            200 => 100086,
+            300 => 100087
         ],
         mtopcard\ChinaTelecomCard => [
+            5  	=> 100035,
+            6  	=> 100036,
+            7  	=> 100037,
+            8  	=> 100038,
+            9  	=> 100039,
             10   => 100040,
             20   => 100041,
-            30   => 100042,
+            30   => 100181,
             50   => 100043,
-            100  => 100044,
-            200  => 100045,
-            300  => 100046,
-            500  => 100047
+            100  => 100183,
+            200  => 100184,
+            300  => 100185,
+            500  => 100186
         ],
     ];
     const ExtHeaders = ['Content-Type:application/x-www-form-urlencoded;charset=utf-8'];

+ 33 - 29
helper/refill/api/xyz/zhongst/开户信息.txt

@@ -12,34 +12,38 @@ appSecret:eIpGtPfBdSfqAYSv
 余额接口地址:http://112.124.58.225:8911/api/account/balance
 提卡接口地址:http://112.124.58.225:8911/api/card/get
 
-100088	移动30
-100089	移动50
-100090	移动100
-100091	移动200
-100092	移动300
+2022.4.14更新 商品编码
 
-100014  联通快充1
-100015  联通快充2
-100016  联通快充3
-100017  联通快充4
-100018  联通快充5
-100019  联通快充6
-100020  联通快充7
-100021  联通快充8
-100022  联通快充9
-100023  联通快充10
-100024  联通快充20
-100083  联通沃支付30
-100084  联通沃支付50
-100085  联通沃支付100
-100086  联通沃支付200
-100087  联通沃支付300
+100008   移动快充30
+100009   移动快充50
+100010   移动快充100
+100011   移动快充200
+100012   移动快充300
+100013   移动快充500
 
-100040  电信快充10
-100041  电信快充20
-100042	电信快充30
-100043	电信快充50
-100044	电信快充100
-100045	电信快充200
-100046	电信快充300
-100047	电信快充500
+100018   联通快充5
+100019   联通快充6
+100020   联通快充7
+100021   联通快充8
+100022   联通快充9
+100023   联通快充10
+100024   联通快充20
+100025   联通快充30
+100084    沃支付50
+100085    沃支付100
+100086    沃支付200
+100087    沃支付300
+
+100035   电信快充5
+100036   电信快充6
+100037   电信快充7
+100038   电信快充8
+100039   电信快充9
+100040   电信快充10
+100041   电信快充20
+100181   电信电渠30
+100043   电信快充50
+100183   电信电渠100
+100184   电信电渠200
+100185   电信电渠300
+100186   电信电渠500

+ 34 - 17
helper/refill/api/xyz/zhongst_mix/RefillCallBack.php

@@ -8,8 +8,10 @@ class RefillCallBack implements refill\IRefillCallBack
 {
     public function verify($params): bool
     {
-        $sign = $this->sign($params);
-        if ($params['szVerifyString'] == $sign) {
+        $input = $params;
+        unset($input['sign']);
+        $sign = $this->sign($input);
+        if ($params['sign'] == $sign) {
             return true;
         } else {
             return false;
@@ -18,33 +20,48 @@ class RefillCallBack implements refill\IRefillCallBack
 
     private function sign($params)
     {
-        $userid = config::USER_ID;
-        $key = config::KEY;
-        $content = "szAgentId={$userid}&szOrderId={$params['szOrderId']}&szPhoneNum={$params['szPhoneNum']}&nDemo={$params['nDemo']}&fSalePrice={$params['fSalePrice']}";
-        $content .= "&nFlag={$params['nFlag']}&szKey={$key}";
+        $params['appSecret'] = config::APP_SECRET;
+        ksort($params);
+        $content = '';
+        foreach ($params as $key => $value) {
+            if($this->check_empty($value) === false) {
+                $content .= "{$key}={$value}&";
+            }
+        }
+        $content = rtrim($content, '&');
         return md5($content);
     }
 
+    private function check_empty($value)
+    {
+        if (!isset($value))
+            return true;
+        if ($value === null)
+            return true;
+        if (trim($value) === "")
+            return true;
+
+        return false;
+    }
+
     public function notify($params)
     {
-        $status = intval($params['nFlag']);
-        $order_sn = $params['szOrderId'];
+        $status = intval($params['orderStatus']);
+        $order_sn = $params['outOrderId'];
         $order_info = Model('vr_order')->getOrderInfo(['order_sn' => $order_sn]);
         if (empty($order_info)) {
             return [false, false, false,false];
         }
-        $order_id = $order_info['order_id'];
 
+        $order_id = $order_info['order_id'];
         if ($status === 2) {
-            $data['official_sn'] = strtolower($params['szRtnMsg']) == 'null' ? '' : $params['szRtnMsg'];
+            $data['official_sn'] = strtolower($params['ext1']) == 'null' ? '' : $params['ext1'];
             Model('refill_order')->edit($order_id, $data);
-            return [$order_id, true, false,true];
-        }
-        elseif ($status === 3) {
-            return [$order_id, false, true,true];
-        }
-        else {
-            return [$order_id, false, false,false];
+            return [$order_id, true, false, true];
+        } elseif ($status === 3) {
+            return [$order_id, false, true, true];
+        } else {
+            return [$order_id, false, false, false];
         }
     }
 }

+ 69 - 55
helper/refill/api/xyz/zhongst_mix/RefillPhone.php

@@ -16,15 +16,13 @@ class RefillPhone extends refill\IRefillPhone
 
     private function req_params(int $phone, int $amount, int $card_type, string $order_sn)
     {
-        $params['szAgentId'] = config::USER_ID;
-        $params['szOrderId'] = $order_sn;
-        $params['szPhoneNum'] = $phone;
-        $params['nMoney'] = $amount;
-        $params['nSortType'] = config::operator[$card_type];
-        $params['nProductClass'] = 1;
-        $params['nProductType'] = 1;
-        $params['szTimeStamp'] = date("Y-m-d H:i:s");
-        $params['szNotifyUrl'] = config::NOTIFY_URL;
+        $params['appId'] = config::APP_ID;
+        $params['outOrderId'] = $order_sn;
+        $params['uuid'] = $phone;
+        $params['itemId'] = config::PRODUCT[$card_type][$amount];
+        $params['itemFace'] = $amount;
+        $params['callbackUrl'] = config::NOTIFY_URL;
+        $params['timestamp'] = date("YmdHis").$this->get_millisecond();
         return $params;
     }
 
@@ -32,9 +30,11 @@ class RefillPhone extends refill\IRefillPhone
     {
         $order_sn = $params['order_sn'];
         $params = $this->req_params($card_no, $amount, $card_type, $order_sn);
-
+        if(empty($params['itemId'])) {
+            return [false, '商品编号错误', false];
+        }
         $sign = $this->sign($params);
-        $params['szVerifyString'] = $sign;
+        $params['sign'] = $sign;
 
         $resp = http_request(config::ORDER_URL, $params, 'POST', false, config::ExtHeaders, $net_errno);
 
@@ -45,32 +45,28 @@ class RefillPhone extends refill\IRefillPhone
         {
             Log::record($resp, Log::DEBUG);
             $resp = json_decode($resp, true);
-
-            $nRtn = $resp['nRtn'];
             if (empty($resp)) {
                 return [false, '网络错误', true];
-            } elseif ($nRtn === 0) {
-                return [true, '', false];
-            } elseif (in_array($nRtn, config::ERR_NOS, true)) {
-                return [false, $resp['szRtnCode'], false];
-            } elseif (in_array($nRtn, [2050, 999], true)) {
-                $net_errno = "HTTP-{$nRtn}";
-                return [false, $resp['szRtnCode'], true];
+            } elseif ($resp['code'] === '00') {
+                return [true, $resp['orderId'], false];
+            } elseif (in_array($resp['code'], config::ERRCODES, true)) {
+                return [false, $resp['msg'], false];
+            } elseif (in_array($resp['code'], ['-22', '-23', '-99'], true)) {
+                $net_errno = "HTTP-{$resp['code']}";
+                return [false, $resp['msg'], true];
             } else {
-                $err = 998;
-                $net_errno = "HTTP-{$err}";
-                return [false, $resp['szRtnCode'], true];
+                $net_errno = "HTTP-998";
+                return [false, $resp['msg'], true];
             }
         }
     }
 
     public function query($refill_info)
     {
-        $params['szAgentId'] = config::USER_ID;
-        $params['szOrderId'] = $refill_info['order_sn'];
-        $key = config::KEY;
-        $content = "szAgentId={$params['szAgentId']}&szOrderId={$params['szOrderId']}&szKey={$key}";
-        $params['szVerifyString'] = md5($content);
+        $params['appId'] = config::APP_ID;
+        $params['outOrderId'] = $refill_info['order_sn'];
+        $params['timestamp'] = date("YmdHis").$this->get_millisecond();
+        $params['sign'] = $this->sign($params);
 
         $resp = http_request(config::QUERY_URL, $params, 'POST', false, config::ExtHeaders);
 
@@ -84,32 +80,36 @@ class RefillPhone extends refill\IRefillPhone
             if (empty($resp)) {
                 return [false, '网络错误'];
             }
-
-            $status = $resp['nRtn'];
-            if ($status === 5012) {
-                $updata['official_sn'] = $resp['szRtnMsg'];
-                Model('refill_order')->edit($refill_info['order_id'], $updata);
-                $order_state = ORDER_STATE_SUCCESS;
-            } elseif ($status === 5013) {
-                $order_state = ORDER_STATE_CANCEL;
-            } elseif (in_array($status, [5011,5019],true)) {
-                $order_state = ORDER_STATE_SEND;
-            } elseif ($status === 5005 && (time() - $refill_info['commit_time'] >= 300)) {
-                $order_state = ORDER_STATE_NOEXIST;
-            } else {
-                return [false, $resp['szRtnMsg']];
+            elseif ($resp['code'] === '00')
+            {
+                $status = $resp['orderStatus'];
+                if ($status === '2') {
+                    $updata['official_sn'] = $resp['ext1'];
+                    Model('refill_order')->edit($refill_info['order_id'], $updata);
+                    $order_state = ORDER_STATE_SUCCESS;
+                } elseif ($status === '3') {
+                    $order_state = ORDER_STATE_CANCEL;
+                } elseif ($status === '1') {
+                    $order_state = ORDER_STATE_SEND;
+                } elseif ($status === '4' && (time() - $refill_info['commit_time'] >= 600)) {
+                    $order_state = ORDER_STATE_NOEXIST;
+                } else {
+                    return [false, $resp['msg']];
+                }
+                return [true, $order_state];
+            }
+            else
+            {
+                return [false, $resp['msg']];
             }
-
-            return [true, $order_state];
         }
     }
 
     public function balance()
     {
-        $params['szAgentId'] = config::USER_ID;
-        $key = config::KEY;
-        $content = "szAgentId={$params['szAgentId']}&szKey={$key}";
-        $params['szVerifyString'] = md5($content);
+        $params['appId'] = config::APP_ID;
+        $params['timestamp'] = date("YmdHis").$this->get_millisecond();
+        $params['sign'] = $this->sign($params);
 
         $resp = http_request(config::BALANCE_URL, $params, 'POST', false, config::ExtHeaders);
 
@@ -122,20 +122,34 @@ class RefillPhone extends refill\IRefillPhone
             $resp = json_decode($resp, true);
             if (empty($resp)) {
                 return [false, '网络错误'];
-            } elseif ($resp['nRtn'] === 0) {
-                return [true, $resp['fBalance']];
+            } elseif ($resp['code'] === '00') {
+                return [true, $resp['balance']];
             } else {
-                return [false, $resp['szRtnCode']];
+                return [false, $resp['msg']];
             }
         }
     }
 
+    /**
+     * 获取毫秒级别的时间戳
+     */
+    private function get_millisecond()
+    {
+        list($usec, $sec) = explode(" ", microtime());
+        return round($usec*1000);
+    }
+
     private function sign($params)
     {
-        $userid = config::USER_ID;
-        $key = config::KEY;
-        $content = "szAgentId={$userid}&szOrderId={$params['szOrderId']}&szPhoneNum={$params['szPhoneNum']}&nMoney={$params['nMoney']}&nSortType={$params['nSortType']}";
-        $content .= "&nProductClass={$params['nProductClass']}&nProductType={$params['nProductType']}&szTimeStamp={$params['szTimeStamp']}&szKey={$key}";
+        $params['appSecret'] = config::APP_SECRET;
+        ksort($params);
+        $content = '';
+        foreach ($params as $key => $value) {
+            if($this->check_empty($value) === false) {
+                $content .= "{$key}={$value}&";
+            }
+        }
+        $content = rtrim($content, '&');
         return md5($content);
     }
 }

+ 25 - 9
helper/refill/api/xyz/zhongst_mix/api.txt

@@ -1,11 +1,27 @@
-下单地址:http://39.102.121.210:10186/plat/api/old/submitorder
+后台地址:http://112.124.58.225:8888
+帐号:guoyanfanglve2
+密码:893393
+二级密码:mPoV9056
+appId:aKz6PN5XIw
+appSecret:iVVbvDkqlVMhSjev
+后台-商品列表,可查看已配置商品信息
+后台-安全中心,可配置IP白名单
+接口文档:https://www.showdoc.com.cn/1686453783298366/7925312871840290
+话费直充接口:http://112.124.58.225:8911/api/hf/order/submit
+通用直充接口:http://112.124.58.225:8911/api/order/submit
+卡密提取接口:http://112.124.58.225:8911/api/card/get
+查询接口接口:http://112.124.58.225:8911/api/order/query
+余额查询接口:http://112.124.58.225:8911/api/account/balance
 
-查询地址:http://39.102.121.210:10186/plat/api/old/queryorder
+100214 联通混充50
+100215 联通混充100
+100216 联通混充200
+100217 联通混充300
+100218 联通混充500
 
-查询余额地址:http://39.102.121.210:10186/plat/api/old/queryBalance
-后台地址:http://39.102.121.210:10186/plat/index
-账号:changyou
-密码:123456
-ID:200053
-秘钥:3a7d472a266b47a7a929469e46749aa7
-接口文档:https://docs.qq.com/doc/DWkV1VkxQVk13eEtQ
+100219 电信混充30
+100220 电信混充50
+100221 电信混充100
+100222 电信混充200
+100223 电信混充300
+100224 电信混充500

+ 26 - 14
helper/refill/api/xyz/zhongst_mix/config.php

@@ -6,22 +6,34 @@ namespace refill\zhongst_mix;
 use mtopcard;
 class config
 {
-    //995
-    const ORDER_URL = 'http://39.102.121.210:10186/plat/api/old/submitorder';
-    const QUERY_URL= 'http://39.102.121.210:10186/plat/api/old/queryorder';
-    const BALANCE_URL= 'http://39.102.121.210:10186/plat/api/old/queryBalance';
+    const ORDER_URL = 'http://112.124.58.225:8911/api/hf/order/submit';
+    const QUERY_URL = 'http://112.124.58.225:8911/api/order/query';
+    const BALANCE_URL = 'http://112.124.58.225:8911/api/account/balance';
 
-    const USER_ID= '200053';
-    const KEY = '3a7d472a266b47a7a929469e46749aa7';
+    const APP_ID = 'aKz6PN5XIw';
+    const APP_SECRET = 'iVVbvDkqlVMhSjev';
     const NOTIFY_URL = BASE_SITE_URL . "/mobile/callback/refill_zhongst_mix.php";
-    const operator = [
-        mtopcard\ChinaMobileCard  => 1,
-        mtopcard\ChinaUnicomCard  => 2,
-        mtopcard\ChinaTelecomCard => 3
-    ];
-    const ExtHeaders = ['Content-Type:application/x-www-form-urlencoded;charset=utf-8'];
 
-    const ERR_NOS = [
-        1000,1001,1003,1004,2001,2002,2003,2020,2021,1006,2030,3003
+    const PRODUCT = [
+        mtopcard\ChinaMobileCard => [
+
+        ],
+        mtopcard\ChinaUnicomCard => [
+            50  => 100214,
+            100 => 100215,
+            200 => 100216,
+            300 => 100217,
+            500 => 100218
+        ],
+        mtopcard\ChinaTelecomCard => [
+            30   => 100219,
+            50   => 100220,
+            100  => 100221,
+            200  => 100222,
+            300  => 100223,
+            500  => 100224
+        ],
     ];
+    const ExtHeaders = ['Content-Type:application/x-www-form-urlencoded;charset=utf-8'];
+    const ERRCODES = ['-10', '-12', '-13', '-14', '-15', '-16', '-18', '-21'];
 }

+ 2 - 2
helper/refill/api/yl/baixuannew_high/config.php

@@ -11,8 +11,8 @@ class config
     const QUERY_URL= 'http://118.31.38.142:9086/searchpay.do';
     const BALANCE_URL = 'http://118.31.38.142:9086/searchbalance.do';
 
-    const USER_ID= '10002723';
-    const KEY = 'bT36FC2FFYFyQYmp5MEd2yFSCDjiAfjG';
+    const USER_ID= '10002724';
+    const KEY = 'RhmJrHtcmjY7FBcf4yGJwCCkEDbyyZTn';
     const NOTIFY_URL = BASE_SITE_URL . "/mobile/callback/refill_baixuannew_high.php";
     const operator = [
         mtopcard\ChinaMobileCard  => 'yd',

+ 6 - 4
helper/refill/api/yl/baixuannew_high/对接文档-yezi.txt

@@ -1,8 +1,8 @@
 登录地址:http://118.31.38.142:7080/
-账号:bjyl1
+账号:bjyl2
 密码:bjyl123
-ID:10002723
-秘钥:bT36FC2FFYFyQYmp5MEd2yFSCDjiAfjG
+ID:10002724
+秘钥:RhmJrHtcmjY7FBcf4yGJwCCkEDbyyZTn
 下单地址:
 http://118.31.38.142:9086/onlinepay.do
 余额查询:
@@ -26,4 +26,6 @@ https://www.showdoc.com.cn/AQL666666/
 101705	全国联通话费30元直充
 101706	全国联通话费50元直充
 101707	全国联通话费100元直充
-101708	全国联通话费200元直充
+101708	全国联通话费200元直充
+101709	全国联通话费300元直充
+101710	全国联通话费500元直充

+ 2 - 2
helper/refill/api/yl/baixuannew_normal/config.php

@@ -11,8 +11,8 @@ class config
     const QUERY_URL= 'http://118.31.38.142:9086/searchpay.do';
     const BALANCE_URL = 'http://118.31.38.142:9086/searchbalance.do';
 
-    const USER_ID= '10002724';
-    const KEY = 'RhmJrHtcmjY7FBcf4yGJwCCkEDbyyZTn';
+    const USER_ID= '10002723';
+    const KEY = 'bT36FC2FFYFyQYmp5MEd2yFSCDjiAfjG';
     const NOTIFY_URL = BASE_SITE_URL . "/mobile/callback/refill_baixuannew_normal.php";
     const operator = [
         mtopcard\ChinaMobileCard  => 'yd',

+ 3 - 3
helper/refill/api/yl/baixuannew_normal/对接文档-yezi.txt

@@ -1,8 +1,8 @@
 登录地址:http://118.31.38.142:7080/
-账号:bjyl2
+账号:bjyl1
 密码:bjyl123
-ID:10002724
-秘钥:RhmJrHtcmjY7FBcf4yGJwCCkEDbyyZTn
+ID:10002723
+秘钥:bT36FC2FFYFyQYmp5MEd2yFSCDjiAfjG
 下单地址:
 http://118.31.38.142:9086/onlinepay.do
 余额查询:

+ 1 - 1
helper/refill/api/yl/dongyefs/config.php

@@ -79,7 +79,7 @@ class config
         "4-10-13" => 9.89, "4-20-13" => 19.78, "4-30-13" => 29.67, "4-50-13" => 49.45, "4-100-13" => 98.9, "4-200-13" => 197.8, "4-300-13" => 296.7, "4-500-13" => 494.5,//福建 13
         "4-10-19" => 9.95, "4-20-19" => 19.9, "4-30-19" => 29.85, "4-50-19" => 49.75, "4-100-19" => 99.5, "4-200-19" => 199, "4-300-19" => 298.5, "4-500-19" => 497.5,//广东 19
         "4-10-29" => 9.8, "4-20-29" => 19.6, "4-30-29" => 29.4, "4-50-29" => 49, "4-100-29" => 98, "4-200-29" => 196, "4-300-29" => 294, "4-500-29" => 490,//青海 29
-        "4-10-8" => 10, "4-20-8" => 20, "4-30-8" => 30, "4-50-8" => 50, "4-100-8" => 100, "4-200-8" => 200, "4-300-8" => 300, "4-500-8" => 500,//黑龙江 8
+        "4-10-8" => 9.97, "4-20-8" => 19.94, "4-30-8" => 29.91, "4-50-8" => 49.85, "4-100-8" => 99.7, "4-200-8" => 199.4, "4-300-8" => 299.1, "4-500-8" => 498.5,//黑龙江 8
         "4-50-5" => 50.1, "4-100-5" => 100.2, "4-200-5" => 200.4, "4-300-5" => 300.6, "4-500-5" => 501,//内蒙古 5
 
         //电信

+ 4 - 4
helper/refill/api/yl/guochuang/config.php

@@ -66,13 +66,13 @@ class config
         "4-10-2" => 10.15, "4-20-2" => 19.92, "4-30-2" => 29.88, "4-50-2" => 49.8, "4-100-2" => 99.6, "4-200-2" => 199.2, "4-300-2" => 298.8, "4-500-2" => 498,//天津 2
         "4-10-6" => 9.75, "4-20-6" => 19.5, "4-30-6" => 29.25, "4-50-6" => 48.75, "4-100-6" => 97.5, "4-200-6" => 195, "4-300-6" => 292.5, "4-500-6" => 487.5,//辽宁 6
         "4-10-9" => 9.94, "4-20-9" => 19.88, "4-30-9" => 29.82, "4-50-9" => 49.7, "4-100-9" => 99.4,//上海 9
-        "4-10-8" => 10, "4-20-8" => 20, "4-30-8" => 30, "4-50-8" => 50, "4-100-8" => 100, "4-200-8" => 200, "4-300-8" => 300, "4-500-8" => 500 ,//黑龙江 8
-        "4-10-29" => 9.78, "4-20-29" => 19.56, "4-30-29" => 29.34, "4-50-29" => 48.9, "4-100-29" => 97.8, "4-200-29" => 195.6, "4-300-29" => 293.4, "4-500-29" => 489,//青海 29
+        "4-10-8" => 9.973, "4-20-8" => 19.946, "4-30-8" => 29.919, "4-50-8" => 49.865, "4-100-8" => 99.73, "4-200-8" => 199.46, "4-300-8" => 299.19, "4-500-8" => 498.65 ,//黑龙江 8
+        "4-10-29" => 9.76, "4-20-29" => 19.52, "4-30-29" => 29.28, "4-50-29" => 48.8, "4-100-29" => 97.6, "4-200-29" => 195.2, "4-300-29" => 292.8, "4-500-29" => 488,//青海 29
         "4-10-28" => 9.985, "4-20-28" => 19.97, "4-30-28" => 29.955, "4-50-28" => 49.925, "4-100-28" => 99.85, "4-200-28" => 199.7, "4-300-28" => 299.55, "4-500-28" => 499.25,//甘肃 28
         "4-10-13" => 10.22, "4-20-13" => 19.94, "4-30-13" => 29.91, "4-50-13" => 49.85, "4-100-13" => 99.7, "4-200-13" => 199.4, "4-300-13" => 300.9, "4-500-13" => 501.5,//福建 13
         "4-10-5" => 9.99, "4-20-5" => 19.98, "4-30-5" => 29.97, "4-50-5" => 49.95, "4-100-5" => 99.9, "4-200-5" => 200.4, "4-300-5" => 300.6, "4-500-5" => 501,//内蒙古 5
         "4-30-18" => 29.835, "4-50-18" => 49.725, "4-100-18" => 99.45, "4-200-18" => 198.3,//湖南 18
-        "4-10-19" => 9.97, "4-20-19" => 19.94, "4-30-19" => 29.895, "4-50-19" => 49.825, "4-100-19" => 99.65, "4-200-19" => 199.3, "4-300-19" => 298.95, "4-500-19" => 498.25,//广东 19
+        "4-10-19" => 9.97, "4-20-19" => 19.94, "4-30-19" => 29.865, "4-50-19" => 49.775, "4-100-19" => 99.55, "4-200-19" => 199.1, "4-300-19" => 298.65, "4-500-19" => 497.75,//广东 19
         "4-10-7" => 9.82, "4-20-7" => 19.64, "4-30-7" => 29.46, "4-50-7" => 49.1, "4-100-7" => 98.2, "4-200-7" => 196.4, "4-300-7" => 294.6, "4-500-7" => 491,//吉林 7
         "4-10-1" => 10.31, "4-20-1" => 20.32, "4-30-1" => 30.33, "4-50-1" => 50.35, "4-100-1" => 100.4, "4-200-1" => 200.3, "4-300-1" => 300.45, "4-500-1" => 500.75,//北京 1
         "4-10-22" => 10.015, "4-20-22" => 20.03, "4-30-22" => 30.045, "4-50-22" => 50.075, "4-100-22" => 100.15, "4-200-22" => 200.3, "4-300-22" => 300.45, "4-500-22" => 500.75,//重庆 22
@@ -87,7 +87,7 @@ class config
         "5-10-19" => 10.04, "5-20-19" => 20.08, "5-30-19" => 29.97, "5-50-19" => 49.95, "5-100-19" => 99.9, "5-200-19" => 199.8, "5-300-19" => 299.7, "5-500-19" => 499.5,//广东 19
         "5-10-1" => 9.99, "5-20-1" => 19.98, "5-30-1" => 29.97, "5-50-1" => 49.95, "5-100-1" => 99.9, "5-200-1" => 199.8, "5-300-1" => 299.7, "5-500-1" => 499.5,//北京 1
         "5-10-22" => 10.04, "5-20-22" => 20.08, "5-30-22" => 30.12, "5-50-22" => 50.2, "5-100-22" => 100.4, "5-200-22" => 200.8, "5-300-22" => 301.2, "5-500-22" => 502,//重庆 22
-        "5-10-14" => 10.03, "5-20-14" => 20.06, "5-30-14" => 30.06, "5-50-14" => 50.1, "5-100-14" => 100.2, "5-200-14" => 200.4, "5-300-14" => 300.6, "5-500-14" => 501,//江西 14
+        "5-10-14" => 10.04, "5-20-14" => 20.08, "5-30-14" => 30.06, "5-50-14" => 50.1, "5-100-14" => 100.2, "5-200-14" => 200.4, "5-300-14" => 300.6, "5-500-14" => 501,//江西 14
         "5-20-23" => 20.08, "5-30-23" => 30.12, "5-50-23" => 50.2, "5-100-23" => 100.4, "5-200-23" => 200.8, "5-300-23" => 301.2, "5-500-23" => 502,//四川 23
         //电信
         "6-10-27" => 9.94, "6-20-27" => 19.88, "6-30-27" => 29.82, "6-50-27" => 49.7, "6-100-27" => 99.4, "6-200-27" => 198.8, "6-300-27" => 298.5, "6-500-27" => 497.5,//陕西 27

+ 1 - 0
helper/refill/api/yl/huoshenguoman/config.php

@@ -22,6 +22,7 @@ class config
             200 => 100033,
         ],
         mtopcard\ChinaTelecomCard => [
+            50  => 100023,
             100 => 100024,
             200 => 100025,
         ],

+ 48 - 0
helper/refill/api/yl/kailinyu/RefillCallBack.php

@@ -0,0 +1,48 @@
+<?php
+namespace refill\kailinyu;
+
+require_once(BASE_HELPER_RAPI_PATH . '/kailinyu/config.php');
+
+use refill;
+class RefillCallBack implements refill\IRefillCallBack
+{
+    public function verify($params): bool
+    {
+        $sign = $this->sign($params);
+        if ($params['sign'] == $sign) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    private function sign($params)
+    {
+        $userid = config::USER_ID;
+        $key = config::KEY;
+        $content = "userid={$userid}&orderid={$params['orderid']}&sporderid={$params['sporderid']}&merchantsubmittime={$params['merchantsubmittime']}";
+        $content .= "&resultno={$params['resultno']}&key={$key}";
+        return strtoupper(md5($content));
+    }
+
+    public function notify($params)
+    {
+        $status = intval($params['resultno']);
+        $order_sn = $params['sporderid'];
+        $order_info = Model('vr_order')->getOrderInfo(['order_sn' => $order_sn]);
+        if (empty($order_info)) {
+            return [false, false, false,false];
+        }
+
+        $order_id = $order_info['order_id'];
+        if ($status === 1) {
+            $data['official_sn'] = strtolower($params['remark1']) == 'null' ? '' : $params['remark1'];
+            Model('refill_order')->edit($order_id, $data);
+            return [$order_id, true, false, true];
+        } elseif ($status === 9) {
+            return [$order_id, false, true, true];
+        } else {
+            return [$order_id, false, false, false];
+        }
+    }
+}

+ 155 - 0
helper/refill/api/yl/kailinyu/RefillPhone.php

@@ -0,0 +1,155 @@
+<?php
+
+namespace refill\kailinyu;
+
+require_once(BASE_HELPER_RAPI_PATH . '/kailinyu/config.php');
+
+use refill;
+use Log;
+
+class RefillPhone extends refill\IRefillPhone
+{
+    public function __construct($cfgs)
+    {
+        parent::__construct($cfgs);
+    }
+
+    private function req_params(int $phone, int $amount, $card_type, string $order_sn)
+    {
+        $params['userid'] = config::USER_ID;
+        $params['productid'] = config::ProductIdS[$card_type][$amount];
+        $params['price'] = $amount;
+        $params['num'] = 1;
+        $params['mobile'] = $phone;
+        $params['spordertime'] = date("YmdHis");
+        $params['sporderid'] = $order_sn;
+        $params['back_url'] = config::NOTIFY_URL;
+        $params['paytype'] = config::operator[$card_type];
+
+        return $params;
+    }
+
+    public function add($card_no, $card_type, $amount, $params,&$net_errno = 0)
+    {
+        $order_sn = $params['order_sn'];
+        $params = $this->req_params($card_no, $amount, $card_type, $order_sn);
+
+        $sign = $this->sign($params);
+        $params['sign'] = $sign;
+
+        $resp = http_request(config::ORDER_URL, $params, 'POST', false, config::ExtHeaders, $net_errno);
+
+        if (empty($resp)) {
+            return [false, '网络错误', true];
+        }
+        else
+        {
+            Log::record($resp, Log::DEBUG);
+            $resp = $this->xmlToArray($resp);
+            if (empty($resp)) {
+                return [false, '网络错误', true];
+            }
+
+            $resultno = $resp['resultno'];
+            if (in_array($resultno, ['0', '2'], true)) {
+                return [true, $resp['orderid'], false];
+            } elseif (in_array($resultno, config::ERR_NOS, true)) {
+                return [false, $resultno, false];
+            } elseif ($resultno === '9999' || $resultno === '5006') {
+                $net_errno = "HTTP-{$resultno}";
+                return [false, $resultno, true];
+            } else {
+                //未知结果码
+                $err = 998;
+                $net_errno = "HTTP-{$err}";
+                return [false, $resultno, true];
+            }
+        }
+    }
+
+    public function query($refill_info)
+    {
+        $params['userid'] = config::USER_ID;
+        $params['sporderid'] = $refill_info['order_sn'];
+        $key = config::KEY;
+        $content = "userid={$params['userid']}&sporderid={$params['sporderid']}&key={$key}";
+        $params['sign'] = strtoupper(md5($content));
+
+        $resp = http_request(config::QUERY_URL, $params, 'POST', false, config::ExtHeaders);
+
+        if (empty($resp)) {
+            return [false, '网络错误'];
+        }
+        else
+        {
+            Log::record($resp, Log::DEBUG);
+            $resp = $this->xmlToArray($resp);
+            if (empty($resp))
+            {
+                return [false, '网络错误'];
+            }
+            else
+            {
+                $resultno = $resp['resultno'];
+                if ($resultno === '1') {
+                    $updata['official_sn'] = $resp['remark1'];
+                    Model('refill_order')->edit($refill_info['order_id'], $updata);
+                    $order_state = ORDER_STATE_SUCCESS;
+                } elseif ($resultno === '9') {
+                    $order_state = ORDER_STATE_CANCEL;
+                } elseif (in_array($resultno, ['0','2'], true)) {
+                    $order_state = ORDER_STATE_SEND;
+                } elseif ($resultno === '5007' && (time() - $refill_info['commit_time'] > 600)) {
+                    $order_state = ORDER_STATE_NOEXIST;
+                } else {
+                    return [false, $resultno];
+                }
+
+                return [true, $order_state];
+            }
+        }
+    }
+
+    public function balance()
+    {
+        $params['userid'] = config::USER_ID;
+        $key = config::KEY;
+        $content = "userid={$params['userid']}&key={$key}";
+        $params['sign'] = strtoupper(md5($content));
+
+        $resp = http_request(config::BALANCE_URL, $params, 'POST', false, config::ExtHeaders);
+
+        if (empty($resp)) {
+            return [false, '网络错误'];
+        }
+        else
+        {
+            Log::record($resp, Log::DEBUG);
+            $resp = $this->xmlToArray($resp);
+            if (empty($resp)) {
+                return [false, '网络错误'];
+            } elseif ($resp['resultno'] === '1') {
+                return [true, $resp['balance']];
+            } else {
+                return [false, $resp['resultno']];
+            }
+        }
+    }
+
+    private function sign($params)
+    {
+        $userid = config::USER_ID;
+        $key = config::KEY;
+        $content = "userid={$userid}&productid={$params['productid']}&price={$params['price']}&num={$params['num']}&mobile={$params['mobile']}&spordertime={$params['spordertime']}";
+        $content .= "&sporderid={$params['sporderid']}&key={$key}";
+        return strtoupper(md5($content));
+    }
+
+    public function xmlToArray($xml)
+    {
+        $replace_str = str_replace(' ','','encoding="gb2312"');
+        $xml = mb_convert_encoding($xml,"UTF-8","gb2312");
+        $xml = str_replace($replace_str, "encoding='utf-8'", $xml);
+        return refill\util::xmlToArray($xml);
+    }
+}

+ 55 - 0
helper/refill/api/yl/kailinyu/config.php

@@ -0,0 +1,55 @@
+<?php
+
+
+namespace refill\kailinyu;
+
+use mtopcard;
+class config
+{
+    //https://www.showdoc.com.cn/AQL666666/
+    const ORDER_URL = 'http://116.62.32.89:9086/onlinepay.do';
+    const QUERY_URL= 'http://116.62.32.89:9086/searchpay.do';
+    const BALANCE_URL = 'http://116.62.32.89:9086/searchbalance.do';
+
+    const USER_ID= '10003105';
+    const KEY = 'hDRHw7StsnRTFEZmFnEbmrkGajW3WyQB';
+    const NOTIFY_URL = BASE_SITE_URL . "/mobile/callback/refill_kailinyu.php";
+    const operator = [
+        mtopcard\ChinaMobileCard  => 'yd',
+        mtopcard\ChinaUnicomCard  => 'lt',
+        mtopcard\ChinaTelecomCard => 'dx'
+    ];
+    const ERR_NOS = [
+        '5001','5002','5003','5004','5005','5008','5009','5010','5011','5012'
+    ];
+    const ExtHeaders = ['Content-Type:application/x-www-form-urlencoded;'];
+    const ProductIdS = [
+        mtopcard\ChinaMobileCard =>
+            [
+                30  => '101687',
+                50  => '101688',
+                100 => '101689',
+                200 => '101690',
+                300 => '30000000912',
+                500 => '30000000913',
+            ],
+        mtopcard\ChinaUnicomCard =>
+            [
+                30  => '101705',
+                50  => '101706',
+                100 => '101707',
+                200 => '101708',
+                300 => '101709',
+                500 => '101710',
+            ],
+        mtopcard\ChinaTelecomCard =>
+            [
+                30  => '101723',
+                50  => '101724',
+                100 => '101725',
+                200 => '101726',
+                300 => '101727',
+                500 => '101728',
+            ]
+    ];
+}

+ 35 - 0
helper/refill/api/yl/kailinyu/对接文档-yezi.txt

@@ -0,0 +1,35 @@
+凯霖宇
+http://116.62.32.89:7080/
+账号:椰林
+密码:yelin123456
+
+ID:10003105
+密钥:hDRHw7StsnRTFEZmFnEbmrkGajW3WyQB
+
+http://116.62.32.89:9086/onlinepay.do 下单地址
+http://116.62.32.89:9086/searchpay.do 订单主动查询地址
+http://116.62.32.89:9086/searchbalance.do 余额查询
+
+api接口文档地址:https://www.showdoc.com.cn/AQL666666/
+白名单地址: 116.62.32.89
+
+101687  全国移动话费30元直充
+101688  全国移动话费50元直充
+101689  全国移动话费100元直充
+101690  全国移动话费200元直充
+30000000912  全国移动300元直充
+30000000913  全国移动500元直充
+
+101705  全国联通话费30元直充
+101706  全国联通话费50元直充
+101707  全国联通话费100元直充
+101708  全国联通话费200元直充
+101709  全国联通话费300元直充
+101710  全国联通话费500元直充
+
+101723  全国电信话费30元直充
+101724  全国电信话费50元直充
+101725  全国电信话费100元直充
+101726  全国电信话费200元直充
+101727  全国电信话费300元直充
+101728  全国电信话费500元直充

+ 2 - 2
helper/refill/api/yl/lingzhman/config.php

@@ -10,8 +10,8 @@ class config
     const QUERY_URL = 'http://47.108.202.150/flow-receiver/fee/query/single';
     const BALANCE_URL = 'http://47.108.202.150/flow-receiver/fee/balance/query';
     const NOTIFY_URL = BASE_SITE_URL . '/mobile/callback/refill_lingzhman.php';
-    const ACCOUNT = 'yzmc';
-    const KEY = 'b225132ca8fc47d98c245fc231623dbb';
+    const ACCOUNT = 'yelinhc';
+    const KEY = '0fb0ecdbc0694dd49f1e8d62420e2da2';
 
     const ProductIDS = [
         mtopcard\ChinaMobileCard => [

+ 3 - 5
helper/refill/api/yl/lingzhman/椰子慢充.txt

@@ -1,16 +1,14 @@
 http://47.108.202.150/flow-consumer/login.html
-账号	yzmc
+账号 yelinhc
 密码	123456
-密钥	b225132ca8fc47d98c245fc231623dbb
+密钥 0fb0ecdbc0694dd49f1e8d62420e2da2
 
 
 
 
 下单地址
 http://47.108.202.150/flow-receiver/fee/recharge
-批量查询地址
-http://47.108.202.150/flow-receiver/fee/query
-单个查询地址
+查询地址
 http://47.108.202.150/flow-receiver/fee/query/single
 余额查询地址
 http://47.108.202.150/flow-receiver/fee/balance/query

+ 14 - 4
helper/refill/api/yl/pengxinda/API信息.txt

@@ -1,7 +1,7 @@
 
-账号:beijingyz
-密码:yz12345
-秘钥:DA01B4249BA58CB8738A8BDA58A253E7
+账号:beijingqdw
+密码:123456
+秘钥:52069208FD1101B4BC7C86C47A8F40AD
 
 查询地址:http://39.105.7.52:8081/api/products.jsp
 充值地址:http://39.105.7.52:8081/api/recharge.jsp
@@ -28,4 +28,14 @@
  11002100 	电信电渠全国100	
  11002200 	电信电渠全国200	
  11002300 	电信电渠全国300	
- 11002500 	电信电渠全国500
+ 11002500 	电信电渠全国500
+
+ 2022.4.13新增
+ 100210	移动话费10
+ 100220	移动话费20
+
+ 1200210	联通10
+ 1200220	联通20
+
+ 1100210	电信10
+ 1100220	电信20

+ 8 - 2
helper/refill/api/yl/pengxinda/config.php

@@ -9,11 +9,13 @@ class config
     const QUERY_URL = 'http://39.105.7.52:8081/api/recharge_result.jsp';
     const BALANCE_URL = 'http://39.105.7.52:8081/api/balance.jsp';
 
-    const API_USER_ID = 'beijingyz';
-    const KEY = 'DA01B4249BA58CB8738A8BDA58A253E7';
+    const API_USER_ID = 'beijingqdw';
+    const KEY = '52069208FD1101B4BC7C86C47A8F40AD';
     const NOTIFY_URL = BASE_SITE_URL . "/mobile/callback/refill_pengxinda.php";
     const Product = [
         mtopcard\ChinaMobileCard => [
+            10  => 100210,
+            20  => 100220,
             50  => 100250,
             100 => 1002100,
             200 => 1002200,
@@ -21,6 +23,8 @@ class config
             500 => 1002500
         ],
         mtopcard\ChinaUnicomCard => [
+            10  => 1200210,
+            20  => 1200220,
             30  => 1200230,
             50  => 1200250,
             100 => 12002100,
@@ -28,6 +32,8 @@ class config
             300 => 12002300
         ],
         mtopcard\ChinaTelecomCard => [
+            10  => 1100210,
+            20  => 1100220,
             50  => 1100250,
             100 => 11002100,
             200 => 11002200,

+ 34 - 17
helper/refill/api/yl/yunchonggongman/RefillCallBack.php

@@ -8,8 +8,10 @@ class RefillCallBack implements refill\IRefillCallBack
 {
     public function verify($params): bool
     {
-        $sign = $this->sign($params);
-        if ($params['szVerifyString'] == $sign) {
+        $input = $params;
+        unset($input['sign']);
+        $sign = $this->sign($input);
+        if ($params['sign'] == $sign) {
             return true;
         } else {
             return false;
@@ -18,33 +20,48 @@ class RefillCallBack implements refill\IRefillCallBack
 
     private function sign($params)
     {
-        $userid = config::USER_ID;
-        $key = config::KEY;
-        $content = "szAgentId={$userid}&szOrderId={$params['szOrderId']}&szPhoneNum={$params['szPhoneNum']}&nDemo={$params['nDemo']}&fSalePrice={$params['fSalePrice']}";
-        $content .= "&nFlag={$params['nFlag']}&szKey={$key}";
+        $params['appSecret'] = config::APP_SECRET;
+        ksort($params);
+        $content = '';
+        foreach ($params as $key => $value) {
+            if($this->check_empty($value) === false) {
+                $content .= "{$key}={$value}&";
+            }
+        }
+        $content = rtrim($content, '&');
         return md5($content);
     }
 
+    private function check_empty($value)
+    {
+        if (!isset($value))
+            return true;
+        if ($value === null)
+            return true;
+        if (trim($value) === "")
+            return true;
+
+        return false;
+    }
+
     public function notify($params)
     {
-        $status = intval($params['nFlag']);
-        $order_sn = $params['szOrderId'];
+        $status = intval($params['orderStatus']);
+        $order_sn = $params['outOrderId'];
         $order_info = Model('vr_order')->getOrderInfo(['order_sn' => $order_sn]);
         if (empty($order_info)) {
             return [false, false, false,false];
         }
-        $order_id = $order_info['order_id'];
 
+        $order_id = $order_info['order_id'];
         if ($status === 2) {
-            $data['official_sn'] = strtolower($params['szRtnMsg']) == 'null' ? '' : $params['szRtnMsg'];
+            $data['official_sn'] = strtolower($params['ext1']) == 'null' ? '' : $params['ext1'];
             Model('refill_order')->edit($order_id, $data);
-            return [$order_id, true, false,true];
-        }
-        elseif ($status === 3) {
-            return [$order_id, false, true,true];
-        }
-        else {
-            return [$order_id, false, false,false];
+            return [$order_id, true, false, true];
+        } elseif ($status === 3) {
+            return [$order_id, false, true, true];
+        } else {
+            return [$order_id, false, false, false];
         }
     }
 }

+ 70 - 55
helper/refill/api/yl/yunchonggongman/RefillPhone.php

@@ -16,15 +16,14 @@ class RefillPhone extends refill\IRefillPhone
 
     private function req_params(int $phone, int $amount, int $card_type, string $order_sn)
     {
-        $params['szAgentId'] = config::USER_ID;
-        $params['szOrderId'] = $order_sn;
-        $params['szPhoneNum'] = $phone;
-        $params['nMoney'] = $amount;
-        $params['nSortType'] = config::operator[$card_type];
-        $params['nProductClass'] = 1;
-        $params['nProductType'] = 1;
-        $params['szTimeStamp'] = date("Y-m-d H:i:s");
-        $params['szNotifyUrl'] = config::NOTIFY_URL;
+        $params['appId'] = config::APP_ID;
+        $params['outOrderId'] = $order_sn;
+        $params['uuid'] = $phone;
+        $params['itemId'] = config::PRODUCT[$card_type][$amount];
+        $params['itemFace'] = $amount;
+        $params['amount'] = 1;
+        $params['callbackUrl'] = config::NOTIFY_URL;
+        $params['timestamp'] = date("YmdHis").$this->get_millisecond();
         return $params;
     }
 
@@ -32,9 +31,11 @@ class RefillPhone extends refill\IRefillPhone
     {
         $order_sn = $params['order_sn'];
         $params = $this->req_params($card_no, $amount, $card_type, $order_sn);
-
+        if(empty($params['itemId'])) {
+            return [false, '商品编号错误', false];
+        }
         $sign = $this->sign($params);
-        $params['szVerifyString'] = $sign;
+        $params['sign'] = $sign;
 
         $resp = http_request(config::ORDER_URL, $params, 'POST', false, config::ExtHeaders, $net_errno);
 
@@ -45,32 +46,28 @@ class RefillPhone extends refill\IRefillPhone
         {
             Log::record($resp, Log::DEBUG);
             $resp = json_decode($resp, true);
-
-            $nRtn = $resp['nRtn'];
             if (empty($resp)) {
                 return [false, '网络错误', true];
-            } elseif ($nRtn === 0) {
-                return [true, '', false];
-            } elseif (in_array($nRtn, config::ERR_NOS, true)) {
-                return [false, $resp['szRtnCode'], false];
-            } elseif (in_array($nRtn, [2050, 999], true)) {
-                $net_errno = "HTTP-{$nRtn}";
-                return [false, $resp['szRtnCode'], true];
+            } elseif ($resp['code'] === '00') {
+                return [true, $resp['orderId'], false];
+            } elseif (in_array($resp['code'], config::ERRCODES, true)) {
+                return [false, $resp['msg'], false];
+            } elseif (in_array($resp['code'], ['-22', '-23', '-99'], true)) {
+                $net_errno = "HTTP-{$resp['code']}";
+                return [false, $resp['msg'], true];
             } else {
-                $err = 998;
-                $net_errno = "HTTP-{$err}";
-                return [false, $resp['szRtnCode'], true];
+                $net_errno = "HTTP-998";
+                return [false, $resp['msg'], true];
             }
         }
     }
 
     public function query($refill_info)
     {
-        $params['szAgentId'] = config::USER_ID;
-        $params['szOrderId'] = $refill_info['order_sn'];
-        $key = config::KEY;
-        $content = "szAgentId={$params['szAgentId']}&szOrderId={$params['szOrderId']}&szKey={$key}";
-        $params['szVerifyString'] = md5($content);
+        $params['appId'] = config::APP_ID;
+        $params['outOrderId'] = $refill_info['order_sn'];
+        $params['timestamp'] = date("YmdHis").$this->get_millisecond();
+        $params['sign'] = $this->sign($params);
 
         $resp = http_request(config::QUERY_URL, $params, 'POST', false, config::ExtHeaders);
 
@@ -84,32 +81,36 @@ class RefillPhone extends refill\IRefillPhone
             if (empty($resp)) {
                 return [false, '网络错误'];
             }
-
-            $status = $resp['nRtn'];
-            if ($status === 5012) {
-                $updata['official_sn'] = $resp['szRtnMsg'];
-                Model('refill_order')->edit($refill_info['order_id'], $updata);
-                $order_state = ORDER_STATE_SUCCESS;
-            } elseif ($status === 5013) {
-                $order_state = ORDER_STATE_CANCEL;
-            } elseif (in_array($status, [5011,5019],true)) {
-                $order_state = ORDER_STATE_SEND;
-            } elseif ($status === 5005 && (time() - $refill_info['commit_time'] >= 300)) {
-                $order_state = ORDER_STATE_NOEXIST;
-            } else {
-                return [false, $resp['szRtnMsg']];
+            elseif ($resp['code'] === '00')
+            {
+                $status = $resp['orderStatus'];
+                if ($status === '2') {
+                    $updata['official_sn'] = $resp['ext1'];
+                    Model('refill_order')->edit($refill_info['order_id'], $updata);
+                    $order_state = ORDER_STATE_SUCCESS;
+                } elseif ($status === '3') {
+                    $order_state = ORDER_STATE_CANCEL;
+                } elseif ($status === '1') {
+                    $order_state = ORDER_STATE_SEND;
+                } elseif ($status === '4' && (time() - $refill_info['commit_time'] >= 600)) {
+                    $order_state = ORDER_STATE_NOEXIST;
+                } else {
+                    return [false, $resp['msg']];
+                }
+                return [true, $order_state];
+            }
+            else
+            {
+                return [false, $resp['msg']];
             }
-
-            return [true, $order_state];
         }
     }
 
     public function balance()
     {
-        $params['szAgentId'] = config::USER_ID;
-        $key = config::KEY;
-        $content = "szAgentId={$params['szAgentId']}&szKey={$key}";
-        $params['szVerifyString'] = md5($content);
+        $params['appId'] = config::APP_ID;
+        $params['timestamp'] = date("YmdHis").$this->get_millisecond();
+        $params['sign'] = $this->sign($params);
 
         $resp = http_request(config::BALANCE_URL, $params, 'POST', false, config::ExtHeaders);
 
@@ -122,20 +123,34 @@ class RefillPhone extends refill\IRefillPhone
             $resp = json_decode($resp, true);
             if (empty($resp)) {
                 return [false, '网络错误'];
-            } elseif ($resp['nRtn'] == 0) {
-                return [true, $resp['fBalance']];
+            } elseif ($resp['code'] === '00') {
+                return [true, $resp['balance']];
             } else {
-                return [false, $resp['szRtnCode']];
+                return [false, $resp['msg']];
             }
         }
     }
 
+    /**
+     * 获取毫秒级别的时间戳
+     */
+    private function get_millisecond()
+    {
+        list($usec, $sec) = explode(" ", microtime());
+        return round($usec*1000);
+    }
+
     private function sign($params)
     {
-        $userid = config::USER_ID;
-        $key = config::KEY;
-        $content = "szAgentId={$userid}&szOrderId={$params['szOrderId']}&szPhoneNum={$params['szPhoneNum']}&nMoney={$params['nMoney']}&nSortType={$params['nSortType']}";
-        $content .= "&nProductClass={$params['nProductClass']}&nProductType={$params['nProductType']}&szTimeStamp={$params['szTimeStamp']}&szKey={$key}";
+        $params['appSecret'] = config::APP_SECRET;
+        ksort($params);
+        $content = '';
+        foreach ($params as $key => $value) {
+            if($this->check_empty($value) === false) {
+                $content .= "{$key}={$value}&";
+            }
+        }
+        $content = rtrim($content, '&');
         return md5($content);
     }
 }

+ 25 - 9
helper/refill/api/yl/yunchonggongman/api.txt

@@ -1,11 +1,27 @@
+鍚庡彴鍦板潃锛歨ttp://119.23.54.206:8888
+甯愬彿锛歮anlin
+密码:680277
+浜岀骇瀵嗙爜锛歨ohK6753
+appId:9CXMXkMCwx
+appSecret锛欸xtFpxPgsoTebGCp
+后台-商品列表,可查看已配置商品信息
+后台-安全中心,可配置IP白名单
+鎺ュ彛鏂囨。锛歨ttps://www.showdoc.com.cn/1686453783298366/7925312871840290
+璇濊垂鐩村厖鎺ュ彛锛歨ttp://119.23.54.206:8911/api/hf/order/submit
+閫氱敤鐩村厖鎺ュ彛锛歨ttp://119.23.54.206:8911/api/order/submit
+鍗″瘑鎻愬彇鎺ュ彛锛歨ttp://119.23.54.206:8911/api/card/get
+鏌ヨ�鎺ュ彛鎺ュ彛锛歨ttp://119.23.54.206:8911/api/order/query
+浣欓�鏌ヨ�鎺ュ彛锛歨ttp://119.23.54.206:8911/api/account/balance
 
-话费下单地址:http://47.98.253.40:10186/plat/api/old/submitorder
-查询地址:http://47.98.253.40:10186/plat/api/old/queryorder
-查询余额地址:http://47.98.253.40:10186/plat/api/old/queryBalance
-系统及客户端地址:http://47.98.253.40:10186/plat/index
-账号 yezi
-密码123456
-ID:200008
-秘钥:3c2372623d07477499cf8e35710c7a7f
 
-对接文档地址:https://docs.qq.com/doc/DWkV1VkxQVk13eEtQ
+100119
+慢充联通100
+100120
+慢充联通200
+100111
+鎱㈠厖鐢典俊100
+100112
+鎱㈠厖鐢典俊200
+
+100121
+鎱㈠厖鐢典俊50

+ 20 - 14
helper/refill/api/yl/yunchonggongman/config.php

@@ -6,22 +6,28 @@ namespace refill\yunchonggongman;
 use mtopcard;
 class config
 {
-    //903
-    const ORDER_URL = 'http://47.98.253.40:10186/plat/api/old/submitorder';
-    const QUERY_URL= 'http://47.98.253.40:10186/plat/api/old/queryorder';
-    const BALANCE_URL= 'http://47.98.253.40:10186/plat/api/old/queryBalance';
+    const ORDER_URL = 'http://119.23.54.206:8911/api/order/submit';
+    const QUERY_URL = 'http://119.23.54.206:8911/api/order/query';
+    const BALANCE_URL = 'http://119.23.54.206:8911/api/account/balance';
 
-    const USER_ID= '200008';
-    const KEY = '3c2372623d07477499cf8e35710c7a7f';
+    const APP_ID = '9CXMXkMCwx';
+    const APP_SECRET = 'GxtFpxPgsoTebGCp';
     const NOTIFY_URL = BASE_SITE_URL . "/mobile/callback/refill_yunchonggongman.php";
-    const operator = [
-        mtopcard\ChinaMobileCard  => 1,
-        mtopcard\ChinaUnicomCard  => 2,
-        mtopcard\ChinaTelecomCard => 3
-    ];
-    const ExtHeaders = ['Content-Type:application/x-www-form-urlencoded;charset=utf-8'];
 
-    const ERR_NOS = [
-        1000,1001,1003,1004,2001,2002,2003,2020,2021,1006,2030,3003
+    const PRODUCT = [
+        mtopcard\ChinaMobileCard => [
+
+        ],
+        mtopcard\ChinaUnicomCard => [
+            100 => 100119,
+            200 => 100120
+        ],
+        mtopcard\ChinaTelecomCard => [
+            50  => 100121,
+            100 => 100111,
+            200 => 100112
+        ],
     ];
+    const ExtHeaders = ['Content-Type:application/x-www-form-urlencoded;charset=utf-8'];
+    const ERRCODES = ['-10', '-12', '-13', '-14', '-15', '-16', '-18', '-21'];
 }

+ 15 - 15
helper/refill/api/yl/zhongst/config.php

@@ -15,7 +15,7 @@ class config
     const NOTIFY_URL = BASE_SITE_URL . "/mobile/refill_zhongst.php";
     const PRODUCT = [
         mtopcard\ChinaMobileCard => [
-            30  => 100088,
+            30  => 100008,
             50  => 100009,
             100 => 100010,
             200 => 100011,
@@ -23,10 +23,6 @@ class config
             500 => 100013
         ],
         mtopcard\ChinaUnicomCard => [
-            1  	=> 100014,
-            2  	=> 100015,
-            3  	=> 100016,
-            4  	=> 100017,
             5  	=> 100018,
             6  	=> 100019,
             7  	=> 100020,
@@ -35,21 +31,25 @@ class config
             10  => 100023,
             20  => 100024,
             30  => 100025,
-            50  => 100026,
-            100 => 100027,
-            200 => 100028,
-            300 => 100029,
-            500 => 100030
+            50  => 100084,
+            100 => 100085,
+            200 => 100086,
+            300 => 100087
         ],
         mtopcard\ChinaTelecomCard => [
+            5  	=> 100035,
+            6  	=> 100036,
+            7  	=> 100037,
+            8  	=> 100038,
+            9  	=> 100039,
             10   => 100040,
             20   => 100041,
-            30   => 100042,
+            30   => 100181,
             50   => 100043,
-            100  => 100044,
-            200  => 100045,
-            300  => 100046,
-            500  => 100047
+            100  => 100183,
+            200  => 100184,
+            300  => 100185,
+            500  => 100186
         ],
     ];
     const ExtHeaders = ['Content-Type:application/x-www-form-urlencoded;charset=utf-8'];

+ 33 - 29
helper/refill/api/yl/zhongst/开户信息.txt

@@ -12,34 +12,38 @@ appSecret:GkSnnghIqwEyuTXy
 余额接口地址:http://112.124.58.225:8911/api/account/balance
 提卡接口地址:http://112.124.58.225:8911/api/card/get
 
-100088	移动30
-100089	移动50
-100090	移动100
-100091	移动200
-100092	移动300
+2022.4.14更新 商品编码
 
-100014  联通快充1
-100015  联通快充2
-100016  联通快充3
-100017  联通快充4
-100018  联通快充5
-100019  联通快充6
-100020  联通快充7
-100021  联通快充8
-100022  联通快充9
-100023  联通快充10
-100024  联通快充20
-100083  联通沃支付30
-100084  联通沃支付50
-100085  联通沃支付100
-100086  联通沃支付200
-100087  联通沃支付300
+100008   移动快充30
+100009   移动快充50
+100010   移动快充100
+100011   移动快充200
+100012   移动快充300
+100013   移动快充500
 
-100040  电信快充10
-100041  电信快充20
-100042	电信快充30
-100043	电信快充50
-100044	电信快充100
-100045	电信快充200
-100046	电信快充300
-100047	电信快充500
+100018   联通快充5
+100019   联通快充6
+100020   联通快充7
+100021   联通快充8
+100022   联通快充9
+100023   联通快充10
+100024   联通快充20
+100025   联通快充30
+100084    沃支付50
+100085    沃支付100
+100086    沃支付200
+100087    沃支付300
+
+100035   电信快充5
+100036   电信快充6
+100037   电信快充7
+100038   电信快充8
+100039   电信快充9
+100040   电信快充10
+100041   电信快充20
+100181   电信电渠30
+100043   电信快充50
+100183   电信电渠100
+100184   电信电渠200
+100185   电信电渠300
+100186   电信电渠500

+ 34 - 17
helper/refill/api/yl/zhongst_mix/RefillCallBack.php

@@ -8,8 +8,10 @@ class RefillCallBack implements refill\IRefillCallBack
 {
     public function verify($params): bool
     {
-        $sign = $this->sign($params);
-        if ($params['szVerifyString'] == $sign) {
+        $input = $params;
+        unset($input['sign']);
+        $sign = $this->sign($input);
+        if ($params['sign'] == $sign) {
             return true;
         } else {
             return false;
@@ -18,33 +20,48 @@ class RefillCallBack implements refill\IRefillCallBack
 
     private function sign($params)
     {
-        $userid = config::USER_ID;
-        $key = config::KEY;
-        $content = "szAgentId={$userid}&szOrderId={$params['szOrderId']}&szPhoneNum={$params['szPhoneNum']}&nDemo={$params['nDemo']}&fSalePrice={$params['fSalePrice']}";
-        $content .= "&nFlag={$params['nFlag']}&szKey={$key}";
+        $params['appSecret'] = config::APP_SECRET;
+        ksort($params);
+        $content = '';
+        foreach ($params as $key => $value) {
+            if($this->check_empty($value) === false) {
+                $content .= "{$key}={$value}&";
+            }
+        }
+        $content = rtrim($content, '&');
         return md5($content);
     }
 
+    private function check_empty($value)
+    {
+        if (!isset($value))
+            return true;
+        if ($value === null)
+            return true;
+        if (trim($value) === "")
+            return true;
+
+        return false;
+    }
+
     public function notify($params)
     {
-        $status = intval($params['nFlag']);
-        $order_sn = $params['szOrderId'];
+        $status = intval($params['orderStatus']);
+        $order_sn = $params['outOrderId'];
         $order_info = Model('vr_order')->getOrderInfo(['order_sn' => $order_sn]);
         if (empty($order_info)) {
             return [false, false, false,false];
         }
-        $order_id = $order_info['order_id'];
 
+        $order_id = $order_info['order_id'];
         if ($status === 2) {
-            $data['official_sn'] = strtolower($params['szRtnMsg']) == 'null' ? '' : $params['szRtnMsg'];
+            $data['official_sn'] = strtolower($params['ext1']) == 'null' ? '' : $params['ext1'];
             Model('refill_order')->edit($order_id, $data);
-            return [$order_id, true, false,true];
-        }
-        elseif ($status === 3) {
-            return [$order_id, false, true,true];
-        }
-        else {
-            return [$order_id, false, false,false];
+            return [$order_id, true, false, true];
+        } elseif ($status === 3) {
+            return [$order_id, false, true, true];
+        } else {
+            return [$order_id, false, false, false];
         }
     }
 }

+ 69 - 55
helper/refill/api/yl/zhongst_mix/RefillPhone.php

@@ -16,15 +16,13 @@ class RefillPhone extends refill\IRefillPhone
 
     private function req_params(int $phone, int $amount, int $card_type, string $order_sn)
     {
-        $params['szAgentId'] = config::USER_ID;
-        $params['szOrderId'] = $order_sn;
-        $params['szPhoneNum'] = $phone;
-        $params['nMoney'] = $amount;
-        $params['nSortType'] = config::operator[$card_type];
-        $params['nProductClass'] = 1;
-        $params['nProductType'] = 1;
-        $params['szTimeStamp'] = date("Y-m-d H:i:s");
-        $params['szNotifyUrl'] = config::NOTIFY_URL;
+        $params['appId'] = config::APP_ID;
+        $params['outOrderId'] = $order_sn;
+        $params['uuid'] = $phone;
+        $params['itemId'] = config::PRODUCT[$card_type][$amount];
+        $params['itemFace'] = $amount;
+        $params['callbackUrl'] = config::NOTIFY_URL;
+        $params['timestamp'] = date("YmdHis").$this->get_millisecond();
         return $params;
     }
 
@@ -32,9 +30,11 @@ class RefillPhone extends refill\IRefillPhone
     {
         $order_sn = $params['order_sn'];
         $params = $this->req_params($card_no, $amount, $card_type, $order_sn);
-
+        if(empty($params['itemId'])) {
+            return [false, '商品编号错误', false];
+        }
         $sign = $this->sign($params);
-        $params['szVerifyString'] = $sign;
+        $params['sign'] = $sign;
 
         $resp = http_request(config::ORDER_URL, $params, 'POST', false, config::ExtHeaders, $net_errno);
 
@@ -45,32 +45,28 @@ class RefillPhone extends refill\IRefillPhone
         {
             Log::record($resp, Log::DEBUG);
             $resp = json_decode($resp, true);
-
-            $nRtn = $resp['nRtn'];
             if (empty($resp)) {
                 return [false, '网络错误', true];
-            } elseif ($nRtn === 0) {
-                return [true, '', false];
-            } elseif (in_array($nRtn, config::ERR_NOS, true)) {
-                return [false, $resp['szRtnCode'], false];
-            } elseif (in_array($nRtn, [2050, 999], true)) {
-                $net_errno = "HTTP-{$nRtn}";
-                return [false, $resp['szRtnCode'], true];
+            } elseif ($resp['code'] === '00') {
+                return [true, $resp['orderId'], false];
+            } elseif (in_array($resp['code'], config::ERRCODES, true)) {
+                return [false, $resp['msg'], false];
+            } elseif (in_array($resp['code'], ['-22', '-23', '-99'], true)) {
+                $net_errno = "HTTP-{$resp['code']}";
+                return [false, $resp['msg'], true];
             } else {
-                $err = 998;
-                $net_errno = "HTTP-{$err}";
-                return [false, $resp['szRtnCode'], true];
+                $net_errno = "HTTP-998";
+                return [false, $resp['msg'], true];
             }
         }
     }
 
     public function query($refill_info)
     {
-        $params['szAgentId'] = config::USER_ID;
-        $params['szOrderId'] = $refill_info['order_sn'];
-        $key = config::KEY;
-        $content = "szAgentId={$params['szAgentId']}&szOrderId={$params['szOrderId']}&szKey={$key}";
-        $params['szVerifyString'] = md5($content);
+        $params['appId'] = config::APP_ID;
+        $params['outOrderId'] = $refill_info['order_sn'];
+        $params['timestamp'] = date("YmdHis").$this->get_millisecond();
+        $params['sign'] = $this->sign($params);
 
         $resp = http_request(config::QUERY_URL, $params, 'POST', false, config::ExtHeaders);
 
@@ -84,32 +80,36 @@ class RefillPhone extends refill\IRefillPhone
             if (empty($resp)) {
                 return [false, '网络错误'];
             }
-
-            $status = $resp['nRtn'];
-            if ($status === 5012) {
-                $updata['official_sn'] = $resp['szRtnMsg'];
-                Model('refill_order')->edit($refill_info['order_id'], $updata);
-                $order_state = ORDER_STATE_SUCCESS;
-            } elseif ($status === 5013) {
-                $order_state = ORDER_STATE_CANCEL;
-            } elseif (in_array($status, [5011,5019],true)) {
-                $order_state = ORDER_STATE_SEND;
-            } elseif ($status === 5005 && (time() - $refill_info['commit_time'] >= 300)) {
-                $order_state = ORDER_STATE_NOEXIST;
-            } else {
-                return [false, $resp['szRtnMsg']];
+            elseif ($resp['code'] === '00')
+            {
+                $status = $resp['orderStatus'];
+                if ($status === '2') {
+                    $updata['official_sn'] = $resp['ext1'];
+                    Model('refill_order')->edit($refill_info['order_id'], $updata);
+                    $order_state = ORDER_STATE_SUCCESS;
+                } elseif ($status === '3') {
+                    $order_state = ORDER_STATE_CANCEL;
+                } elseif ($status === '1') {
+                    $order_state = ORDER_STATE_SEND;
+                } elseif ($status === '4' && (time() - $refill_info['commit_time'] >= 600)) {
+                    $order_state = ORDER_STATE_NOEXIST;
+                } else {
+                    return [false, $resp['msg']];
+                }
+                return [true, $order_state];
+            }
+            else
+            {
+                return [false, $resp['msg']];
             }
-
-            return [true, $order_state];
         }
     }
 
     public function balance()
     {
-        $params['szAgentId'] = config::USER_ID;
-        $key = config::KEY;
-        $content = "szAgentId={$params['szAgentId']}&szKey={$key}";
-        $params['szVerifyString'] = md5($content);
+        $params['appId'] = config::APP_ID;
+        $params['timestamp'] = date("YmdHis").$this->get_millisecond();
+        $params['sign'] = $this->sign($params);
 
         $resp = http_request(config::BALANCE_URL, $params, 'POST', false, config::ExtHeaders);
 
@@ -122,20 +122,34 @@ class RefillPhone extends refill\IRefillPhone
             $resp = json_decode($resp, true);
             if (empty($resp)) {
                 return [false, '网络错误'];
-            } elseif ($resp['nRtn'] === 0) {
-                return [true, $resp['fBalance']];
+            } elseif ($resp['code'] === '00') {
+                return [true, $resp['balance']];
             } else {
-                return [false, $resp['szRtnCode']];
+                return [false, $resp['msg']];
             }
         }
     }
 
+    /**
+     * 获取毫秒级别的时间戳
+     */
+    private function get_millisecond()
+    {
+        list($usec, $sec) = explode(" ", microtime());
+        return round($usec*1000);
+    }
+
     private function sign($params)
     {
-        $userid = config::USER_ID;
-        $key = config::KEY;
-        $content = "szAgentId={$userid}&szOrderId={$params['szOrderId']}&szPhoneNum={$params['szPhoneNum']}&nMoney={$params['nMoney']}&nSortType={$params['nSortType']}";
-        $content .= "&nProductClass={$params['nProductClass']}&nProductType={$params['nProductType']}&szTimeStamp={$params['szTimeStamp']}&szKey={$key}";
+        $params['appSecret'] = config::APP_SECRET;
+        ksort($params);
+        $content = '';
+        foreach ($params as $key => $value) {
+            if($this->check_empty($value) === false) {
+                $content .= "{$key}={$value}&";
+            }
+        }
+        $content = rtrim($content, '&');
         return md5($content);
     }
 }

+ 25 - 9
helper/refill/api/yl/zhongst_mix/api.txt

@@ -1,11 +1,27 @@
-下单地址:http://39.102.121.210:10186/plat/api/old/submitorder
+后台地址:http://112.124.58.225:8888
+帐号:yelinhunchong2
+密码:044023
+二级密码:BXuO6861
+appId:UN22hYB08p
+appSecret:pKzDiCIbtrPMgXVr
+后台-商品列表,可查看已配置商品信息
+后台-安全中心,可配置IP白名单
+接口文档:https://www.showdoc.com.cn/1686453783298366/7925312871840290
+话费直充接口:http://112.124.58.225:8911/api/hf/order/submit
+通用直充接口:http://112.124.58.225:8911/api/order/submit
+卡密提取接口:http://112.124.58.225:8911/api/card/get
+查询接口接口:http://112.124.58.225:8911/api/order/query
+余额查询接口:http://112.124.58.225:8911/api/account/balance
 
-查询地址:http://39.102.121.210:10186/plat/api/old/queryorder
+100214 联通混充50
+100215 联通混充100
+100216 联通混充200
+100217 联通混充300
+100218 联通混充500
 
-查询余额地址:http://39.102.121.210:10186/plat/api/old/queryBalance
-后台地址:http://39.102.121.210:10186/plat/index
-账号:changyou
-密码:123456
-ID:200053
-秘钥:3a7d472a266b47a7a929469e46749aa7
-接口文档:https://docs.qq.com/doc/DWkV1VkxQVk13eEtQ
+100219 电信混充30
+100220 电信混充50
+100221 电信混充100
+100222 电信混充200
+100223 电信混充300
+100224 电信混充500

+ 26 - 14
helper/refill/api/yl/zhongst_mix/config.php

@@ -6,22 +6,34 @@ namespace refill\zhongst_mix;
 use mtopcard;
 class config
 {
-    //995
-    const ORDER_URL = 'http://39.102.121.210:10186/plat/api/old/submitorder';
-    const QUERY_URL= 'http://39.102.121.210:10186/plat/api/old/queryorder';
-    const BALANCE_URL= 'http://39.102.121.210:10186/plat/api/old/queryBalance';
+    const ORDER_URL = 'http://112.124.58.225:8911/api/hf/order/submit';
+    const QUERY_URL = 'http://112.124.58.225:8911/api/order/query';
+    const BALANCE_URL = 'http://112.124.58.225:8911/api/account/balance';
 
-    const USER_ID= '200053';
-    const KEY = '3a7d472a266b47a7a929469e46749aa7';
+    const APP_ID = 'UN22hYB08p';
+    const APP_SECRET = 'pKzDiCIbtrPMgXVr';
     const NOTIFY_URL = BASE_SITE_URL . "/mobile/callback/refill_zhongst_mix.php";
-    const operator = [
-        mtopcard\ChinaMobileCard  => 1,
-        mtopcard\ChinaUnicomCard  => 2,
-        mtopcard\ChinaTelecomCard => 3
-    ];
-    const ExtHeaders = ['Content-Type:application/x-www-form-urlencoded;charset=utf-8'];
 
-    const ERR_NOS = [
-        1000,1001,1003,1004,2001,2002,2003,2020,2021,1006,2030,3003
+    const PRODUCT = [
+        mtopcard\ChinaMobileCard => [
+
+        ],
+        mtopcard\ChinaUnicomCard => [
+            50  => 100214,
+            100 => 100215,
+            200 => 100216,
+            300 => 100217,
+            500 => 100218
+        ],
+        mtopcard\ChinaTelecomCard => [
+            30   => 100219,
+            50   => 100220,
+            100  => 100221,
+            200  => 100222,
+            300  => 100223,
+            500  => 100224
+        ],
     ];
+    const ExtHeaders = ['Content-Type:application/x-www-form-urlencoded;charset=utf-8'];
+    const ERRCODES = ['-10', '-12', '-13', '-14', '-15', '-16', '-18', '-21'];
 }

+ 16 - 4
test/TestRefill.php

@@ -997,10 +997,10 @@ class TestRefill extends TestCase
     {
 //        $provider = $this->getProvider('zhongst_mix');
 //        $resp = $provider->balance();
-//        $resp = $provider->add(18500608333, 5, 30, ['order_sn' => $this->make_sn()]);
-//        $resp = $provider->query(['order_sn' => '46291631503985151158']);
+//        $resp = $provider->add(18500608333, 5, 50, ['order_sn' => $this->make_sn()]);
+//        $resp = $provider->query(['order_sn' => '81331649907306739763']);
 
-        $body = '{"szOrderId":"46291631503985151158","fSalePrice":"29.85","szAgentId":"200053","nFlag":"2","szVerifyString":"be07db2c82b63bc2610eee3eac23245b","szPhoneNum":"18500608333","szRtnMsg":"","nDemo":"30"}';
+        $body = '{"orderId":"220414113514628825","appId":"aKz6PN5XIw","outOrderId":"81331649907306739763","sign":"140099d15593e363e6b2682a4c2f24c2","orderStatus":"2","completeTime":"20220414120642","orderDesc":"\u8ba2\u5355\u6210\u529f","ext1":"110103308032204141204470484590"}';
         $params = json_decode($body, true);
         $provider = $this->getProvider('zhongst_mix', 'RefillCallBack');
         $ret = $provider->verify($params);
@@ -2112,7 +2112,19 @@ class TestRefill extends TestCase
 
         $body = '{"szOrderId":"27341649750036121132","fSalePrice":"46.5","szAgentId":"200044","nFlag":"3","szVerifyString":"52b9057e467f09cf21eaceacddb475e6","szPhoneNum":"1004638637","szRtnMsg":"","nDemo":"50"}';
         $params = json_decode($body, true);
-        $provider = $this->getProvider('youhedf','RefillCallBack');
+        $provider = $this->getProvider('youhedf', 'RefillCallBack');
+    }
+
+    public function testYunchonggongman()
+    {
+//        $provider = $this->getProvider('yunchonggongman');
+//        $resp = $provider->balance();
+//        $resp = $provider->add(18500608333, 5, 100, ['order_sn' => $this->make_sn()]);
+//        $resp = $provider->query(['order_sn' => '72011649828177343273']);
+
+        $body = '{"orderId":"220413133619562061","appId":"P9EYSTJenh","outOrderId":"72011649828177343273","sign":"5294a7cea3c30049f82454012d9dd028","orderStatus":"3","completeTime":"20220413140642","orderDesc":"\u8ba2\u5355\u5931\u8d25"}';
+        $params = json_decode($body, true);
+        $provider = $this->getProvider('yunchonggongman','RefillCallBack');
         $ret = $provider->verify($params);
         $resp = $provider->notify($params);
     }

+ 30 - 0
test/TestRefillYl.php

@@ -628,4 +628,34 @@ class TestRefillYl extends TestCase
         $provider = $this->getProvider('huoshenguoman');
         $resp = $provider->balance();
     }
+
+    public function testPengxinda()
+    {
+        $provider = $this->getProvider('pengxinda');
+        $resp = $provider->balance();
+    }
+
+    public function testZhongst_mix()
+    {
+        $provider = $this->getProvider('zhongst_mix');
+        $resp = $provider->balance();
+    }
+
+    public function testYunchonggongman()
+    {
+        $provider = $this->getProvider('yunchonggongman');
+        $resp = $provider->balance();
+    }
+
+    public function testKailinyu()
+    {
+        $provider = $this->getProvider('kailinyu');
+        $resp = $provider->balance();
+    }
+
+    public function testLingzhman()
+    {
+        $provider = $this->getProvider('lingzhman');
+        $resp = $provider->balance();
+    }
 }

+ 19 - 13
test/TestSpreadsheet.php

@@ -14,13 +14,6 @@ require_once(BASE_ROOT_PATH . '/vendor/autoload.php');
 require_once(BASE_HELPER_PATH . '/bank/execl_loader.php');
 require_once(BASE_HELPER_PATH . '/bank/converter.php');
 
-//use PhpOffice\PhpSpreadsheet\Spreadsheet;
-//use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
-
-//
-//	Strangely, PHP doesn't have a mb_str_replace multibyte function
-//	As we'll only ever use this function with UTF-8 characters, we can simply "hard-code" the character set
-//
 if ((!function_exists('mb_str_replace')) &&
     (function_exists('mb_substr')) && (function_exists('mb_strlen')) && (function_exists('mb_strpos'))) {
     function mb_str_replace($search, $replace, $subject) {
@@ -75,12 +68,18 @@ class TestSpreadsheet extends TestCase
 //        $file = BASE_DATA_PATH . '/log/椰子银行/2021.11汇付宝付款明细单据数据导出.xls';
 //        $file = BASE_DATA_PATH . '/log/椰子银行/椰子建行2021-05月.xls';
 
-        $path = BASE_DATA_PATH . '/log/国研银行'; //'国研交行21-22.xls','国研浦发银行明细账2109-2202.xls','椰子招行2021-04月.xlsx','国研招行21-2202.xlsx'
-        $files = ['国研浦发银行明细账2109-2202.xls'];
+        $path = BASE_DATA_PATH . '/log/椰子招行2104-2111';
+        Log::set_level(Log::WARING);
+        Log::enable_sql(false);
+        Log::record("start",Log::WARING);
+
+
+//        $path = BASE_DATA_PATH . '/log/椰子银行';
+//        $files = ['椰子招行2021-09月.xlsx'];'椰子招行2021-09月.xlsx',
+        $files = ['椰子招行2021-11月.xlsx'];
 
         $loader = new bank\execl_loader();
-        foreach ($files as $file)
-        {
+        foreach ($files as $file) {
             $file = $path . '/' . $file;
             $loader->load_file($file);
         }
@@ -89,9 +88,16 @@ class TestSpreadsheet extends TestCase
     //docker-compose run -d phpcli php /var/www/html/phpunit-9.2.5.phar --filter "/(TestSpreadsheet::testLoadDir)( .*)?$/" --test-suffix TestSpreadsheet.php /var/www/html/test
     public function testLoadDir()
     {
-        $dir = BASE_DATA_PATH . '/log';
+        Log::set_level(Log::WARING);
+        Log::enable_sql(false);
+        Log::record("start",Log::WARING);
+
+        $dirs = [BASE_DATA_PATH . '/log/国研银行', BASE_DATA_PATH . '/log/椰子银行'];
         $loader = new bank\execl_loader();
-        $loader->load_dir($dir);
+        foreach ($dirs as $dir) {
+            $loader->load_dir($dir);
+        }
+
     }
 
     public function testFloat()

+ 1 - 1
vendor/autoload.php

@@ -4,4 +4,4 @@
 
 require_once __DIR__ . '/composer/autoload_real.php';
 
-return ComposerAutoloaderInit6f94f903accf18c0690247a05621fdb2::getLoader();
+return ComposerAutoloaderInit998192ad309e6e472f9c99c8ddf8011d::getLoader();

+ 7 - 7
vendor/composer/autoload_real.php

@@ -2,7 +2,7 @@
 
 // autoload_real.php @generated by Composer
 
-class ComposerAutoloaderInit6f94f903accf18c0690247a05621fdb2
+class ComposerAutoloaderInit998192ad309e6e472f9c99c8ddf8011d
 {
     private static $loader;
 
@@ -22,15 +22,15 @@ class ComposerAutoloaderInit6f94f903accf18c0690247a05621fdb2
             return self::$loader;
         }
 
-        spl_autoload_register(array('ComposerAutoloaderInit6f94f903accf18c0690247a05621fdb2', 'loadClassLoader'), true, true);
+        spl_autoload_register(array('ComposerAutoloaderInit998192ad309e6e472f9c99c8ddf8011d', 'loadClassLoader'), true, true);
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
-        spl_autoload_unregister(array('ComposerAutoloaderInit6f94f903accf18c0690247a05621fdb2', 'loadClassLoader'));
+        spl_autoload_unregister(array('ComposerAutoloaderInit998192ad309e6e472f9c99c8ddf8011d', 'loadClassLoader'));
 
         $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
         if ($useStaticLoader) {
             require_once __DIR__ . '/autoload_static.php';
 
-            call_user_func(\Composer\Autoload\ComposerStaticInit6f94f903accf18c0690247a05621fdb2::getInitializer($loader));
+            call_user_func(\Composer\Autoload\ComposerStaticInit998192ad309e6e472f9c99c8ddf8011d::getInitializer($loader));
         } else {
             $map = require __DIR__ . '/autoload_namespaces.php';
             foreach ($map as $namespace => $path) {
@@ -51,19 +51,19 @@ class ComposerAutoloaderInit6f94f903accf18c0690247a05621fdb2
         $loader->register(true);
 
         if ($useStaticLoader) {
-            $includeFiles = Composer\Autoload\ComposerStaticInit6f94f903accf18c0690247a05621fdb2::$files;
+            $includeFiles = Composer\Autoload\ComposerStaticInit998192ad309e6e472f9c99c8ddf8011d::$files;
         } else {
             $includeFiles = require __DIR__ . '/autoload_files.php';
         }
         foreach ($includeFiles as $fileIdentifier => $file) {
-            composerRequire6f94f903accf18c0690247a05621fdb2($fileIdentifier, $file);
+            composerRequire998192ad309e6e472f9c99c8ddf8011d($fileIdentifier, $file);
         }
 
         return $loader;
     }
 }
 
-function composerRequire6f94f903accf18c0690247a05621fdb2($fileIdentifier, $file)
+function composerRequire998192ad309e6e472f9c99c8ddf8011d($fileIdentifier, $file)
 {
     if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
         require $file;

+ 4 - 4
vendor/composer/autoload_static.php

@@ -4,7 +4,7 @@
 
 namespace Composer\Autoload;
 
-class ComposerStaticInit6f94f903accf18c0690247a05621fdb2
+class ComposerStaticInit998192ad309e6e472f9c99c8ddf8011d
 {
     public static $files = array (
         '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
@@ -91,9 +91,9 @@ class ComposerStaticInit6f94f903accf18c0690247a05621fdb2
     public static function getInitializer(ClassLoader $loader)
     {
         return \Closure::bind(function () use ($loader) {
-            $loader->prefixLengthsPsr4 = ComposerStaticInit6f94f903accf18c0690247a05621fdb2::$prefixLengthsPsr4;
-            $loader->prefixDirsPsr4 = ComposerStaticInit6f94f903accf18c0690247a05621fdb2::$prefixDirsPsr4;
-            $loader->prefixesPsr0 = ComposerStaticInit6f94f903accf18c0690247a05621fdb2::$prefixesPsr0;
+            $loader->prefixLengthsPsr4 = ComposerStaticInit998192ad309e6e472f9c99c8ddf8011d::$prefixLengthsPsr4;
+            $loader->prefixDirsPsr4 = ComposerStaticInit998192ad309e6e472f9c99c8ddf8011d::$prefixDirsPsr4;
+            $loader->prefixesPsr0 = ComposerStaticInit998192ad309e6e472f9c99c8ddf8011d::$prefixesPsr0;
 
         }, null, ClassLoader::class);
     }

+ 10 - 10
vendor/composer/installed.json

@@ -19,7 +19,7 @@
         },
         "time": "2021-12-25T01:21:49+00:00",
         "type": "library",
-        "installation-source": "source",
+        "installation-source": "dist",
         "autoload": {
             "files": [
                 "library/HTMLPurifier.composer.php"
@@ -77,7 +77,7 @@
         },
         "time": "2020-05-30T13:11:16+00:00",
         "type": "library",
-        "installation-source": "source",
+        "installation-source": "dist",
         "autoload": {
             "psr-4": {
                 "ZipStream\\": "src/"
@@ -143,7 +143,7 @@
         },
         "time": "2021-06-29T15:32:53+00:00",
         "type": "library",
-        "installation-source": "source",
+        "installation-source": "dist",
         "autoload": {
             "psr-4": {
                 "Complex\\": "classes/src/"
@@ -196,7 +196,7 @@
         },
         "time": "2021-07-01T19:01:15+00:00",
         "type": "library",
-        "installation-source": "source",
+        "installation-source": "dist",
         "autoload": {
             "psr-4": {
                 "Matrix\\": "classes/src/"
@@ -246,7 +246,7 @@
         },
         "time": "2021-07-05T08:18:36+00:00",
         "type": "library",
-        "installation-source": "source",
+        "installation-source": "dist",
         "autoload": {
             "psr-4": {
                 "MyCLabs\\Enum\\": "src/"
@@ -406,7 +406,7 @@
                 "dev-master": "1.0.x-dev"
             }
         },
-        "installation-source": "source",
+        "installation-source": "dist",
         "autoload": {
             "psr-4": {
                 "Psr\\Http\\Client\\": "src/"
@@ -457,7 +457,7 @@
                 "dev-master": "1.0.x-dev"
             }
         },
-        "installation-source": "source",
+        "installation-source": "dist",
         "autoload": {
             "psr-4": {
                 "Psr\\Http\\Message\\": "src/"
@@ -510,7 +510,7 @@
                 "dev-master": "1.0.x-dev"
             }
         },
-        "installation-source": "source",
+        "installation-source": "dist",
         "autoload": {
             "psr-4": {
                 "Psr\\Http\\Message\\": "src/"
@@ -562,7 +562,7 @@
                 "dev-master": "1.0.x-dev"
             }
         },
-        "installation-source": "source",
+        "installation-source": "dist",
         "autoload": {
             "psr-4": {
                 "Psr\\SimpleCache\\": "src/"
@@ -622,7 +622,7 @@
                 "url": "https://github.com/symfony/polyfill"
             }
         },
-        "installation-source": "source",
+        "installation-source": "dist",
         "autoload": {
             "files": [
                 "bootstrap.php"

+ 1 - 1
vendor/ezyang/htmlpurifier

@@ -1 +1 @@
-Subproject commit 12ab42bd6e742c70c0a52f7b82477fcd44e64b75
+Subproject commit 1dd3e52365c32a142fb7c9c9f8f038f18e353270

+ 1 - 0
vendor/phpoffice/phpspreadsheet

@@ -0,0 +1 @@
+Subproject commit 4a28fd6eecb11d1f8095ebb99dd2e05e78df2f50

+ 0 - 226
vendor/phpoffice/phpspreadsheet/.php-cs-fixer.dist.php

@@ -1,226 +0,0 @@
-<?php
-
-$finder = PhpCsFixer\Finder::create()
-    ->exclude('vendor')
-    ->in(__DIR__);
-
-$config = new PhpCsFixer\Config();
-$config
-    ->setRiskyAllowed(true)
-    ->setFinder($finder)
-    ->setCacheFile(sys_get_temp_dir() . '/php-cs-fixer' . preg_replace('~\W~', '-', __DIR__))
-    ->setRules([
-        'align_multiline_comment' => true,
-        'array_indentation' => true,
-        'array_syntax' => ['syntax' => 'short'],
-        'backtick_to_shell_exec' => true,
-        'binary_operator_spaces' => true,
-        'blank_line_after_namespace' => true,
-        'blank_line_after_opening_tag' => true,
-        'blank_line_before_statement' => true,
-        'braces' => true,
-        'cast_spaces' => true,
-        'class_attributes_separation' => ['elements' => ['method' => 'one', 'property' => 'one']], // const are often grouped with other related const
-        'class_definition' => true,
-        'class_keyword_remove' => false, // ::class keyword gives us better support in IDE
-        'combine_consecutive_issets' => true,
-        'combine_consecutive_unsets' => true,
-        'combine_nested_dirname' => true,
-        'comment_to_phpdoc' => true,
-        'compact_nullable_typehint' => true,
-        'concat_space' => ['spacing' => 'one'],
-        'constant_case' => true,
-        'date_time_immutable' => false, // Break our unit tests
-        'declare_equal_normalize' => true,
-        'declare_strict_types' => false, // Too early to adopt strict types
-        'dir_constant' => true,
-        'doctrine_annotation_array_assignment' => true,
-        'doctrine_annotation_braces' => true,
-        'doctrine_annotation_indentation' => true,
-        'doctrine_annotation_spaces' => true,
-        'elseif' => true,
-        'encoding' => true,
-        'ereg_to_preg' => true,
-        'escape_implicit_backslashes' => true,
-        'explicit_indirect_variable' => false, // I feel it makes the code actually harder to read
-        'explicit_string_variable' => false, // I feel it makes the code actually harder to read
-        'final_class' => false, // We need non-final classes
-        'final_internal_class' => true,
-        'final_public_method_for_abstract_class' => false, // We need non-final methods
-        'self_static_accessor' => true,
-        'fopen_flag_order' => true,
-        'fopen_flags' => true,
-        'full_opening_tag' => true,
-        'fully_qualified_strict_types' => true,
-        'function_declaration' => true,
-        'function_to_constant' => true,
-        'function_typehint_space' => true,
-        'general_phpdoc_annotation_remove' => ['annotations' => ['access', 'category', 'copyright', 'throws']],
-        'global_namespace_import' => true,
-        'header_comment' => false, // We don't use common header in all our files
-        'heredoc_indentation' => false, // Requires PHP >= 7.3
-        'heredoc_to_nowdoc' => false, // Not sure about this one
-        'implode_call' => true,
-        'include' => true,
-        'increment_style' => true,
-        'indentation_type' => true,
-        'is_null' => true,
-        'line_ending' => true,
-        'linebreak_after_opening_tag' => true,
-        'list_syntax' => ['syntax' => 'short'],
-        'logical_operators' => true,
-        'lowercase_cast' => true,
-        'lowercase_keywords' => true,
-        'lowercase_static_reference' => true,
-        'magic_constant_casing' => true,
-        'magic_method_casing' => true,
-        'mb_str_functions' => false, // No, too dangerous to change that
-        'method_argument_space' => true,
-        'method_chaining_indentation' => true,
-        'modernize_types_casting' => true,
-        'multiline_comment_opening_closing' => true,
-        'multiline_whitespace_before_semicolons' => true,
-        'native_constant_invocation' => false, // Micro optimization that look messy
-        'native_function_casing' => true,
-        'native_function_invocation' => false, // I suppose this would be best, but I am still unconvinced about the visual aspect of it
-        'native_function_type_declaration_casing' => true,
-        'new_with_braces' => true,
-        'no_alias_functions' => true,
-        'no_alternative_syntax' => true,
-        'no_binary_string' => true,
-        'no_blank_lines_after_class_opening' => true,
-        'no_blank_lines_after_phpdoc' => true,
-        'no_blank_lines_before_namespace' => false, // we want 1 blank line before namespace
-        'no_break_comment' => true,
-        'no_closing_tag' => true,
-        'no_empty_comment' => true,
-        'no_empty_phpdoc' => true,
-        'no_empty_statement' => true,
-        'no_extra_blank_lines' => true,
-        'no_homoglyph_names' => true,
-        'no_leading_import_slash' => true,
-        'no_leading_namespace_whitespace' => true,
-        'no_mixed_echo_print' => true,
-        'no_multiline_whitespace_around_double_arrow' => true,
-        'no_null_property_initialization' => true,
-        'no_php4_constructor' => true,
-        'no_short_bool_cast' => true,
-        'echo_tag_syntax' => ['format' => 'long'],
-        'no_singleline_whitespace_before_semicolons' => true,
-        'no_spaces_after_function_name' => true,
-        'no_spaces_around_offset' => true,
-        'no_spaces_inside_parenthesis' => true,
-        'no_superfluous_elseif' => false, // Might be risky on a huge code base
-        'no_superfluous_phpdoc_tags' => ['allow_mixed' => true],
-        'no_trailing_comma_in_list_call' => true,
-        'no_trailing_comma_in_singleline_array' => true,
-        'no_trailing_whitespace' => true,
-        'no_trailing_whitespace_in_comment' => true,
-        'no_unneeded_control_parentheses' => true,
-        'no_unneeded_curly_braces' => true,
-        'no_unneeded_final_method' => true,
-        'no_unreachable_default_argument_value' => true,
-        'no_unset_cast' => true,
-        'no_unset_on_property' => true,
-        'no_unused_imports' => true,
-        'no_useless_else' => true,
-        'no_useless_return' => true,
-        'no_whitespace_before_comma_in_array' => true,
-        'no_whitespace_in_blank_line' => true,
-        'non_printable_character' => true,
-        'normalize_index_brace' => true,
-        'not_operator_with_space' => false, // No we prefer to keep '!' without spaces
-        'not_operator_with_successor_space' => false, // idem
-        'nullable_type_declaration_for_default_null_value' => true,
-        'object_operator_without_whitespace' => true,
-        'ordered_class_elements' => false, // We prefer to keep some freedom
-        'ordered_imports' => true,
-        'ordered_interfaces' => true,
-        'php_unit_construct' => true,
-        'php_unit_dedicate_assert' => true,
-        'php_unit_dedicate_assert_internal_type' => true,
-        'php_unit_expectation' => true,
-        'php_unit_fqcn_annotation' => true,
-        'php_unit_internal_class' => false, // Because tests are excluded from package
-        'php_unit_method_casing' => true,
-        'php_unit_mock' => true,
-        'php_unit_mock_short_will_return' => true,
-        'php_unit_namespaced' => true,
-        'php_unit_no_expectation_annotation' => true,
-        'phpdoc_order_by_value' => ['annotations' => ['covers']],
-        'php_unit_set_up_tear_down_visibility' => true,
-        'php_unit_size_class' => false, // That seems extra work to maintain for little benefits
-        'php_unit_strict' => false, // We sometime actually need assertEquals
-        'php_unit_test_annotation' => true,
-        'php_unit_test_case_static_method_calls' => ['call_type' => 'self'],
-        'php_unit_test_class_requires_covers' => false, // We don't care as much as we should about coverage
-        'phpdoc_add_missing_param_annotation' => false, // Don't add things that bring no value
-        'phpdoc_align' => false, // Waste of time
-        'phpdoc_annotation_without_dot' => true,
-        'phpdoc_indent' => true,
-        //'phpdoc_inline_tag' => true,
-        'phpdoc_line_span' => false, // Unfortunately our old comments turn even uglier with this
-        'phpdoc_no_access' => true,
-        'phpdoc_no_alias_tag' => true,
-        'phpdoc_no_empty_return' => true,
-        'phpdoc_no_package' => true,
-        'phpdoc_no_useless_inheritdoc' => true,
-        'phpdoc_order' => true,
-        'phpdoc_return_self_reference' => true,
-        'phpdoc_scalar' => true,
-        'phpdoc_separation' => true,
-        'phpdoc_single_line_var_spacing' => true,
-        'phpdoc_summary' => true,
-        'phpdoc_to_comment' => true,
-        'phpdoc_to_param_type' => false, // Because experimental, but interesting for one shot use
-        'phpdoc_to_return_type' => false, // idem
-        'phpdoc_trim' => true,
-        'phpdoc_trim_consecutive_blank_line_separation' => true,
-        'phpdoc_types' => true,
-        'phpdoc_types_order' => true,
-        'phpdoc_var_annotation_correct_order' => true,
-        'phpdoc_var_without_name' => true,
-        'pow_to_exponentiation' => true,
-        'protected_to_private' => true,
-        //'psr0' => true,
-        //'psr4' => true,
-        'random_api_migration' => true,
-        'return_assignment' => false, // Sometimes useful for clarity or debug
-        'return_type_declaration' => true,
-        'self_accessor' => true,
-        'self_static_accessor' => true,
-        'semicolon_after_instruction' => false, // Buggy in `samples/index.php`
-        'set_type_to_cast' => true,
-        'short_scalar_cast' => true,
-        'simple_to_complex_string_variable' => false, // Would differ from TypeScript without obvious advantages
-        'simplified_null_return' => false, // Even if technically correct we prefer to be explicit
-        'single_blank_line_at_eof' => true,
-        'single_blank_line_before_namespace' => true,
-        'single_class_element_per_statement' => true,
-        'single_import_per_statement' => true,
-        'single_line_after_imports' => true,
-        'single_line_comment_style' => true,
-        'single_line_throw' => false, // I don't see any reason for having a special case for Exception
-        'single_quote' => true,
-        'single_trait_insert_per_statement' => true,
-        'space_after_semicolon' => true,
-        'standardize_increment' => true,
-        'standardize_not_equals' => true,
-        'static_lambda' => false, // Risky if we can't guarantee nobody use `bindTo()`
-        'strict_comparison' => false, // No, too dangerous to change that
-        'strict_param' => false, // No, too dangerous to change that
-        'string_line_ending' => true,
-        'switch_case_semicolon_to_colon' => true,
-        'switch_case_space' => true,
-        'ternary_operator_spaces' => true,
-        'ternary_to_null_coalescing' => true,
-        'trailing_comma_in_multiline' => true,
-        'trim_array_spaces' => true,
-        'unary_operator_spaces' => true,
-        'visibility_required' => ['elements' => ['property', 'method']], // not const
-        'void_return' => true,
-        'whitespace_after_comma_in_array' => true,
-        'yoda_style' => false,
-    ]);
-
-return $config;

+ 0 - 22
vendor/phpoffice/phpspreadsheet/.phpcs.xml.dist

@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="PHP_CodeSniffer"
-         xsi:noNamespaceSchemaLocation="vendor/squizlabs/php_codesniffer/phpcs.xsd">
-
-    <file>samples</file>
-    <file>src</file>
-    <file>tests</file>
-
-    <exclude-pattern>samples/Header.php</exclude-pattern>
-    <exclude-pattern>*/tests/Core/*/*Test\.(inc|css|js)$</exclude-pattern>
-
-    <arg name="report-width" value="200"/>
-    <arg name="parallel" value="80"/>
-    <arg name="cache" value="/tmp/.phpspreadsheet.phpcs-cache"/>
-    <arg name="colors"/>
-    <arg value="np"/>
-
-    <!-- Include the whole PSR12 standard -->
-    <rule ref="PSR12">
-        <exclude name="PSR2.Methods.MethodDeclaration.Underscore"/>
-    </rule>
-</ruleset>

File diff suppressed because it is too large
+ 0 - 958
vendor/phpoffice/phpspreadsheet/CHANGELOG.md


+ 0 - 20
vendor/phpoffice/phpspreadsheet/CONTRIBUTING.md

@@ -1,20 +0,0 @@
-# Want to contribute?
-
-If you would like to contribute, here are some notes and guidelines:
-
- - All new development happens on feature/fix branches, and are then merged to the `master` branch once stable; so the `master` branch is always the most up-to-date, working code
- - Tagged releases are made from the `master` branch
- - If you are going to be submitting a pull request, please fork from `master`, and submit your pull request back as a fix/feature branch referencing the GitHub issue number
- - Code style might be automatically fixed by `composer fix`
- - All code changes must be validated by `composer check`
- - [Helpful article about forking](https://help.github.com/articles/fork-a-repo/ "Forking a GitHub repository")
- - [Helpful article about pull requests](https://help.github.com/articles/using-pull-requests/ "Pull Requests")
-
-## How to release
-
-1. Complete CHANGELOG.md and commit
-2. Create an annotated tag
-    1. `git tag -a 1.2.3`
-    2. Tag subject must be the version number, eg: `1.2.3`
-    3. Tag body must be a copy-paste of the changelog entries
-3. Push tag with `git push --tags`, GitHub Actions will create a GitHub release automatically

+ 0 - 21
vendor/phpoffice/phpspreadsheet/LICENSE

@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2019 PhpSpreadsheet Authors
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.

+ 0 - 30
vendor/phpoffice/phpspreadsheet/README.md

@@ -1,30 +0,0 @@
-# PhpSpreadsheet
-
-[![Build Status](https://github.com/PHPOffice/PhpSpreadsheet/workflows/main/badge.svg)](https://github.com/PHPOffice/PhpSpreadsheet/actions)
-[![Code Quality](https://scrutinizer-ci.com/g/PHPOffice/PhpSpreadsheet/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/PHPOffice/PhpSpreadsheet/?branch=master)
-[![Code Coverage](https://scrutinizer-ci.com/g/PHPOffice/PhpSpreadsheet/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/PHPOffice/PhpSpreadsheet/?branch=master)
-[![Total Downloads](https://img.shields.io/packagist/dt/PHPOffice/PhpSpreadsheet)](https://packagist.org/packages/phpoffice/phpspreadsheet)
-[![Latest Stable Version](https://img.shields.io/github/v/release/PHPOffice/PhpSpreadsheet)](https://packagist.org/packages/phpoffice/phpspreadsheet)
-[![License](https://img.shields.io/github/license/PHPOffice/PhpSpreadsheet)](https://packagist.org/packages/phpoffice/phpspreadsheet)
-[![Join the chat at https://gitter.im/PHPOffice/PhpSpreadsheet](https://img.shields.io/badge/GITTER-join%20chat-green.svg)](https://gitter.im/PHPOffice/PhpSpreadsheet)
-
-PhpSpreadsheet is a library written in pure PHP and offers a set of classes that
-allow you to read and write various spreadsheet file formats such as Excel and LibreOffice Calc.
-
-## Documentation
-
-Read more about it, including install instructions, in the [official documentation](https://phpspreadsheet.readthedocs.io). Or check out the [API documentation](https://phpoffice.github.io/PhpSpreadsheet).
-
-Please ask your support questions on [StackOverflow](https://stackoverflow.com/questions/tagged/phpspreadsheet), or have a quick chat on [Gitter](https://gitter.im/PHPOffice/PhpSpreadsheet).
-
-## PHPExcel vs PhpSpreadsheet ?
-
-PhpSpreadsheet is the next version of PHPExcel. It breaks compatibility to dramatically improve the code base quality (namespaces, PSR compliance, use of latest PHP language features, etc.).
-
-Because all efforts have shifted to PhpSpreadsheet, PHPExcel will no longer be maintained. All contributions for PHPExcel, patches and new features, should target PhpSpreadsheet `master` branch.
-
-Do you need to migrate? There is [an automated tool](/docs/topics/migration-from-PHPExcel.md) for that.
-
-## License
-
-PhpSpreadsheet is licensed under [MIT](https://github.com/PHPOffice/PhpSpreadsheet/blob/master/LICENSE).

+ 0 - 110
vendor/phpoffice/phpspreadsheet/composer.json

@@ -1,110 +0,0 @@
-{
-    "name": "phpoffice/phpspreadsheet",
-    "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine",
-    "keywords": [
-        "PHP",
-        "OpenXML",
-        "Excel",
-        "xlsx",
-        "xls",
-        "ods",
-        "gnumeric",
-        "spreadsheet"
-    ],
-    "config": {
-        "sort-packages": true,
-        "allow-plugins": {
-            "dealerdirect/phpcodesniffer-composer-installer": true
-        }
-    },
-    "homepage": "https://github.com/PHPOffice/PhpSpreadsheet",
-    "type": "library",
-    "license": "MIT",
-    "authors": [
-        {
-            "name": "Maarten Balliauw",
-            "homepage": "https://blog.maartenballiauw.be"
-        },
-        {
-            "name": "Mark Baker",
-            "homepage": "https://markbakeruk.net"
-        },
-        {
-            "name": "Franck Lefevre",
-            "homepage": "https://rootslabs.net"
-        },
-        {
-            "name": "Erik Tilt"
-        },
-        {
-            "name": "Adrien Crivelli"
-        }
-    ],
-    "scripts": {
-        "check": [
-            "php-cs-fixer fix --ansi --dry-run --diff",
-            "phpcs",
-            "phpunit --color=always",
-            "phpstan analyse --ansi"
-        ],
-        "fix": [
-            "php-cs-fixer fix --ansi"
-        ],
-        "versions": [
-            "phpcs --report-width=200 samples/ src/ tests/ --ignore=samples/Header.php --standard=PHPCompatibility --runtime-set testVersion 7.3- -n"
-        ]
-    },
-    "require": {
-        "php": "^7.3 || ^8.0",
-        "ext-ctype": "*",
-        "ext-dom": "*",
-        "ext-fileinfo": "*",
-        "ext-gd": "*",
-        "ext-iconv": "*",
-        "ext-libxml": "*",
-        "ext-mbstring": "*",
-        "ext-simplexml": "*",
-        "ext-xml": "*",
-        "ext-xmlreader": "*",
-        "ext-xmlwriter": "*",
-        "ext-zip": "*",
-        "ext-zlib": "*",
-        "ezyang/htmlpurifier": "^4.13",
-        "maennchen/zipstream-php": "^2.1",
-        "markbaker/complex": "^3.0",
-        "markbaker/matrix": "^3.0",
-        "psr/http-client": "^1.0",
-        "psr/http-factory": "^1.0",
-        "psr/simple-cache": "^1.0"
-    },
-    "require-dev": {
-        "dealerdirect/phpcodesniffer-composer-installer": "dev-master",
-        "dompdf/dompdf": "^1.0",
-        "friendsofphp/php-cs-fixer": "^3.2",
-        "jpgraph/jpgraph": "^4.0",
-        "mpdf/mpdf": "8.0.17",
-        "phpcompatibility/php-compatibility": "^9.3",
-        "phpstan/phpstan": "^1.1",
-        "phpstan/phpstan-phpunit": "^1.0",
-        "phpunit/phpunit": "^8.5 || ^9.0",
-        "squizlabs/php_codesniffer": "^3.6",
-        "tecnickcom/tcpdf": "^6.4"
-    },
-    "suggest": {
-        "mpdf/mpdf": "Option for rendering PDF with PDF Writer",
-        "dompdf/dompdf": "Option for rendering PDF with PDF Writer (doesn't yet support PHP8)",
-        "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer (doesn't yet support PHP8)",
-        "jpgraph/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers"
-    },
-    "autoload": {
-        "psr-4": {
-            "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet"
-        }
-    },
-    "autoload-dev": {
-        "psr-4": {
-            "PhpOffice\\PhpSpreadsheetTests\\": "tests/PhpSpreadsheetTests",
-            "PhpOffice\\PhpSpreadsheetInfra\\": "infra"
-        }
-    }
-}

File diff suppressed because it is too large
+ 0 - 6182
vendor/phpoffice/phpspreadsheet/phpstan-baseline.neon


+ 0 - 51
vendor/phpoffice/phpspreadsheet/phpstan-conditional.php

@@ -1,51 +0,0 @@
-<?php
-
-$config = [];
-
-if (PHP_VERSION_ID < 80000) {
-    // GdImage not available before PHP8
-    $config['parameters']['ignoreErrors'][] = [
-        'message' => '~^Method .* has invalid return type GdImage\.$~',
-        'path' => __DIR__ . '/src/PhpSpreadsheet/Shared/Drawing.php',
-        'count' => 1,
-    ];
-    $config['parameters']['ignoreErrors'][] = [
-        'message' => '~^Property .* has unknown class GdImage as its type\.$~',
-        'path' => __DIR__ . '/src/PhpSpreadsheet/Worksheet/MemoryDrawing.php',
-        'count' => 1,
-    ];
-    $config['parameters']['ignoreErrors'][] = [
-        'message' => '~^Method .* has invalid return type GdImage\.$~',
-        'path' => __DIR__ . '/src/PhpSpreadsheet/Worksheet/MemoryDrawing.php',
-        'count' => 1,
-    ];
-    $config['parameters']['ignoreErrors'][] = [
-        'message' => '~^Parameter .* of method .* has invalid type GdImage\.$~',
-        'path' => __DIR__ . '/src/PhpSpreadsheet/Worksheet/MemoryDrawing.php',
-        'count' => 1,
-    ];
-    $config['parameters']['ignoreErrors'][] = [
-        'message' => '~^Class GdImage not found\.$~',
-        'path' => __DIR__ . '/src/PhpSpreadsheet/Writer/Xls/Worksheet.php',
-        'count' => 1,
-    ];
-    $config['parameters']['ignoreErrors'][] = [
-        'message' => '~^Parameter .* of method .* has invalid type GdImage\.$~',
-        'path' => __DIR__ . '/src/PhpSpreadsheet/Writer/Xls/Worksheet.php',
-        'count' => 1,
-    ];
-    // Erroneous analysis by Phpstan before PHP8 - 3rd parameter is nullable
-    $config['parameters']['ignoreErrors'][] = [
-        'message' => '#^Parameter \\#3 \\$namespace of method XMLWriter\\:\\:startElementNs\\(\\) expects string, null given\\.$#',
-        'path' => __DIR__ . '/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php',
-        'count' => 8,
-    ];
-    // Erroneous analysis by Phpstan before PHP8 - mb_strlen does not return false
-    $config['parameters']['ignoreErrors'][] = [
-        'message' => '#^Method PhpOffice\\\\PhpSpreadsheet\\\\Shared\\\\StringHelper\\:\\:countCharacters\\(\\) should return int but returns int(<0, max>)?\\|false\\.$#',
-        'path' => __DIR__ . '/src/PhpSpreadsheet/Shared/StringHelper.php',
-        'count' => 1,
-    ];
-}
-
-return $config;

+ 0 - 26
vendor/phpoffice/phpspreadsheet/phpstan.neon.dist

@@ -1,26 +0,0 @@
-includes:
-    - phpstan-baseline.neon
-    - phpstan-conditional.php
-    - vendor/phpstan/phpstan-phpunit/extension.neon
-    - vendor/phpstan/phpstan-phpunit/rules.neon
-
-parameters:
-    level: 8
-    paths:
-        - src/
-        - tests/
-    parallel:
-        processTimeout: 300.0
-    checkMissingIterableValueType: false
-    ignoreErrors:
-        - '~^Parameter \#1 \$im(age)? of function (imagedestroy|imageistruecolor|imagealphablending|imagesavealpha|imagecolortransparent|imagecolorsforindex|imagesavealpha|imagesx|imagesy) expects (GdImage|resource), GdImage\|resource given\.$~'
-        - '~^Parameter \#2 \$src_im(age)? of function imagecopy expects (GdImage|resource), GdImage\|resource given\.$~'
-        # Accept a bit anything for assert methods
-        - '~^Parameter \#2 .* of static method PHPUnit\\Framework\\Assert\:\:assert\w+\(\) expects .*, .* given\.$~'
-        - '~^Method PhpOffice\\PhpSpreadsheetTests\\.*\:\:test.*\(\) has parameter \$args with no type specified\.$~'
-
-        # Ignore all JpGraph issues
-        - '~^Constant (MARK_CIRCLE|MARK_CROSS|MARK_DIAMOND|MARK_DTRIANGLE|MARK_FILLEDCIRCLE|MARK_SQUARE|MARK_STAR|MARK_UTRIANGLE|MARK_X|SIDE_RIGHT) not found\.$~'
-        - '~^Instantiated class (AccBarPlot|AccLinePlot|BarPlot|ContourPlot|Graph|GroupBarPlot|GroupBarPlot|LinePlot|LinePlot|PieGraph|PiePlot|PiePlot3D|PiePlotC|RadarGraph|RadarPlot|ScatterPlot|Spline|StockPlot) not found\.$~'
-        - '~^Call to method .*\(\) on an unknown class (AccBarPlot|AccLinePlot|BarPlot|ContourPlot|Graph|GroupBarPlot|GroupBarPlot|LinePlot|LinePlot|PieGraph|PiePlot|PiePlot3D|PiePlotC|RadarGraph|RadarPlot|ScatterPlot|Spline|StockPlot)\.$~'
-        - '~^Access to property .* on an unknown class (AccBarPlot|AccLinePlot|BarPlot|ContourPlot|Graph|GroupBarPlot|GroupBarPlot|LinePlot|LinePlot|PieGraph|PiePlot|PiePlot3D|PiePlotC|RadarGraph|RadarPlot|ScatterPlot|Spline|StockPlot)\.$~'

+ 0 - 56
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/ArrayEnabled.php

@@ -1,56 +0,0 @@
-<?php
-
-namespace PhpOffice\PhpSpreadsheet\Calculation;
-
-use PhpOffice\PhpSpreadsheet\Calculation\Engine\ArrayArgumentHelper;
-use PhpOffice\PhpSpreadsheet\Calculation\Engine\ArrayArgumentProcessor;
-
-trait ArrayEnabled
-{
-    /**
-     * @var ArrayArgumentHelper
-     */
-    private static $arrayArgumentHelper;
-
-    private static function initialiseHelper(array $arguments): void
-    {
-        if (self::$arrayArgumentHelper === null) {
-            self::$arrayArgumentHelper = new ArrayArgumentHelper();
-        }
-        self::$arrayArgumentHelper->initialise($arguments);
-    }
-
-    protected static function evaluateSingleArgumentArray(callable $method, array $values): array
-    {
-        $result = [];
-        foreach ($values as $value) {
-            $result[] = $method($value);
-        }
-
-        return $result;
-    }
-
-    /**
-     * @param mixed ...$arguments
-     */
-    protected static function evaluateArrayArguments(callable $method, ...$arguments): array
-    {
-        self::initialiseHelper($arguments);
-        $arguments = self::$arrayArgumentHelper->arguments();
-
-        return ArrayArgumentProcessor::processArguments(self::$arrayArgumentHelper, $method, ...$arguments);
-    }
-
-    /**
-     * @param mixed ...$arguments
-     */
-    protected static function evaluateArrayArgumentsSubset(callable $method, int $limit, ...$arguments): array
-    {
-        self::initialiseHelper(array_slice($arguments, 0, $limit));
-        $trailingArguments = array_slice($arguments, $limit);
-        $arguments = self::$arrayArgumentHelper->arguments();
-        $arguments = array_merge($arguments, $trailingArguments);
-
-        return ArrayArgumentProcessor::processArguments(self::$arrayArgumentHelper, $method, ...$arguments);
-    }
-}

+ 0 - 0
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/BinaryComparison.php


Some files were not shown because too many files changed in this diff