From 9ce3b15097b795f19eb46e21b7c83df162a92938 Mon Sep 17 00:00:00 2001 From: jianglong Date: Fri, 25 Aug 2023 16:28:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 - 1648259863_20230821_cert.zip | Bin 0 -> 6539 bytes 1649053789_20230726_cert.zip | Bin 0 -> 6543 bytes application/admin/controller/Index.php | 13 +-- .../controller/qingdong/customer/Customer.php | 2 +- .../controller/qingdong/customer/Receivables.php | 2 +- .../admin/controller/qingdong/leads/Record.php | 2 +- .../admin/controller/qingdong/product/Member.php | 98 ++++++++++++++++++++- .../controller/qingdong/product/Memberproduct.php | 1 + application/admin/library/Auth.php | 2 + application/admin/model/Company.php | 4 +- .../admin/view/qingdong/product/member/buy.html | 19 +++- .../admin/view/qingdong/product/member/pay.html | 10 +++ application/api/controller/Demo.php | 2 + application/api/controller/Pay.php | 79 +++++++++++++++++ application/config.php | 9 ++ application/index/controller/Index.php | 3 +- application/route.php | 2 + cert/apiclient_cert.p12 | Bin 0 -> 2774 bytes cert/apiclient_cert.pem | 25 ++++++ cert/apiclient_key.pem | 28 ++++++ cert/证书使用说明.txt | 18 ++++ extend/fast/Auth.php | 2 +- public/.htaccess | 8 ++ public/assets/js/jquery.qrcode.min.js | 28 ++++++ public/assets/js/require-backend.js | 2 +- route/app.php | 7 ++ 27 files changed, 348 insertions(+), 21 deletions(-) create mode 100644 1648259863_20230821_cert.zip create mode 100644 1649053789_20230726_cert.zip create mode 100644 application/api/controller/Pay.php create mode 100644 cert/apiclient_cert.p12 create mode 100644 cert/apiclient_cert.pem create mode 100644 cert/apiclient_key.pem create mode 100644 cert/证书使用说明.txt create mode 100644 public/assets/js/jquery.qrcode.min.js create mode 100644 route/app.php diff --git a/.gitignore b/.gitignore index b209131..dad3644 100644 --- a/.gitignore +++ b/.gitignore @@ -2,9 +2,6 @@ /thinkphp/ /vendor/ /runtime/* -/addons/* -/public/assets/libs/ -/public/assets/addons/* /public/uploads/* .idea composer.lock diff --git a/1648259863_20230821_cert.zip b/1648259863_20230821_cert.zip new file mode 100644 index 0000000000000000000000000000000000000000..6f2c7033674eb4e470b9d99962c5d74a185f2fd3 GIT binary patch literal 6539 zcmV;68Fc1QO9KQH00;mG078isSIUhy+sg_70M-fs01^NI0AX-xV{B<b za4|Af)M+>r3Ks|P8O)453L(qPwPZK8ge-~dLm^9+kS1gwLY6TYQPwPJ7`l;lGIkNN zn-F8IYz@g0vJ8zSuKPUi``-6{IL~>`|D5yn2gfjv&;jY;80K6slN8nv`-=?-0Ty7G zlNd0}38!%!90P**>}7 z0EQDsHYfC3g=U7DHb=lzIi-n7-AvZkn2=r$4Ok+uBGI~N0c)mXl^=! z_p=&2enL0%xtz6v20tN=Dip{HQ zlV!tUW*pC&p|V0)$m`!c?DjuGE_G0=!0pb9$ue*vs_|?+3EvBrr^ z-MR-a*wx$Bg%gdQ!OBv~xz3IP45cLc{XRWsGBDv)P*hM< zSyy1wifHdl$YZNM3D$}1t~%{q6q%iWLt_iNJbJs2uxN7Qo7dx1!=ChyO0AK1t1ChK z=H@}1pI+g^hbYc3$ggAizQ5RBlfP1%Az;zma0ZHG>5RrXVygF&+3xS&*rBy)UB%~e zo3%lvu9%=&7~ePYLT}q#zq&Wp?4#J4&>NHa#<8F!-SdGzc1t3Pa%S0Kc*U1k6(S!> zi*-usyepyH9$uLIrQg1-2hVxdayeG3+`jC(+FVJs%1vo}isvw1=$rI$s;|_<;t{1} z+$N#NX*okYTAam^GwogE0k&!h4=1zPTf8siqe{iC}m@XjSor)rdUxV(2-mnV4c&b!bP zSW@QU6O4QPw5RaKU>+h8VS2Md~CwrYH2Qs;uQa8i%6wGn9uJcFS_CXID|TLMyELrv?r z?7DsBq9kp%y~6nB=}oa+(Mx3#Vj;W@#@@mshPz;LZqd)uEoO}9P{K<-M;4lwBSD

4qB;xF>LNja`lu25(r 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 x008K(f#kWSb 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 zwt)*3008K(f#kWSrequest->request('action'); if ($this->request->isPost()) { if ($action == 'refreshmenu') { @@ -264,7 +261,6 @@ class Index extends Backend $data['group_ids'] = $result4; $data['department_id'] = $result5; $data['role'] = $result5; - $data['post'] = "负责人"; $data['mobile'] = $mobile; $data['name'] = "用户".rand(100000,999999); @@ -285,13 +281,18 @@ class Index extends Backend } $result = $suerModel->getLastInsID(); + // 获取对应的admin账号 + $uinfos = Db::name('admin')->where("username",'=',$mobile)->find(); + $suerModel->where("id","=",$result)->update(["admin_id"=>$uinfos['id']]); + Db::name('admin')->where("id",'=',$uinfos['id'])->update(["cid"=>$result2]); + //建立企业与个人绑定关系 $userCompany['cid'] =$result2; - $userCompany['uid'] =$result; + $userCompany['uid'] =$uinfos['id']; $usercompanyModel = new MemberCompany(); $usercompanyModel->save($userCompany); - $memberGroupAccess['uid'] = $result; + $memberGroupAccess['uid'] = $uinfos['id']; $memberGroupAccess['cid'] = $result2; $memberGroupAccess['group_id'] = $result4; $memberGroupAccessModel = new MemberGroupAccess(); diff --git a/application/admin/controller/qingdong/customer/Customer.php b/application/admin/controller/qingdong/customer/Customer.php index 9e1d1e4..0ed0ef0 100644 --- a/application/admin/controller/qingdong/customer/Customer.php +++ b/application/admin/controller/qingdong/customer/Customer.php @@ -934,7 +934,7 @@ class Customer extends Base if (!empty($name)) { $where['name'] = ['like', '%' . $name . '%']; } - $staff = Staff::where($where)->field('id,name')->order('id desc')->paginate($pageSize, false, ['page' => $pageNumber]); + $staff = Staff::where($where)->where('cid','=',CID)->field('id,name')->order('id desc')->paginate($pageSize, false, ['page' => $pageNumber]); return json(['list' => $staff->items(), 'total' => $staff->total()]); } diff --git a/application/admin/controller/qingdong/customer/Receivables.php b/application/admin/controller/qingdong/customer/Receivables.php index 8af6f0e..8c0d95e 100644 --- a/application/admin/controller/qingdong/customer/Receivables.php +++ b/application/admin/controller/qingdong/customer/Receivables.php @@ -264,7 +264,7 @@ class Receivables extends Base { if(!empty($name)){ $where['name'] = ['like','%'.$name.'%']; } - $staff = Staff::where($where)->where(['id'=>['neq',$this->_staff->id]])->field('id,name')->order('id desc')->paginate($pageSize, false, ['page' => $pageNumber]); + $staff = Staff::where($where)->where(['cid'=>CID,'id'=>['neq',$this->_staff->id]])->field('id,name')->order('id desc')->paginate($pageSize, false, ['page' => $pageNumber]); return json(['list' => $staff->items(), 'total' => $staff->total()]); } diff --git a/application/admin/controller/qingdong/leads/Record.php b/application/admin/controller/qingdong/leads/Record.php index eacbcb3..96f2406 100644 --- a/application/admin/controller/qingdong/leads/Record.php +++ b/application/admin/controller/qingdong/leads/Record.php @@ -136,7 +136,7 @@ class Record extends Base { $this->error('创建失败'); } $follow= Field::getField('客户状态'); - $staff=Staff::where([])->column('name','id'); + $staff=Staff::where(['cid'=>CID])->column('name','id'); if($ids){ $leads=Leads::where(['id'=>$ids])->column('id,name'); diff --git a/application/admin/controller/qingdong/product/Member.php b/application/admin/controller/qingdong/product/Member.php index e029a4c..144ebdd 100644 --- a/application/admin/controller/qingdong/product/Member.php +++ b/application/admin/controller/qingdong/product/Member.php @@ -13,6 +13,7 @@ use addons\qingdong\model\ProductWarehouse; use addons\qingdong\model\Staff; use app\admin\controller\qingdong\Base; use app\admin\model\AuthGroup; +use EasyWeChat\Factory; use PhpOffice\PhpSpreadsheet\Cell\Coordinate; use PhpOffice\PhpSpreadsheet\Reader\Csv; use PhpOffice\PhpSpreadsheet\Reader\Xls; @@ -133,11 +134,26 @@ class Member extends Base */ public function buy($ids = null) { + //获取当前用户所在企业的权限组 + $company = Db::name('company')->where("id",CID)->find(); + $group_id = $company['group_id']; + + $row = $this->model->get($ids); + + //获取所有权限 + $productNow= Db::name('product')->where('group_id','=',$group_id)->find(); + if($productNow && $productNow['group_level'] >= $row['group_level']){ + return $this->success("无需升级",url("/qingdong/product/member/detail","ids={$ids}")); + } + + + $orderModel = new Order(); + $orderNo = date('YmdHis')+rand(1000,9999); $data = [ 'type' => 0, - 'order_no' => date('YmdHis')+rand(1000,9999), + 'order_no' => $orderNo, 'user_id' => $this->_staff?$this->_staff->id:'0', 'price' => $row['price'], 'title' => $row['name'], @@ -155,9 +171,49 @@ class Member extends Base ]; $orderModel->save($data); + // 创建 EasyWeChat 实例 + $payment = config('payment'); + +// $config['payment'] = $payment; + $app = Factory::payment($payment); + + // 构建微信支付订单参数 + $paymentParams = [ + 'body' => "购买会员套餐服务", + 'out_trade_no' => $orderNo, + 'total_fee' => $row['price'] * 100, // 转换为分 + 'spbill_create_ip' => $_SERVER['REMOTE_ADDR'], // 客户端IP + 'notify_url' => $payment['notify_url'], + 'trade_type' => 'NATIVE', // 扫码支付类型 + ]; + + // 调用 EasyWeChat 的统一下单方法 + $result = $app->order->unify($paymentParams); + + // 获取支付二维码链接 + $payQrCodeUrl = $result['code_url']; + + vendor('phpqrcode.phpqrcode'); + $url= $payQrCodeUrl; + $size=4; //图片大小 + $errorCorrectionLevel = "Q"; // 容错级别:L、M、Q、H + $matrixPointSize = "4"; // 点的大小:1到10 + //实例化 + $qr = new \QRcode(); + //打开缓冲区 + ob_start(); + $res = $qr::png($url, false, $errorCorrectionLevel, $matrixPointSize); + $qrcode = base64_encode(ob_get_contents()); + + //会清除缓冲区的内容,并将缓冲区关闭,但不会输出内容。 + ob_end_clean(); + $this->assign('qrcode',$qrcode); + $this->assign('row', $row); $this->assign('data', $data); $this->assign('ids', $ids); +// $this->assign('qrcode', $payQrCodeUrl); + //下单 return $this->view->fetch(); } @@ -193,5 +249,45 @@ class Member extends Base } + public function complate(){ + + // 创建 EasyWeChat 实例 + $payment = config('payment'); + $app = Factory::payment($payment); + // 处理支付回调通知 + $response = $app->handlePaidNotify(function ($message, $fail) { + // 处理订单支付状态更新等业务逻辑 + // 用户是否支付成功 + if ($message['result_code'] === 'SUCCESS') { + $extra['transaction_id'] = + // 获取订单信息 + $order_no = $message['out_trade_no']; // 假设订单号在回调通知中的字段名为 out_trade_no + $total_free = $message['total_fee']; // 假设订单金额在回调通知中的字段名为 total_fee + + $orderModel = new Order(); + $order = $orderModel->where("order_no","=",$order_no)->find(); + if(!$order || $order['pay_status'] == 1){ + return true; + } + + $update = [ + "pay_status" => 1, + "pay_way" => 1, + "pay_money" => round($total_free/100,2), + "pay_time" => time(), + "transaction_id" =>$message['transaction_id'], + ]; + $orderModel->where("id","=",$order['id'])->update($update); + } + + // 返回 true 告诉 EasyWeChat 支付通知处理成功 + return true; + }); + + return $response; + + } + + } diff --git a/application/admin/controller/qingdong/product/Memberproduct.php b/application/admin/controller/qingdong/product/Memberproduct.php index 96582d1..5312298 100644 --- a/application/admin/controller/qingdong/product/Memberproduct.php +++ b/application/admin/controller/qingdong/product/Memberproduct.php @@ -143,6 +143,7 @@ class Memberproduct extends Base $this->error('修改失败'); } } + $data = $this->model->where($map)->find(); $this->view->assign("row", $data); diff --git a/application/admin/library/Auth.php b/application/admin/library/Auth.php index 599ba0a..c688069 100644 --- a/application/admin/library/Auth.php +++ b/application/admin/library/Auth.php @@ -96,6 +96,7 @@ class Auth extends \fast\Auth $admin->logintime = time(); $admin->loginip = request()->ip(); $admin->token = Random::uuid(); + $admin->save(); Session::set("admin", $admin->toArray()); return true; @@ -541,6 +542,7 @@ class Auth extends \fast\Auth // 读取管理员当前拥有的权限节点 $userRule = $this->getRuleList2(); + $selected = $referer = []; $refererUrl = Session::get('referer'); // 必须将结果集转换为数组 diff --git a/application/admin/model/Company.php b/application/admin/model/Company.php index b55fd87..b5f3bdc 100644 --- a/application/admin/model/Company.php +++ b/application/admin/model/Company.php @@ -14,7 +14,7 @@ class Company extends Model // 自动写入时间戳字段 protected $autoWriteTimestamp = 'int'; // 定义时间戳字段名 - protected $createTime = 'create_time'; - protected $updateTime = 'update_time'; + protected $createTime = 'createtime'; + protected $updateTime = 'updatetime'; } diff --git a/application/admin/view/qingdong/product/member/buy.html b/application/admin/view/qingdong/product/member/buy.html index ce6a8ff..fef4309 100644 --- a/application/admin/view/qingdong/product/member/buy.html +++ b/application/admin/view/qingdong/product/member/buy.html @@ -65,23 +65,36 @@ +

+
+
+ 订单支付二维码 +
+
+
+
+ -
+
-
-
+
+
产品描述: {$row.description|htmlspecialchars_decode}
+ +
+ + + +
+
+ 支付二维码: + +
+
+
+
+ \ No newline at end of file diff --git a/application/api/controller/Demo.php b/application/api/controller/Demo.php index 3a992e4..c4accbf 100644 --- a/application/api/controller/Demo.php +++ b/application/api/controller/Demo.php @@ -70,4 +70,6 @@ class Demo extends Api $this->success('返回成功', ['action' => 'test3']); } + + } diff --git a/application/api/controller/Pay.php b/application/api/controller/Pay.php new file mode 100644 index 0000000..b661b05 --- /dev/null +++ b/application/api/controller/Pay.php @@ -0,0 +1,79 @@ +200]; + } + + + public function notify(){ + + // 创建 EasyWeChat 实例 + $payment = config('payment'); + $app = Factory::payment($payment); + // 处理支付回调通知 + $response = $app->handlePaidNotify(function ($message, $fail) { + // 处理订单支付状态更新等业务逻辑 + // 用户是否支付成功 + if ($message['result_code'] === 'SUCCESS') { + $extra['transaction_id'] = + // 获取订单信息 + $order_no = $message['out_trade_no']; // 假设订单号在回调通知中的字段名为 out_trade_no + $total_free = $message['total_fee']; // 假设订单金额在回调通知中的字段名为 total_fee + + $orderModel = new Order(); + $order = $orderModel->where("order_no","=",$order_no)->find(); + if(!$order || $order['pay_status'] == 1){ + return true; + } + + $update = [ + "pay_status" => 1, + "pay_way" => 1, + "pay_money" => round($total_free/100,2), + "pay_time" => time(), + "transaction_id" =>$message['transaction_id'], + ]; + $orderModel->where("id","=",$order['id'])->update($update); + + + //获取权限 更新当前企业的权限 + $product = Db::name("product")->where("id",'=',$order['org_id'])->find(); + if($product){ + $group_id = $product['group_id']; + $expire_time = strtotime("+1 years"); + $update2 = [ + "group_id" => $group_id, + "expire_time" => $expire_time, + "is_pay" => 1, + "is_default" => 0, + ]; + Db::name("company")->where("id","=",$order['cid'])->update($update2); + } + + } + + // 返回 true 告诉 EasyWeChat 支付通知处理成功 + return true; + }); + + return $response; + + } + + +} diff --git a/application/config.php b/application/config.php index ce98465..92ebcb7 100644 --- a/application/config.php +++ b/application/config.php @@ -301,4 +301,13 @@ return [ //API接口地址 'api_url' => 'https://api.fastadmin.net', ], + 'payment' => [ + 'sandbox' => false, // 是否使用沙箱模式,开发阶段建议使用沙箱模式进行测试 + 'app_id' => 'wx9b57905f0ab7e1bd', + 'mch_id' => '1648259863', + 'key' => '00b7691d86d96aebd21dd9e138f90840', + 'cert_path' => ROOT_PATH.'cert/apiclient_cert.pem', // 证书文件路径 + 'key_path' => ROOT_PATH.'cert/apiclient_key.pem',// 密钥文件路径 + 'notify_url' => 'http://shunshicrm.iiixo.com/pay/api/pay/notify', // 支付回调通知URL + ], ]; diff --git a/application/index/controller/Index.php b/application/index/controller/Index.php index 452ff98..3b092b1 100644 --- a/application/index/controller/Index.php +++ b/application/index/controller/Index.php @@ -13,7 +13,8 @@ class Index extends Frontend public function index() { - return $this->view->fetch(); + $this->redirect("/backend.php/index/index"); +// return $this->view->fetch(); } } diff --git a/application/route.php b/application/route.php index 8d93637..83cb18c 100644 --- a/application/route.php +++ b/application/route.php @@ -23,3 +23,5 @@ return [ // 'api' => 'api', // ], ]; + + diff --git a/cert/apiclient_cert.p12 b/cert/apiclient_cert.p12 new file mode 100644 index 0000000000000000000000000000000000000000..be16ecb5b6a8a8b0b0d58cbd9e165acc3804c56b GIT binary patch literal 2774 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%0A&Df z0B`_d0C@l)07C#}0CE6y0BHbb0BHbY0AT=h0A(;OFd;Ar1_dh)0|FWa00b1{Z2zHf;B)s7_3vP8IlK=n! literal 0 KcmV+b0RR6000031 diff --git a/cert/apiclient_cert.pem b/cert/apiclient_cert.pem new file mode 100644 index 0000000..0bb4335 --- /dev/null +++ b/cert/apiclient_cert.pem @@ -0,0 +1,25 @@ +-----BEGIN CERTIFICATE----- +MIIEKDCCAxCgAwIBAgIUMNGfqb6ZKjfMhkLZSklUE1kdYAkwDQYJKoZIhvcNAQEL +BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT +FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg +Q0EwHhcNMjMwODIxMDkwOTQ5WhcNMjgwODE5MDkwOTQ5WjCBgTETMBEGA1UEAwwK +MTY0ODI1OTg2MzEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMS0wKwYDVQQL +DCTlronlvr3noZXoiJzpgJrkv6Hnp5HmioDmnInpmZDlhazlj7gxCzAJBgNVBAYM +AkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAMYUTLC2tJc5ds8kjEpy8CnHVCgpjAKC22gal+N3nSxlTmD8Re87JRvZ +B1ERr6f/u0w8IAwufn1iZ0ANhdRnapUiPowzJo+GY0zy7ZUv7tZb1nNa/Po/bC0I +2b3eMV7r5dhyDrSgpCWXFckVUbG5oU8CmqcEMKph6Z+m1A5bQhCE8eYnz99v8tjO +Sk9TPbKOVwhxE9PDPitjVo0bo3dgrZOETdsnOzoU3twm9owccJlCzelkt0kHPPOe +dwp7lqJkNTYSYwOVH6nE8khg8vuWjiSdM3ZBJGsIJ9l1czKQtJv9TS2dLATw9D3I +uuMA//f8OHXeT1OlDGnJQTGUjkE6dWECAwEAAaOBuTCBtjAJBgNVHRMEAjAAMAsG +A1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGEaHR0cDovL2V2Y2Eu +aXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJDMDRC +MDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFCNjU0MjJFMTJCMjdB +OUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEBCwUAA4IBAQB5IX/C +HxwL9WgBVuz5ZctG+UFW1jXtVNmdtG1fUCFMy9SAMXmXRdn1sufB+K0BC6bEFH+f +OdIlAKcidRu7iEN1bWQRlP1FHLZ95lZQfGN6Wzcg5JCo1Nbc9NZn2gFL1Wej11iA +tVxJ1H3MYUBQGCO8P34HRhmhK5zSW9JNs5J/al+DwvNPbPX7Of7a66qqjM93toXd +PICyz9a4rcyNNR4pGT+6KzSg4SmqFRsJZBb0sIa5bjIdaiVR9Xo0078cvscsLfNb +OTqzd8qkXI2AAfoL1OwAMjNReVQY1ECJE/4//IGtUyK/QK5yA4r2lw82pXkwUGYy +6FnQWDxBpfUdd0ap +-----END CERTIFICATE----- diff --git a/cert/apiclient_key.pem b/cert/apiclient_key.pem new file mode 100644 index 0000000..b252f02 --- /dev/null +++ b/cert/apiclient_key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDGFEywtrSXOXbP +JIxKcvApx1QoKYwCgttoGpfjd50sZU5g/EXvOyUb2QdREa+n/7tMPCAMLn59YmdA +DYXUZ2qVIj6MMyaPhmNM8u2VL+7WW9ZzWvz6P2wtCNm93jFe6+XYcg60oKQllxXJ +FVGxuaFPApqnBDCqYemfptQOW0IQhPHmJ8/fb/LYzkpPUz2yjlcIcRPTwz4rY1aN +G6N3YK2ThE3bJzs6FN7cJvaMHHCZQs3pZLdJBzzznncKe5aiZDU2EmMDlR+pxPJI +YPL7lo4knTN2QSRrCCfZdXMykLSb/U0tnSwE8PQ9yLrjAP/3/Dh13k9TpQxpyUEx +lI5BOnVhAgMBAAECggEAX2DE8M55NNwptmKt3udrd2KQxmoDDe5+wakUfCZLm2YI +kLDI6AH9w2QEnue6QlXklTfaYqM8qxloCDK6v2UwsDD2F0JGDhQy2ombFxwmkDdW +kuM8Ly+84g6B8mf8M+25FjkNlbJIeAVBKztFxCNTZh0l5Mgiutg8y3BkaalNrW/M +ixZfpGb+2RQakWkgAD7fMIl+p9J1xezLI/mm+nXuN372l5jnL4yvWSdGVkcJRYNT +6ldphI0uwVCrkOR5pS8JQ161pUGZzHbKM27wEONnh4w6sNdxdyE+ok4eMI9Fmnsp +/XU3glQ9hHEHklRFLWxlPatQDDBB9MCILmsLQ5CV1QKBgQD6UJKjMHQqYoVrS72g +CLTzbqU0W9xWDwPqSCsUbVY0PcD3TR552H/nfn0IlgwUENn73D3WvQNTcPxxL7pW ++ILkMB6s9JMwz59O6c+pRg2qSPZGEzmIXcX44fhHMv1EbKW9SdqS6fO9+DRNTDqQ +ZOjJGf5J4eYyP96WwXyb5ZSrDwKBgQDKlAJ1JPrdRP6jaKJAYpuiedYiKDSsrU12 +NXBR3xyAixusGkaUvl0GT196m5vS4PmIThq78ctwnd7dufsX2eZC6aPpCWAoMHtE +KV2sY3up40u6EVywXlO/nvQJlqwGebnEC/ieQJd3/f4M2MlHdi7wPRFzq5VyIaeF +UP04IIKYjwKBgQDnY7AJ1nKr86LtyngiBapwFWn1+qy1iO/PlKLuIRw88pD8ineP +nwitUAn48+t6aRF4duFbLiJy8dEKOFqCpvsoQSs6KmQeDO9xHUXvbmiXbxbpNEBM +xJKLPSgreQESTXTwg+LfSBEfHOAMTFkevYlKzRJ57a7D6LK0nWu5GQLTFQKBgDE+ +V3aYfa7qBag9WCukjMarLUVyVpOfMRRKGzqbrLcGmbx1SrD/sWdGRiRszS0u6Rmc +Ot1zAowmpDVr70C2BEZBu0l7sPc0CdLg51dve3Epwo/BhrGMzHjpL9Ng4AJW9rRU +YKQ/eVJ+2JHQ5OTNMs3NWn+utw5eZfV/YX6SUIy7AoGBAJH0pFbJriBNUpaQSQU9 +x5deR9XKMSzUPH9gzCI1qaolbiC3zuOsEcX/N5VVWYYD6vmtNI7oxKDuE43fLzU0 +eMhs5Zc2oHEfj0672pAqaqlhGhqMaZB34EP6cs2zNWw3YBmcZ6Thaldfy55KLxOI +Qw8PlUQyKTFcRLGWlEUZ5YH8 +-----END PRIVATE KEY----- diff --git a/cert/证书使用说明.txt b/cert/证书使用说明.txt new file mode 100644 index 0000000..9a0aab1 --- /dev/null +++ b/cert/证书使用说明.txt @@ -0,0 +1,18 @@ +欢迎使用微信支付! +附件中的三份文件(证书pkcs12格式、证书pem格式、证书密钥pem格式),为接口中强制要求时需携带的证书文件。 +证书属于敏感信息,请妥善保管不要泄露和被他人复制。 +不同开发语言下的证书格式不同,以下为说明指引: + 证书pkcs12格式(apiclient_cert.p12) + 包含了私钥信息的证书文件,为p12(pfx)格式,由微信支付签发给您用来标识和界定您的身份 + 部分安全性要求较高的API需要使用该证书来确认您的调用身份 + windows上可以直接双击导入系统,导入过程中会提示输入证书密码,证书密码默认为您的商户号(如:1900006031) + 证书pem格式(apiclient_cert.pem) + 从apiclient_cert.p12中导出证书部分的文件,为pem格式,请妥善保管不要泄漏和被他人复制 + 部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供 + 您也可以使用openssl命令来自己导出:openssl pkcs12 -clcerts -nokeys -in apiclient_cert.p12 -out apiclient_cert.pem + 证书密钥pem格式(apiclient_key.pem) + 从apiclient_cert.p12中导出密钥部分的文件,为pem格式 + 部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供 + 您也可以使用openssl命令来自己导出:openssl pkcs12 -nocerts -in apiclient_cert.p12 -out apiclient_key.pem +备注说明: + 由于绝大部分操作系统已内置了微信支付服务器证书的根CA证书, 2018年3月6日后, 不再提供CA证书文件(rootca.pem)下载 \ No newline at end of file diff --git a/extend/fast/Auth.php b/extend/fast/Auth.php index f1620f2..5d3fd2d 100644 --- a/extend/fast/Auth.php +++ b/extend/fast/Auth.php @@ -262,7 +262,7 @@ class Auth //如果是企业账户 并且 该账户拥有企业全部权限 if($ism && $uid>=1000000 && count($ids) == 1 && $ids[0] == "*"){ //获取公司的权限 - $userInfo = Db::name("qingdong_staff")->where("id",$uid)->find(); + $userInfo = Db::name("qingdong_staff")->where("admin_id",$uid)->find(); $groupInfo = Db::name("company")->where("id",$userInfo['cid'])->find(); $groups = Db::name("auth_group")->where("id",$groupInfo['group_id'])->find(); $ids = explode(',', trim($groups['rules'], ',')); diff --git a/public/.htaccess b/public/.htaccess index e69de29..d9ee23c 100644 --- a/public/.htaccess +++ b/public/.htaccess @@ -0,0 +1,8 @@ + + Options +FollowSymlinks -Multiviews + RewriteEngine On + + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L] + diff --git a/public/assets/js/jquery.qrcode.min.js b/public/assets/js/jquery.qrcode.min.js new file mode 100644 index 0000000..fe9680e --- /dev/null +++ b/public/assets/js/jquery.qrcode.min.js @@ -0,0 +1,28 @@ +(function(r){r.fn.qrcode=function(h){var s;function u(a){this.mode=s;this.data=a}function o(a,c){this.typeNumber=a;this.errorCorrectLevel=c;this.modules=null;this.moduleCount=0;this.dataCache=null;this.dataList=[]}function q(a,c){if(void 0==a.length)throw Error(a.length+"/"+c);for(var d=0;da||this.moduleCount<=a||0>c||this.moduleCount<=c)throw Error(a+","+c);return this.modules[a][c]},getModuleCount:function(){return this.moduleCount},make:function(){if(1>this.typeNumber){for(var a=1,a=1;40>a;a++){for(var c=p.getRSBlocks(a,this.errorCorrectLevel),d=new t,b=0,e=0;e=d;d++)if(!(-1>=a+d||this.moduleCount<=a+d))for(var b=-1;7>=b;b++)-1>=c+b||this.moduleCount<=c+b||(this.modules[a+d][c+b]= +0<=d&&6>=d&&(0==b||6==b)||0<=b&&6>=b&&(0==d||6==d)||2<=d&&4>=d&&2<=b&&4>=b?!0:!1)},getBestMaskPattern:function(){for(var a=0,c=0,d=0;8>d;d++){this.makeImpl(!0,d);var b=j.getLostPoint(this);if(0==d||a>b)a=b,c=d}return c},createMovieClip:function(a,c,d){a=a.createEmptyMovieClip(c,d);this.make();for(c=0;c=f;f++)for(var i=-2;2>=i;i++)this.modules[b+f][e+i]=-2==f||2==f||-2==i||2==i||0==f&&0==i?!0:!1}},setupTypeNumber:function(a){for(var c= +j.getBCHTypeNumber(this.typeNumber),d=0;18>d;d++){var b=!a&&1==(c>>d&1);this.modules[Math.floor(d/3)][d%3+this.moduleCount-8-3]=b}for(d=0;18>d;d++)b=!a&&1==(c>>d&1),this.modules[d%3+this.moduleCount-8-3][Math.floor(d/3)]=b},setupTypeInfo:function(a,c){for(var d=j.getBCHTypeInfo(this.errorCorrectLevel<<3|c),b=0;15>b;b++){var e=!a&&1==(d>>b&1);6>b?this.modules[b][8]=e:8>b?this.modules[b+1][8]=e:this.modules[this.moduleCount-15+b][8]=e}for(b=0;15>b;b++)e=!a&&1==(d>>b&1),8>b?this.modules[8][this.moduleCount- +b-1]=e:9>b?this.modules[8][15-b-1+1]=e:this.modules[8][15-b-1]=e;this.modules[this.moduleCount-8][8]=!a},mapData:function(a,c){for(var d=-1,b=this.moduleCount-1,e=7,f=0,i=this.moduleCount-1;0g;g++)if(null==this.modules[b][i-g]){var n=!1;f>>e&1));j.getMask(c,b,i-g)&&(n=!n);this.modules[b][i-g]=n;e--; -1==e&&(f++,e=7)}b+=d;if(0>b||this.moduleCount<=b){b-=d;d=-d;break}}}};o.PAD0=236;o.PAD1=17;o.createData=function(a,c,d){for(var c=p.getRSBlocks(a, +c),b=new t,e=0;e8*a)throw Error("code length overflow. ("+b.getLengthInBits()+">"+8*a+")");for(b.getLengthInBits()+4<=8*a&&b.put(0,4);0!=b.getLengthInBits()%8;)b.putBit(!1);for(;!(b.getLengthInBits()>=8*a);){b.put(o.PAD0,8);if(b.getLengthInBits()>=8*a)break;b.put(o.PAD1,8)}return o.createBytes(b,c)};o.createBytes=function(a,c){for(var d= +0,b=0,e=0,f=Array(c.length),i=Array(c.length),g=0;g>>=1;return c},getPatternPosition:function(a){return j.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,c,d){switch(a){case 0:return 0==(c+d)%2;case 1:return 0==c%2;case 2:return 0==d%3;case 3:return 0==(c+d)%3;case 4:return 0==(Math.floor(c/2)+Math.floor(d/3))%2;case 5:return 0==c*d%2+c*d%3;case 6:return 0==(c*d%2+c*d%3)%2;case 7:return 0==(c*d%3+(c+d)%2)%2;default:throw Error("bad maskPattern:"+ +a);}},getErrorCorrectPolynomial:function(a){for(var c=new q([1],0),d=0;dc)switch(a){case 1:return 10;case 2:return 9;case s:return 8;case 8:return 8;default:throw Error("mode:"+a);}else if(27>c)switch(a){case 1:return 12;case 2:return 11;case s:return 16;case 8:return 10;default:throw Error("mode:"+a);}else if(41>c)switch(a){case 1:return 14;case 2:return 13;case s:return 16;case 8:return 12;default:throw Error("mode:"+ +a);}else throw Error("type:"+c);},getLostPoint:function(a){for(var c=a.getModuleCount(),d=0,b=0;b=g;g++)if(!(0>b+g||c<=b+g))for(var h=-1;1>=h;h++)0>e+h||c<=e+h||0==g&&0==h||i==a.isDark(b+g,e+h)&&f++;5a)throw Error("glog("+a+")");return l.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;256<=a;)a-=255;return l.EXP_TABLE[a]},EXP_TABLE:Array(256), +LOG_TABLE:Array(256)},m=0;8>m;m++)l.EXP_TABLE[m]=1<m;m++)l.EXP_TABLE[m]=l.EXP_TABLE[m-4]^l.EXP_TABLE[m-5]^l.EXP_TABLE[m-6]^l.EXP_TABLE[m-8];for(m=0;255>m;m++)l.LOG_TABLE[l.EXP_TABLE[m]]=m;q.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var c=Array(this.getLength()+a.getLength()-1),d=0;d +this.getLength()-a.getLength())return this;for(var c=l.glog(this.get(0))-l.glog(a.get(0)),d=Array(this.getLength()),b=0;b>>7-a%8&1)},put:function(a,c){for(var d=0;d>>c-d-1&1))},getLengthInBits:function(){return this.length},putBit:function(a){var c=Math.floor(this.length/8);this.buffer.length<=c&&this.buffer.push(0);a&&(this.buffer[c]|=128>>>this.length%8);this.length++}};"string"===typeof h&&(h={text:h});h=r.extend({},{render:"canvas",width:256,height:256,typeNumber:-1, +correctLevel:2,background:"#ffffff",foreground:"#000000"},h);return this.each(function(){var a;if("canvas"==h.render){a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();var c=document.createElement("canvas");c.width=h.width;c.height=h.height;for(var d=c.getContext("2d"),b=h.width/a.getModuleCount(),e=h.height/a.getModuleCount(),f=0;f").css("width",h.width+"px").css("height",h.height+"px").css("border","0px").css("border-collapse","collapse").css("background-color",h.background);d=h.width/a.getModuleCount();b=h.height/a.getModuleCount();for(e=0;e").css("height",b+"px").appendTo(c);for(i=0;i").css("width", +d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;jQuery(a).appendTo(this)})}})(jQuery); diff --git a/public/assets/js/require-backend.js b/public/assets/js/require-backend.js index 4a2bfc4..4f1e2c0 100644 --- a/public/assets/js/require-backend.js +++ b/public/assets/js/require-backend.js @@ -50,7 +50,7 @@ require.config({ 'template': '../libs/art-template/dist/template-native', 'selectpage': '../libs/fastadmin-selectpage/selectpage', 'citypicker': '../libs/fastadmin-citypicker/dist/js/city-picker.min', - 'citypicker-data': '../libs/fastadmin-citypicker/dist/js/city-picker.data', + 'citypicker-data': '../libs/fastadmin-citypicker/dist/js/city-picker.data' }, // shim依赖配置 shim: { diff --git a/route/app.php b/route/app.php new file mode 100644 index 0000000..7c9a446 --- /dev/null +++ b/route/app.php @@ -0,0 +1,7 @@ +