From d63b889fd66ecebe4550a41250989868e6d567f7 Mon Sep 17 00:00:00 2001 From: test_service Date: Tue, 5 Dec 2023 16:00:42 +0800 Subject: [PATCH] 1 --- .env | 2 +- extend/hema/wechat/Pay.php | 2343 +++++++++-------- ...SXAiMoekTBByxVW78vewFjtSHH8qZ9O0Mwdzt1_dD8 | 1 + .../1be072d5272f567b09e85a28953712d9.jpg | Bin 0 -> 122498 bytes .../temp/1135d99398657c0ae566d459308e8327.php | 0 .../temp/165f30f93e40130c15d885f561996cb2.php | 0 .../temp/29a1b1f477dc444c90efb32e05e28fcd.php | 0 .../temp/352d937338d3cbeaa5a6b2aef6a0495e.php | 0 .../temp/3a0f7010e1e6219083ad8c5646d41a40.php | 0 .../temp/5c32e7932a0700ecea140e20f7bc660c.php | 0 .../temp/77873608a3a896bd3d43bafe9fe9a27f.php | 0 .../temp/77d3402cf97c0a269213cffcfac5cd3c.php | 0 .../temp/871d8f9ac37b49ddb1f8892d42b0b432.php | 0 .../temp/ce62fa7229051749de6651961ed8a08c.php | 0 .../temp/d0998e50cb4b95fe491115d630adb4d8.php | 0 .../temp/db3fc3ab033eae396bc223a1db61ffa3.php | 0 runtime/applet/log/202311/21_error.log | 0 .../temp/0401244b90b33ea4345ab01331660c33.php | 0 .../temp/4d1c52033742f01e5be6650c8d5d5c31.php | 0 .../temp/6d4c9daa5662bf5b4314aa7ff4421e3e.php | 0 .../temp/6e46255bb576ddd9bc889b5af5c6af2a.php | 0 .../temp/77dea72f140119eec7bc249b88fb2458.php | 0 .../temp/856c52ff20046a0878ce6c7c3f189901.php | 0 .../temp/8f1b83cd3dd31541f148aeee4301fb03.php | 0 .../temp/9fe3befe3ea695f4e50a001bee83c480.php | 0 .../temp/d406f6394afc907afff31febc70c8935.php | 0 .../temp/f23a297c97a3d0d4d3ea56de0ee9794f.php | 0 .../13/0fd29bc1e1c9570496921b09ae2849.php | Bin .../21/413a1afbfae837472e4844bda5ddbc.php | Bin .../30/4fce12426ae0229ae22216efc4ea5b.php | 0 .../4e/819c837d54a6ed09abc77a8560a66f.php | 0 .../90/11cab08498f44656fa8e2447787b43.php | 53 +- .../b4/1fbff599add95281dd146591f4da6f.php | 76 +- .../eb/300fe116b3568a7e80a6c2812b1a38.php | 2 +- .../temp/60a64cd47b22d798d9e777f4f707b2cd.php | 0 .../temp/b430673016f1b8d1351a534a69510985.php | 0 .../temp/b84ab2a86a49fb8098a55f114226b794.php | 0 .../temp/c17836b361a86127d4c136cc0bb98e5b.php | 0 .../sess_31e79552bdc9d8bfd196f0495656145c | Bin runtime/store/log/202311/21_error.log | 0 .../temp/0c8787a77f02614aefcaa341d7335ca2.php | 0 .../temp/10eaa1c936787f73e9ca337f946da334.php | 0 .../temp/233e0da4a493f66c5eda33831df6debb.php | 0 .../temp/32927b1e6f229976b3bfb1d748722e68.php | 0 .../temp/39bcbcc718db9ee53e923309aaeb92b9.php | 0 .../temp/409e4e4a205ca0731d204c8584cbd9de.php | 0 .../temp/5ba392d1c9e1e74ec22aae78b0af9092.php | 0 .../temp/5eecfbdd931a94d55dafc8f38d15c9ab.php | 0 .../temp/6da5e1cd8c29396c8903d1413abd1e55.php | 0 .../temp/8e50fcdf9dfa90740feb9f2ee72e8a28.php | 0 .../temp/988feca942d491d8bbd9f5550fca01cf.php | 0 .../temp/acbc153a7dd97ab50d0d10d18165b7bc.php | 0 .../temp/ae9927b8c2651c650d93812e8343c6e9.php | 0 .../temp/b309110cddd7c2715b4a38353ff0bb36.php | 0 .../temp/b7355a86bf291b1b080d4bff48d89329.php | 0 .../temp/c496503fb310b9f0807d3690b9becaa7.php | 0 .../temp/c778416e005d01626bafe09f7eec06d2.php | 0 .../temp/ca970d4ab4bd1237b6f93eb72cba4306.php | 0 .../temp/d6e8468d5e2899d8e0a2a06666a55b1e.php | 0 .../temp/d7390d1714e1d942ac842975d838ebd7.php | 0 .../temp/f2a615aee8ef64e5e71245bee61efdcc.php | 0 .../temp/f2d764740df911d8d11f8c0d29ea314f.php | 0 .../temp/f5a702ff70f080324a5f05ce3e1cc418.php | 0 runtime/user/log/202311/21_error.log | 0 .../temp/2d3218e5f4e26e3b8b658949082baf1f.php | 0 .../temp/7ed378d2e688fc3af98e70c4fc2797ba.php | 0 .../temp/7eddf9dad1c49a6d7f1c63d22923ff77.php | 0 .../temp/874e2d7a5be2959b9dc4ef7ce6faa47b.php | 0 .../temp/93ed04fe573c38439d4a42fb7d368b2f.php | 0 .../temp/afec97ae6c4cbf0aeb5fe21866576881.php | 0 70 files changed, 1310 insertions(+), 1167 deletions(-) create mode 100644 public/.well-known/acme-challenge/MSXAiMoekTBByxVW78vewFjtSHH8qZ9O0Mwdzt1_dD8 create mode 100644 public/uploads/20231201/1be072d5272f567b09e85a28953712d9.jpg mode change 100644 => 100755 runtime/admin/temp/1135d99398657c0ae566d459308e8327.php mode change 100644 => 100755 runtime/admin/temp/165f30f93e40130c15d885f561996cb2.php mode change 100644 => 100755 runtime/admin/temp/29a1b1f477dc444c90efb32e05e28fcd.php mode change 100644 => 100755 runtime/admin/temp/352d937338d3cbeaa5a6b2aef6a0495e.php mode change 100644 => 100755 runtime/admin/temp/3a0f7010e1e6219083ad8c5646d41a40.php mode change 100644 => 100755 runtime/admin/temp/5c32e7932a0700ecea140e20f7bc660c.php mode change 100644 => 100755 runtime/admin/temp/77873608a3a896bd3d43bafe9fe9a27f.php mode change 100644 => 100755 runtime/admin/temp/77d3402cf97c0a269213cffcfac5cd3c.php mode change 100644 => 100755 runtime/admin/temp/871d8f9ac37b49ddb1f8892d42b0b432.php mode change 100644 => 100755 runtime/admin/temp/ce62fa7229051749de6651961ed8a08c.php mode change 100644 => 100755 runtime/admin/temp/d0998e50cb4b95fe491115d630adb4d8.php mode change 100644 => 100755 runtime/admin/temp/db3fc3ab033eae396bc223a1db61ffa3.php mode change 100644 => 100755 runtime/applet/log/202311/21_error.log mode change 100644 => 100755 runtime/applet/temp/0401244b90b33ea4345ab01331660c33.php mode change 100644 => 100755 runtime/applet/temp/4d1c52033742f01e5be6650c8d5d5c31.php mode change 100644 => 100755 runtime/applet/temp/6d4c9daa5662bf5b4314aa7ff4421e3e.php mode change 100644 => 100755 runtime/applet/temp/6e46255bb576ddd9bc889b5af5c6af2a.php mode change 100644 => 100755 runtime/applet/temp/77dea72f140119eec7bc249b88fb2458.php mode change 100644 => 100755 runtime/applet/temp/856c52ff20046a0878ce6c7c3f189901.php mode change 100644 => 100755 runtime/applet/temp/8f1b83cd3dd31541f148aeee4301fb03.php mode change 100644 => 100755 runtime/applet/temp/9fe3befe3ea695f4e50a001bee83c480.php mode change 100644 => 100755 runtime/applet/temp/d406f6394afc907afff31febc70c8935.php mode change 100644 => 100755 runtime/applet/temp/f23a297c97a3d0d4d3ea56de0ee9794f.php mode change 100644 => 100755 runtime/cache/13/0fd29bc1e1c9570496921b09ae2849.php mode change 100644 => 100755 runtime/cache/21/413a1afbfae837472e4844bda5ddbc.php mode change 100644 => 100755 runtime/cache/30/4fce12426ae0229ae22216efc4ea5b.php mode change 100644 => 100755 runtime/cache/4e/819c837d54a6ed09abc77a8560a66f.php mode change 100644 => 100755 runtime/index/temp/60a64cd47b22d798d9e777f4f707b2cd.php mode change 100644 => 100755 runtime/index/temp/b430673016f1b8d1351a534a69510985.php mode change 100644 => 100755 runtime/index/temp/b84ab2a86a49fb8098a55f114226b794.php mode change 100644 => 100755 runtime/index/temp/c17836b361a86127d4c136cc0bb98e5b.php mode change 100644 => 100755 runtime/session/sess_31e79552bdc9d8bfd196f0495656145c mode change 100644 => 100755 runtime/store/log/202311/21_error.log mode change 100644 => 100755 runtime/store/temp/0c8787a77f02614aefcaa341d7335ca2.php mode change 100644 => 100755 runtime/store/temp/10eaa1c936787f73e9ca337f946da334.php mode change 100644 => 100755 runtime/store/temp/233e0da4a493f66c5eda33831df6debb.php mode change 100644 => 100755 runtime/store/temp/32927b1e6f229976b3bfb1d748722e68.php mode change 100644 => 100755 runtime/store/temp/39bcbcc718db9ee53e923309aaeb92b9.php mode change 100644 => 100755 runtime/store/temp/409e4e4a205ca0731d204c8584cbd9de.php mode change 100644 => 100755 runtime/store/temp/5ba392d1c9e1e74ec22aae78b0af9092.php mode change 100644 => 100755 runtime/store/temp/5eecfbdd931a94d55dafc8f38d15c9ab.php mode change 100644 => 100755 runtime/store/temp/6da5e1cd8c29396c8903d1413abd1e55.php mode change 100644 => 100755 runtime/store/temp/8e50fcdf9dfa90740feb9f2ee72e8a28.php mode change 100644 => 100755 runtime/store/temp/988feca942d491d8bbd9f5550fca01cf.php mode change 100644 => 100755 runtime/store/temp/acbc153a7dd97ab50d0d10d18165b7bc.php mode change 100644 => 100755 runtime/store/temp/ae9927b8c2651c650d93812e8343c6e9.php mode change 100644 => 100755 runtime/store/temp/b309110cddd7c2715b4a38353ff0bb36.php mode change 100644 => 100755 runtime/store/temp/b7355a86bf291b1b080d4bff48d89329.php mode change 100644 => 100755 runtime/store/temp/c496503fb310b9f0807d3690b9becaa7.php mode change 100644 => 100755 runtime/store/temp/c778416e005d01626bafe09f7eec06d2.php mode change 100644 => 100755 runtime/store/temp/ca970d4ab4bd1237b6f93eb72cba4306.php mode change 100644 => 100755 runtime/store/temp/d6e8468d5e2899d8e0a2a06666a55b1e.php mode change 100644 => 100755 runtime/store/temp/d7390d1714e1d942ac842975d838ebd7.php mode change 100644 => 100755 runtime/store/temp/f2a615aee8ef64e5e71245bee61efdcc.php mode change 100644 => 100755 runtime/store/temp/f2d764740df911d8d11f8c0d29ea314f.php mode change 100644 => 100755 runtime/store/temp/f5a702ff70f080324a5f05ce3e1cc418.php mode change 100644 => 100755 runtime/user/log/202311/21_error.log mode change 100644 => 100755 runtime/user/temp/2d3218e5f4e26e3b8b658949082baf1f.php mode change 100644 => 100755 runtime/user/temp/7ed378d2e688fc3af98e70c4fc2797ba.php mode change 100644 => 100755 runtime/user/temp/7eddf9dad1c49a6d7f1c63d22923ff77.php mode change 100644 => 100755 runtime/user/temp/874e2d7a5be2959b9dc4ef7ce6faa47b.php mode change 100644 => 100755 runtime/user/temp/93ed04fe573c38439d4a42fb7d368b2f.php mode change 100644 => 100755 runtime/user/temp/afec97ae6c4cbf0aeb5fe21866576881.php diff --git a/.env b/.env index f0a1a12..d6326f0 100755 --- a/.env +++ b/.env @@ -1 +1 @@ -APP_DEBUG = false [APP] DEFAULT_TIMEZONE = Asia/Shanghai [DATABASE] TYPE = mysql HOSTNAME = 124.71.161.49 DATABASE = cxhxy USERNAME = cxhxy PASSWORD = FmfbjEeHfYKZHHK7 HOSTPORT = 3306 CHARSET = utf8 DEBUG = false \ No newline at end of file +APP_DEBUG = false [APP] DEFAULT_TIMEZONE = Asia/Shanghai [DATABASE] TYPE = mysql HOSTNAME = 124.71.161.49 DATABASE = cxhxy USERNAME = cxhxy PASSWORD = FmfbjEeHfYKZHHK7 HOSTPORT = 3306 CHARSET = utf8 DEBUG = true \ No newline at end of file diff --git a/extend/hema/wechat/Pay.php b/extend/hema/wechat/Pay.php index 5b377b0..b18fcde 100755 --- a/extend/hema/wechat/Pay.php +++ b/extend/hema/wechat/Pay.php @@ -1,1164 +1,1181 @@ -isp_config = Setting::getItem('wxpayisp',0); - $this->config = $config; - } - - /********** V3接口 **********/ - - /** - * H5下单API - * $out_trade_no=订单号, $total=支付金额,,$attach=订单描述 - * $profit_sharing=是否分账(有配送费要分账时传递) - */ - public function h5($out_trade_no,$total,$notify_url,$attach='订单支付',$profit_sharing = false) - { - $params = [ - 'description' => $attach,//商品描述 - 'out_trade_no' => $out_trade_no,//商户订单号 - 'attach' => $attach,//附加数据 - 'notify_url' => base_url() . $notify_url, //通知地址 - 'amount' => [ - 'total' => intval($total * 100),//订单总金额,单位为分 - ], - 'scene_info' => [ - 'payer_client_ip' => \request()->ip(),//用户终端IP - ], - 'h5_info' => [ - 'type' => 'Wap' - ] - ]; - if($this->config['is_sub'] == 1){ - //服务商 - $params['sp_appid'] = $this->isp_config['app_id'];//服务商应用ID - $params['sp_mchid'] = $this->isp_config['mch_id'];//服务商商户号 - $params['sub_appid'] = $this->config['app_id'];//子商户应用ID - $params['sub_mchid'] = $this->config['mch_id'];//子商户号 - $url = $this->getUrl('pay/partner/transactions/h5');//服务商 - $is_isp = true; - }else{ - //直连商户 - $params['appid'] = $this->config['app_id'];//小程序ID - $params['mchid'] = $this->config['mch_id'];//商户号 - $url = $this->getUrl('pay/transactions/h5');//直连商户 - $is_isp = false; - } - //判断是否开启分账 - $divide = Setting::getItem('divide',0); - if($profit_sharing or $divide['extract'] > 0){ - $params['settle_info']['profit_sharing'] = true; //开启分账 - } - $params = hema_json($params); - $headers = [ - 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $this->sign($url,'POST',$params,$is_isp), - 'Content-Type:application/json', - 'Accept:application/json', - 'User-Agent:' . $is_isp?$this->isp_config['mch_id']:$this->config['mch_id'], - ]; - $result = json_decode(Http::post($url, $params,[],$headers),true); - if(isset($result['code'])){ - $this->error = 'code:' . $result['code'] . ',msg:' . $result['message']; - return false; - } - return $result['h5_url']; - } - //扣取手续费 按照0.6%计算 - private function serviceFee($fee) - { - return intval(($fee - ($fee * 6 / 1000)) * 100); - } - /** - * 分账 - * $data:数组 =分账数据 - * [ - * out_order_no:第三方订单号 - * transaction_id:微信订单号 - * total:分账总金额 - * ] - * $applet_id=小程序编号 - * $delivery_fee=配送费分账金额 - */ - public function divide($data,$applet_id='',$delivery_fee=0) - { - $is_divide = false;//是否分账 - $total = $data['total'];//分账总金额 - $service_fee = 0;//平台分账金额(单位分) - $agent_fee = 0;//代理分账金额(单位分) - $agent_openid = '';//代理收款账号 - //判断外卖订单是否分账配送费 - if($delivery_fee > 0){ - $total = $total - $delivery_fee; - $delivery_fee = $this->serviceFee($delivery_fee);//去掉手续费 - $is_divide = true; //配送费大于0 开启分账 - } - $divide = Setting::getItem('divide',0); //分佣参数 - $applet = Applet::get($applet_id);//获取商家应用 - //如果开启分佣 - if($divide['extract'] > 0){ - $extract = $total * $divide['extract'] / 100;//抽取金额 - $service_fee = $this->serviceFee($extract);//去掉手续费 - if($divide['agent_extract'] > 0){ - //判断商家是否有代理商 - if($applet['agent_id'] > 0){ - if($account = DivideAccount::withoutGlobalScope()->where('applet_id',$applet_id)->find()){ - if(!empty($account['open_id'])){ - $agent_openid = $account['open_id']; - $agent_fee = $this->serviceFee($extract * $divide['agent_extract'] / 100);//去掉手续费 - $service_fee = $service_fee - $agent_fee; - } - } - } - } - $is_divide = true; //开启分账 - } - //判断是否要进行分账 - if(!$is_divide){ - $this->error = '不用分账'; - return false; - } - //***************** 添加分账接收方 *********************// - $receivers = [];//收款方账号列表 - //添加平台收佣账号 - if(($service_fee + $delivery_fee) > 0){ - if(!$this->addReceivers($applet_id)) { - $this->error = '添加平台分账接收方失败'; - return false; - } - $webpay = Setting::getItem('webpay',0)['wx']; //平台微信支付参数 - $receivers[] = [ - 'type' => 'MERCHANT_ID',//分账接收方类型 MERCHANT_ID=商户号 PERSONAL_OPENID=个人openid - 'account' => $webpay['mch_id'],//分账接收方账号 - 'amount' => $service_fee + $delivery_fee,//分账金额 - 'description' => '分佣给平台',//分账描述 - ]; - } - //添加代理收佣账号 - if($agent_fee > 0 and !empty($agent_openid)){ - if(!$this->addReceivers($applet_id,false,$agent_openid)) { - $this->error = '添加代理分账接收方失败'; - return false; - } - $receivers[] = [ - 'type' => $this->config['is_sub'] == 1 ? 'PERSONAL_SUB_OPENID':'PERSONAL_OPENID',//分账接收方类型 - 'account' => $agent_openid,//分账接收方账号 - 'amount' => $agent_fee,//分账金额 - 'description' => '分佣给代理',//分账描述 - ]; - } - //***************** 请求分账 *********************// - if(sizeof($receivers) == 0){ - $this->error = '收款方账号列表为空'; - return false; - } - if(!$this->profitSharing($data['transaction_id'],$data['out_order_no'],$receivers)) { - $this->error = '请求分账失败'; - return false; - } - //***************** 添加交易记录 *********************// - $record_log = [];//交易流水记录 - //是否增加平台分红记录(分佣) - if(($service_fee - $agent_fee) > 0){ - $money = sprintf("%.2f",$service_fee / 100);//计算金额 - //平台分红(分佣)记录 - array_push($record_log,[ - 'mode' => 40, //赠送 - 'type' => 30, //微信 - 'order_no' => $data['out_order_no'], - 'money' => $money, - 'remark' => '交易分佣' - ]); - //商户扣费记录 - array_push($record_log,[ - 'mode' => 50, //扣减 - 'type' => 30, //微信 - 'order_no' => $data['out_order_no'], - 'money' => $money, - 'user_id' => $applet['user_id'], - 'remark' => '交易服务费' - ]); - } - //是否增加配送费记录 - if($delivery_fee > 0){ - $money = sprintf("%.2f",$delivery_fee / 100);//计算金额 - //平台收取记录 - array_push($record_log,[ - 'mode' => 40, //赠送 - 'type' => 30, //微信 - 'order_no' => $data['out_order_no'], - 'money' => $money, - 'remark' => '第三方配送费' - ]); - //商户扣费记录 - array_push($record_log,[ - 'mode' => 50, //扣减 - 'type' => 30, //微信 - 'order_no' => $data['out_order_no'], - 'money' => $money, - 'user_id' => $applet['user_id'], - 'remark' => '第三方配送费' - ]); - } - //是否增加代理分佣记录 - if($agent_fee > 0){ - $money = sprintf("%.2f",$agent_fee / 100);//计算金额 - //平台收取记录 - array_push($record_log,[ - 'mode' => 40, //赠送 - 'type' => 30, //微信 - 'order_no' => $data['out_order_no'], - 'money' => $money, - 'user_id' => $applet['agent_id'], - 'remark' => '交易分佣' - ]); - } - //批量增加交易记录 - $model = new Record; - if(!$model->saveAll($record_log)){ - $this->error = '添加交易记录失败'; - return false; - } - return true; - } - /** - * 请求分账API - */ - private function profitSharing($transaction_id,$out_order_no,$receivers) - { - //服务商 - $params = [ - 'transaction_id' => $transaction_id,//微信订单号 - 'out_order_no' => $out_order_no,//商户分账单号 - 'receivers' => $receivers, - 'unfreeze_unsplit' => true,//是否解冻剩余未分资金 - ]; - if($this->config['is_sub'] == 1){ - //服务商 - $params['appid'] = $this->isp_config['app_id'];//服务商应用ID - $params['sub_appid'] = $this->config['app_id'];//子商户应用ID - $params['sub_mchid'] = $this->config['mch_id'];//子商户号 - $is_isp = true; - }else{ - //直连商户 - $params['appid'] = $this->config['app_id'];//小程序ID - $is_isp = false; - } - $params = hema_json($params); - $url = $this->getUrl('profitsharing/orders'); - $headers = [ - 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $this->sign($url,'POST',$params,$is_isp), - 'Content-Type:application/json', - 'Accept:application/json', - 'User-Agent:' . $is_isp?$this->isp_config['mch_id']:$this->config['mch_id'], - 'Wechatpay-Serial:' . $this->isp_config['serial_no'], - ]; - return $this->result(json_decode(Http::post($url, $params,[],$headers),true)); - } - /** - * 添加分账接收方API - * $is_mchid = 接收方是否是商户 $account = 接收账号 - */ - private function addReceivers($applet_id,$is_mchid=true,$account='') - { - if($this->config['is_sub'] == 1){ - //服务商 - $params['appid'] = $this->isp_config['app_id'];//服务商应用ID - $params['sub_appid'] = $this->config['app_id'];//子商户应用ID - $params['sub_mchid'] = $this->config['mch_id'];//子商户号 - if($is_mchid){ - $webpay = Setting::getItem('webpay',0)['wx']; - $params['type'] = 'MERCHANT_ID';//分账接收方类型 - $params['account'] = $webpay['mch_id'];//分账接收方账号 - $params['name'] = $this->getEncrypt($webpay['name']); //(加密)分账个人接收方姓名 分账接收方类型是MERCHANT_ID时,是商户全称(必传) - }else{ - $params['type'] = 'PERSONAL_SUB_OPENID';//分账接收方类型 - $params['account'] = $account;//分账接收方账号 - } - $params['relation_type'] = 'SERVICE_PROVIDER'; //与分账方的关系类型 服务商 - $is_isp = true; - $serial_no = $this->isp_config['serial_no']; - }else{ - //直连商户 - $params['appid'] = $this->config['app_id'];//小程序ID - if($is_mchid){ - $webpay = Setting::getItem('webpay',0)['wx']; - $params['type'] = 'MERCHANT_ID';//分账接收方类型 - $params['account'] = $webpay['mch_id'];//分账接收方账号 - $params['name'] = $this->getEncrypt($webpay['name'],false,$applet_id); //(加密)分账个人接收方姓名 分账接收方类型是MERCHANT_ID时,是商户全称(必传) - }else{ - $params['type'] = 'PERSONAL_OPENID';//分账接收方类型 - $params['account'] = $account;//分账接收方账号 - } - $params['relation_type'] = 'PARTNER'; ////与分账方的关系类型 合作伙伴 - $is_isp = false; - $serial_no = $this->config['serial_no']; - } - $params = hema_json($params); - $url = $this->getUrl('profitsharing/receivers/add'); - $headers = [ - 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $this->sign($url,'POST',$params,$is_isp), - 'Content-Type:application/json', - 'Accept:application/json', - 'User-Agent:' . $is_isp?$this->isp_config['mch_id']:$this->config['mch_id'], - 'Wechatpay-Serial:' . $serial_no, - ]; - return $this->result(json_decode(Http::post($url, $params,[],$headers),true)); - } - /** - * 申请退款API - */ - public function refunds($transaction_id,$out_refund_no,$refund_fee,$total_fee,$notify_url='',$reason='') - { - $params = [ - 'transaction_id' => $transaction_id,//微信支付订单号 - 'out_refund_no' => $out_refund_no,//退款订单号 - 'amount' => [ - 'refund' => intval($refund_fee * 100), // 退款金额,价格:单位分 - 'total' => intval($total_fee * 100), // 订单金额,价格:单位分 - 'currency' => 'CNY', //退款币种 只支持人民币:CNY - ], - ]; - if($this->config['is_sub'] == 1){ - //服务商 - $params['sub_mchid'] = $this->config['mch_id'];//子商户号 - $is_isp = true; - }else{ - $is_isp = false; - } - !empty($reason) && $params['reason'] = $reason;//退款原因 - !empty($notify_url) && $params['notify_url'] = base_url() . $notify_url; // 异步通知地址 - - $params = hema_json($params); - $url = $this->getUrl('refund/domestic/refunds'); - $headers = [ - 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $this->sign($url,'POST',$params,$is_isp), - 'Content-Type:application/json', - 'Accept:application/json', - 'User-Agent:' . $is_isp?$this->isp_config['mch_id']:$this->config['mch_id'], - ]; - return $this->result(json_decode(Http::post($url, $params,[],$headers),true)); - - } - /** - * 退款成功异步通知 - */ - public function refundsNotify($Model,$applet_id='') - { - //接收微信服务器回调的数据流 - if (!$json = file_get_contents('php://input')) { - $this->returnHttpCode(false); - } - // 将服务器返回的json数据转化为数组 - $result = json_decode($json,true); - if(empty($applet_id)){ - $this->config = Setting::getItem('webpay',0)['wx'];//平台商户支付参数 - }else{ - $this->config = Setting::getItem('wxpay',$applet_id);//商家商户支付参数 - } - if($this->config['is_sub'] == 1){ - //服务商 - $api_key = $this->isp_config['api_key']; - //判断平台证书是否过期 - if($this->isp_config['expire_time'] < time()){ - //更新平台证书 - if(!$this->certificates()){ - $this->returnHttpCode(false,$this->error);//更新失败 - } - } - }else{ - //直连商户 - $api_key = $this->config['api_key']; - //判断平台证书是否过期 - if($this->config['expire_time'] < time()){ - //更新平台证书 - if(!$this->certificates(false,$applet_id)){ - $this->returnHttpCode(false,$this->error);//更新失败 - } - } - } - if(!$decrypt = new AesUtil($api_key)){ - $this->returnHttpCode(false,$decrypt->getError()); - } - if(!$res = $decrypt->decryptToString($result['resource']['associated_data'], $result['resource']['nonce'], $result['resource']['ciphertext'])){ - $this->returnHttpCode(false,$decrypt->getError()); - } - $data = json_decode($res,true); - // 订单信息 - if(!$order = $Model->refundDetail($data['out_refund_no'])){ - $this->returnHttpCode(false,'订单不存在'); - } - - if($data['refund_status'] == 'SUCCESS') { - // 更新订单状态 - $order->updateRefundStatus($data['refund_id']); - $this->returnHttpCode(true);// 返回状态 - } - $this->returnHttpCode(false, '退款失败'); - } - /** - * Native下单API - * $out_trade_no=订单号, $total=支付金额,$attach=订单描述 $profit_sharing=是否分账 - */ - public function native($out_trade_no,$total,$notify_url,$attach='订单支付',$profit_sharing = false) - { - $params = [ - 'description' => $attach,//商品描述 - 'out_trade_no' => $out_trade_no,//商户订单号 - 'attach' => $attach,//附加数据 - 'notify_url' => base_url() . $notify_url, //通知地址 - 'amount' => [ - 'total' => intval($total * 100),//订单总金额,单位为分 - ], - 'scene_info' => [ - 'payer_client_ip' => \request()->ip(),//用户终端IP - ], - ]; - if($this->config['is_sub'] == 1){ - //服务商 - $params['sp_appid'] = $this->isp_config['app_id'];//服务商应用ID - $params['sp_mchid'] = $this->isp_config['mch_id'];//服务商商户号 - //$params['sub_appid'] = $this->config['app_id'];//子商户应用ID - $params['sub_mchid'] = $this->config['mch_id'];//子商户号 - //$params['payer']['sub_openid'] = $openid; //子用户标识Openid - $url = $this->getUrl('pay/partner/transactions/native');//服务商 - $is_isp = true; - }else{ - //直连商户 - $params['appid'] = $this->config['app_id'];//小程序ID - $params['mchid'] = $this->config['mch_id'];//商户号 - $url = $this->getUrl('pay/transactions/native');//直连商户 - $is_isp = false; - } - //判断是否开启分账 - $divide = Setting::getItem('divide',0); - if($profit_sharing or $divide['extract'] > 0){ - $params['settle_info']['profit_sharing'] = true; //开启分账 - } - $params = hema_json($params); - $headers = [ - 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $this->sign($url,'POST',$params,$is_isp), - 'Content-Type:application/json', - 'Accept:application/json', - 'User-Agent:' . $is_isp?$this->isp_config['mch_id']:$this->config['mch_id'], - ]; - $result = json_decode(Http::post($url, $params,[],$headers),true); - if(isset($result['code'])){ - $this->error = 'code:' . $result['code'] . ',msg:' . $result['message']; - return false; - } - if(!isset($result['code_url'])){ - $this->error = 'Native下单接口请求失败'; - return false; - } - return $result['code_url']; - } - /** - * JSAPI下单API - * $out_trade_no=订单号, $total=支付金额,$openid=微信用户ID, ,$attach=订单描述 - * $profit_sharing=是否分账(有配送费要分账时传递) - */ - public function jsapi($out_trade_no,$total,$openid,$notify_url,$attach='订单支付',$profit_sharing = false) - { - $params = [ - 'description' => $attach,//商品描述 - 'attach' => $attach,//附加数据 - 'out_trade_no' => $out_trade_no,//商户订单号 - 'notify_url' => base_url() . $notify_url, //通知地址 - 'amount' => [ - 'total' => intval($total * 100),//订单总金额,单位为分 - ], - 'scene_info' => [ - 'payer_client_ip' => \request()->ip(),//用户终端IP - ], - ]; - if($this->config['is_sub'] == 1){ - //服务商 - $params['sp_appid'] = $this->isp_config['app_id'];//服务商应用ID - $params['sp_mchid'] = $this->isp_config['mch_id'];//服务商商户号 - $params['sub_appid'] = $this->config['app_id'];//子商户应用ID - $params['sub_mchid'] = $this->config['mch_id'];//子商户号 - $params['payer']['sub_openid'] = $openid; //子用户标识Openid - $url = $this->getUrl('pay/partner/transactions/jsapi');//服务商 - $is_isp = true; - }else{ - //直连商户 - $params['appid'] = $this->config['app_id'];//小程序ID - $params['mchid'] = $this->config['mch_id'];//商户号 - $params['payer']['openid'] = $openid; //用户标识Openid - $url = $this->getUrl('pay/transactions/jsapi');//直连商户 - $is_isp = false; - } - //判断是否开启分账 - $divide = Setting::getItem('divide',0); - if($profit_sharing or $divide['extract'] > 0){ - $params['settle_info']['profit_sharing'] = true; //开启分账 - } - $params = hema_json($params); - $headers = [ - 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $this->sign($url,'POST',$params,$is_isp), - 'Content-Type:application/json', - 'Accept:application/json', - 'User-Agent:' . $is_isp?$this->isp_config['mch_id']:$this->config['mch_id'], - ]; - $result = json_decode(Http::post($url, $params,[],$headers),true); - if(isset($result['code'])){ - $this->error = 'code:' . $result['code'] . ',msg:' . $result['message']; - return false; - } - if(!isset($result['prepay_id'])){ - $this->error = 'JSAPI下单接口请求失败'; - return false; - } - $data = [ - 'timeStamp' => (string)time(), - 'nonceStr' => $this->nonce(), - 'package' => 'prepay_id=' . $result['prepay_id'], - 'signType' => 'RSA', - ]; - $data['paySign'] = $this->paySign($data); - return $data; - } - - /** - * 支付成功异步通知 - */ - public function notify($Model,$applet_id,$method='edit') - { - //接收微信服务器回调的数据流 - if (!$json = file_get_contents('php://input')) { - $this->returnHttpCode(false); - } - // 将服务器返回的json数据转化为数组 - $result = json_decode($json,true); - if(empty($applet_id)){ - $this->config = Setting::getItem('webpay',0)['wx'];//平台商户支付参数 - }else{ - $this->config = Setting::getItem('wxpay',$applet_id);//商家商户支付参数 - } - if($this->config['is_sub'] == 1){ - //服务商 - $api_key = $this->isp_config['api_key']; - //判断平台证书是否过期 - if($this->isp_config['expire_time'] < time()){ - //更新平台证书 - if(!$this->certificates()){ - $this->returnHttpCode(false,$this->error);//更新失败 - } - } - }else{ - //直连商户 - $api_key = $this->config['api_key']; - //判断平台证书是否过期 - if($this->config['expire_time'] < time()){ - //更新平台证书 - if(!$this->certificates(false,$applet_id)){ - $this->returnHttpCode(false,$this->error);//更新失败 - } - } - } - if(!$decrypt = new AesUtil($api_key)){ - $this->returnHttpCode(false,$decrypt->getError()); - } - if(!$res = $decrypt->decryptToString($result['resource']['associated_data'], $result['resource']['nonce'], $result['resource']['ciphertext'])){ - $this->returnHttpCode(false,$decrypt->getError()); - } - $data = json_decode($res,true); - // 订单信息 - if(!$order = $Model->payDetail($data['out_trade_no'])){ - $this->returnHttpCode(false,'订单不存在'); - } - - //判断支付状态 - if($data['trade_state'] == 'SUCCESS') { - if($method == 'add'){ - $Model->updatePayStatus($data['transaction_id'],$order); - Cache::delete($data['out_trade_no']); - }else{ - // 更新订单状态 - $order->updatePayStatus($data['transaction_id']); - } - // 返回状态 - $this->returnHttpCode(true); - } - // 返回状态 - $this->returnHttpCode(false, '支付失败'); - } - - /** - * 特约商户进件 - * 频率限制:15/s - */ - public function applyment($params) - { - //********************* 数据加密 ***************** - - //管理员姓名 - if(!$result = $this->getEncrypt($params['contact_info']['contact_name'])){ - return false; - } - $params['contact_info']['contact_name'] = $result; - //管理员电话 - if(!$result = $this->getEncrypt($params['contact_info']['mobile_phone'])){ - return false; - } - $params['contact_info']['mobile_phone'] = $result; - //管理员邮箱 - if(!$result = $this->getEncrypt($params['contact_info']['contact_email'])){ - return false; - } - $params['contact_info']['contact_email'] = $result; - //身份证姓名 - if(!$result = $this->getEncrypt($params['subject_info']['identity_info']['id_card_info']['id_card_name'])){ - return false; - } - $params['subject_info']['identity_info']['id_card_info']['id_card_name'] = $result; - //身份证号 - if(!$result = $this->getEncrypt($params['subject_info']['identity_info']['id_card_info']['id_card_number'])){ - return false; - } - $params['subject_info']['identity_info']['id_card_info']['id_card_number'] = $result; - - //身份证居住地址 - if(!$result = $this->getEncrypt($params['subject_info']['identity_info']['id_card_info']['id_card_address'])){ - return false; - } - $params['subject_info']['identity_info']['id_card_info']['id_card_address'] = $result; - - - //银行开户名称 - if(!$result = $this->getEncrypt($params['bank_account_info']['account_name'])){ - return false; - } - $params['bank_account_info']['account_name'] = $result; - //银行账号 - if(!$result = $this->getEncrypt($params['bank_account_info']['account_number'])){ - return false; - } - $params['bank_account_info']['account_number'] = $result; - - //********************* 上传图片 ***************** - //营业执照 - if(!$result = $this->upload($params['subject_info']['business_license_info']['license_copy'])){ - return false; - } - $params['subject_info']['business_license_info']['license_copy'] = $result; - //身份证正面 - if(!$result = $this->upload($params['subject_info']['identity_info']['id_card_info']['id_card_copy'])){ - return false; - } - $params['subject_info']['identity_info']['id_card_info']['id_card_copy'] = $result; - //身份证反面 - if(!$result = $this->upload($params['subject_info']['identity_info']['id_card_info']['id_card_national'])){ - return false; - } - $params['subject_info']['identity_info']['id_card_info']['id_card_national'] = $result; - //特殊资质 - if(!$result = $this->upload($params['settlement_info']['qualifications'][0])){ - return false; - } - $params['settlement_info']['qualifications'][0] = $result; - //门头照片 - if(!$result = $this->upload($params['business_info']['sales_info']['biz_store_info']['store_entrance_pic'][0])){ - return false; - } - $params['business_info']['sales_info']['biz_store_info']['store_entrance_pic'][0] = $result; - //店内照片 - if(!$result = $this->upload($params['business_info']['sales_info']['biz_store_info']['indoor_pic'][0])){ - return false; - } - $params['business_info']['sales_info']['biz_store_info']['indoor_pic'][0] = $result; - $params = hema_json($params); - $url = $this->getUrl('applyment4sub/applyment/'); - $headers = [ - 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $this->sign($url,'POST',$params), - 'Content-Type:application/json', - 'Accept:application/json', - 'User-Agent:' . $this->isp_config['mch_id'], - 'Wechatpay-Serial:' . $this->isp_config['serial_no'], - ]; - $result = json_decode(Http::post($url, $params,[],$headers),true); - if(isset($result['code'])){ - $this->error = 'code:' . $result['code'] . ',msg:' . $result['message']; - return false; - } - return $result['applyment_id']; - } - /** - * 查询申请单状态 - */ - public function queryApplyment($no,$is_applyment_id = false) - { - if($is_applyment_id){ - $path = 'applyment_id/' . $no;//通过申请单号查询申请状态(官方返回的编号) - }else{ - $path = 'business_code/' . $no;//通过业务申请编号查询申请状态(第三方自定义的编号) - } - $url = $this->getUrl('applyment4sub/applyment/'.$path); - $headers = [ - 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $this->sign($url,'GET'), - 'Accept:application/json', - ]; - return $this->result(json_decode(Http::get($url, [],[],$headers),true)); - } - /** - * 获取平台证书列表 - */ - private function certificates($is_isp=true,$applet_id='') - { - $url = $this->getUrl('certificates'); - $headers = [ - 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $this->sign($url,'GET','',$is_isp), - 'Accept:application/json', - 'User-Agent:https://zh.wikipedia.org/wiki/User_agent', - ]; - $result = json_decode(Http::get($url,[],[],$headers),true); - if(isset($result['code'])){ - $this->error = 'code:' . $result['code'] . ',msg:' . $result['message']; - return false; - } - //验证是否获取到了数据 - if(!isset($result['data']) and sizeof($result['data']) == 0){ - $this->error = '未获取到可用的平台证书'; - return false; - } - $result = $result['data'][0];//获取证书列表中的第一个数据 - if($is_isp){ - $api_key = $this->isp_config['api_key']; - }else{ - $api_key = $this->config['api_key']; - } - if(!$decrypt = new AesUtil($api_key)){ - $this->error = $decrypt->getError(); - return false; - } - if(!$res = $decrypt->decryptToString($result['encrypt_certificate']['associated_data'], $result['encrypt_certificate']['nonce'], $result['encrypt_certificate']['ciphertext'])){ - $this->error = $decrypt->getError(); - return false; - } - //计算到期时间 - $expire_time = explode('T',$result['expire_time']); - $expire_time = strtotime($expire_time[0]); - $model = new Setting; - //更新平台证书 - if($is_isp){ - $this->isp_config['certificates'] = $res; - $this->isp_config['serial_no'] = $result['serial_no']; - $this->isp_config['expire_time'] = $expire_time; - $model->edit('wxpayisp',$this->isp_config,0); //保存到数据库 - return true; - } - //更新特约商户 平台证书 - $this->config['certificates'] = $res; - $this->config['serial_no'] = $result['serial_no']; - $this->config['expire_time'] = $expire_time; - if(empty($applet_id)){ - $config = Setting::getItem('webpay',0); - $config['wx']['certificates'] = $res; - $config['wx']['serial_no'] = $result['serial_no']; - $config['wx']['expire_time'] = $expire_time; - $model->edit('webpay',$config,0); //保存到数据库 - }else{ - $model->edit('wxpay',$this->config,$applet_id); //保存到数据库 - } - return true; - } - - /** - * 图片上传API - */ - private function upload($file_path) - { - $file = file_get_contents($file_path);//获取网络图片 - //获取文件名称 - $arr = explode('/',$file_path); - $filename = $arr[sizeof($arr)-1]; - $meta =[ - 'filename' => $filename, - 'sha256' => hash('sha256',$file), - ]; - $url = $this->getUrl('merchant/media/upload'); - $boundary = uniqid();//随机数 - $headers = [ - 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $this->sign($url,'POST',hema_json($meta)), - 'Accept:application/json', - 'Content-Type:multipart/form-data;boundary=' . $boundary, - ]; - $params = '--' . $boundary . "\r\n"; - $params .= 'Content-Disposition:form-data; name="meta"' . "\r\n"; - $params .= 'Content-Type:application/json' . "\r\n\r\n"; - $params .= hema_json($meta) . "\r\n"; - $params .= '--' . $boundary . "\r\n"; - $params .= 'Content-Disposition:form-data;name="file";filename="' . $meta['filename'] . '"' . "\r\n"; - $params .= 'Content-Type:image/jpg' . "\r\n\r\n"; - $params .= $file . "\r\n"; - $params .= '--' . $boundary . '--' . "\r\n"; - $result = json_decode(Http::post($url, $params,[],$headers),true); - if(isset($result['code'])){ - $this->error = 'code:' . $result['code'] . ',msg:' . $result['message']; - return false; - } - if(isset($result['media_id'])){ - return $result['media_id']; - } - $this->error = '图片上传失败'; - return false; - } - - /** - * 调起支付签名 - */ - private function paySign($data) - { - $params = $this->config['app_id'] . "\n" . - $data['timeStamp'] . "\n" . - $data['nonceStr'] . "\n" . - $data['package'] . "\n"; - if($this->config['is_sub'] == 1){ - //服务商 - $private_key = $this->isp_config['key_pem']; //API私有证书 - }else{ - //直连商户 - $private_key = $this->config['key_pem']; //API私有证书 - } - $raw_sign = ''; - openssl_sign($params, $raw_sign, $private_key, 'sha256WithRSAEncryption'); - return base64_encode($raw_sign); - } - - /** - * 生成签名 - * $http_method = HTTP请求的方法(GET,POST,PUT - * serial_no 为你的商户证书序列号 - * $mch_private_key = 是商户API私钥,在商户平台下载的证书文件包含该文件,名称为apiclient_key.pem - * $is_isp 是否为服务商操作 - */ - private function sign($url,$http_method,$body='',$is_isp=true) - { - $timestamp = time(); //时间戳 - $nonce = $this->nonce(); //随机字符串 - $url_parts = parse_url($url); - $canonical_url = ($url_parts['path'] . (!empty($url_parts['query']) ? "?${url_parts['query']}" : "")); - $params = $http_method . "\n" . - $canonical_url . "\n" . - $timestamp . "\n" . - $nonce . "\n" . - $body . "\n"; - if($is_isp){ - $mchid = $this->isp_config['mch_id']; //商户号 - $serial_no = $this->isp_config['api_serial_no']; //API证书序列号 - $mch_private_key = $this->isp_config['key_pem']; //API私有证书 - }else{ - $mchid = $this->config['mch_id']; //商户号 - $serial_no = $this->config['api_serial_no']; //API证书序列号 - $mch_private_key = $this->config['key_pem']; //API私有证书 - } - $raw_sign = ''; - openssl_sign($params, $raw_sign, $mch_private_key, 'sha256WithRSAEncryption'); - $sign = base64_encode($raw_sign); - //$schema = 'WECHATPAY2-SHA256-RSA2048'; - $token = sprintf('mchid="%s",nonce_str="%s",timestamp="%d",serial_no="%s",signature="%s"',$mchid, $nonce, $timestamp, $serial_no, $sign); - return $token; - } - /** - * 敏感信息加密 - */ - private function getEncrypt($str,$is_isp = true,$applet_id='') - { - //判断平台证书是否过期 - if($is_isp){ - //服务商 - if($this->isp_config['expire_time'] < time()){ - //更新平台证书 - if(!$this->certificates()){ - return false;//更新失败 - } - } - $public_key = $this->isp_config['certificates'];//平台证书 - }else{ - //直连商户 - if($this->config['expire_time'] < time()){ - //更新平台证书 - if(!$this->certificates(false,$applet_id)){ - return false;//更新失败 - } - } - $public_key = $this->config['certificates'];//平台证书 - } - $encrypted = ''; - if (!openssl_public_encrypt($str, $encrypted, $public_key, OPENSSL_PKCS1_OAEP_PADDING)) { - $this->error = '敏感信息加密失败'; - return false; - } - return base64_encode($encrypted);//base64编码 - } - /** - * 生成随机字符串 - */ - private function nonce() - { - return md5(uniqid()); - } - /* - * 拼接请求域名接口 - */ - private function getUrl($url) - { - return $this->api_url . '/' . $this->version . '/' . $url; - } - /** - * 获取Headers数据 - */ - private function getHeaders() - { - $headers = array(); - foreach ($_SERVER as $key => $value) { - if (substr($key, 0, 5) === 'HTTP_') { - $key = substr($key, 5); - $key = str_replace('_', ' ', $key); - $key = str_replace(' ', '-', $key); - $key = strtolower($key); - $headers[$key] = $value; - } - } - return $headers; - } - /** - * 返回状态给微信服务器 - */ - private function returnHttpCode($is_success = true, $msg = '失败') - { - $json = hema_json([ - 'code' => $is_success ? 'SUCCESS' : 'FAIL', - 'message' => $is_success ? '成功' : $msg, - ]); - if($is_success){ - header('HTTP/1.1 200 OK'); - }else{ - header('HTTP/1.1 404 Not Found'); - } - die($json); - } - /** - * 请求数据验证 - **/ - private function result($result) - { - if(isset($result['code'])){ - $this->error = 'code:' . $result['code'] . ',msg:' . $result['message']; - return false; - } - return $result; - } - public function getError() - { - return $this->error; - } - - /********** V2接口 **********/ - /** - * 付款码支付 - * $auth_code=付款码 $order_no=订单号 $openid=微信用户ID, $total_fee=支付金额, ,$attach=订单描述 $divide=是否分账 - */ - public function micropay($auth_code,$order_no, $total_fee,$profit_sharing = false,$attach = '订单支付') - { - // 当前时间 - $time = time(); - // 生成随机字符串 - $nonceStr = md5($time); - // API参数 - $params = [ - 'auth_code' => $auth_code,//付款码支付 - 'attach' => $attach, - 'nonce_str' => $nonceStr,//随机字符串 - 'body' => $attach,//商品描述 - 'out_trade_no' => $order_no,//商户订单号 - 'total_fee' => intval($total_fee * 100), // 价格:单位分 - 'spbill_create_ip' => \request()->ip(),//服务终端IP - ]; - if($this->config['is_sub'] == 1){ - //服务商统一下单 - $values = Setting::getItem('wxpayisp',0); - $this->config['api_key'] = $this->isp_config['api_key'];//服务商商户的密钥 - $params['appid'] = $this->isp_config['app_id'];//服务商商户的APPID - $params['mch_id'] = $this->isp_config['mch_id'];//服务商商户号 - $params['sub_appid'] = $this->config['app_id'];//当前调起支付的小程序APPID - $params['sub_mch_id'] = $this->config['mch_id'];//服务商分配的子商户号 - }else{ - $params['appid'] = $this->config['app_id'];//小程序ID - $params['mch_id'] = $this->config['mch_id'];//商户号 - } - //判断是否开启分账 - $divide = Setting::getItem('divide',0); - if($profit_sharing or $divide['extract'] > 0){ - $params['profit_sharing'] = 'Y';//开启分账 - } - - // 生成签名 - $params['sign'] = $this->makeSign($params); - $url = 'https://api.mch.weixin.qq.com/pay/micropay';// 请求API - $result = $this->postXmlCurl($this->toXml($params), $url); - $prepay = $this->fromXml($result); - // 请求失败 - if ($prepay['return_code'] === 'FAIL') { - die(hema_json(['code' => -10, 'msg' => $prepay['return_msg']])); - } - //判断付款码支付时,用户支付中,需要输入密码 - if ($prepay['result_code'] === 'USERPAYING') { - return false; - } - if ($prepay['result_code'] === 'FAIL') { - die(hema_json(['code' => -10, 'msg' => $prepay['err_code_des']])); - } - return $prepay['transaction_id'];//支付交易号 - } - - /** - * 查询付款码支付结果是否成功 - */ - public function orderquery($out_trade_no) - { - // 当前时间 - $time = time(); - // 生成随机字符串 - $nonceStr = md5($time); - // API参数 - $params = [ - 'out_trade_no' => $out_trade_no, - 'nonce_str' => $nonceStr,//随机字符串 - ]; - if($this->config['is_sub'] == 1){ - //服务商统一下单 - $this->config['api_key'] = $this->isp_config['api_key'];//服务商商户的密钥 - $params['appid'] = $this->isp_config['app_id'];//服务商商户的APPID - $params['mch_id'] = $this->isp_config['mch_id'];//服务商商户号 - $params['sub_appid'] = $this->config['app_id'];//当前调起支付的小程序APPID - $params['sub_mch_id'] = $this->config['mch_id'];//服务商分配的子商户号 - }else{ - $params['appid'] = $this->config['app_id'];//小程序ID - $params['mch_id'] = $this->config['mch_id'];//商户号 - } - // 生成签名 - $params['sign'] = $this->makeSign($params); - // 请求API - $url = 'https://api.mch.weixin.qq.com/pay/orderquery'; - $result = $this->postXmlCurl($this->toXml($params), $url); - $prepay = $this->fromXml($result); - // 请求失败 - if ($prepay['return_code'] === 'SUCCESS' AND $prepay['result_code'] === 'SUCCESS') { - return $prepay['trade_state']; - } - return 'ERROR'; - } - /** - * 输出xml字符 - */ - private function toXml($values) - { - if (!is_array($values) - || count($values) <= 0 - ) { - return false; - } - $xml = ""; - foreach ($values as $key => $val) { - if (is_numeric($val)) { - $xml .= "<" . $key . ">" . $val . ""; - } else { - $xml .= "<" . $key . ">"; - } - } - $xml .= ""; - return $xml; - } - /** - * 将xml转为array - */ - private function fromXml($xml) - { - // 禁止引用外部xml实体 - libxml_disable_entity_loader(true); - return json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); - } - /** - * 以post方式提交xml到对应的接口url - */ - private function postXmlCurl($xml, $url, $cert = false, $second = 30) - { - $ch = curl_init(); - curl_setopt($ch, CURLOPT_TIMEOUT, $second);// 设置超时时间 - curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);//https请求 不验证证书和host - curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);//严格校验 - curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);// 要求结果为字符串且输出到屏幕上 - curl_setopt($ch, CURLOPT_POST, TRUE);// post提交方式 - curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); - curl_setopt($ch, CURLOPT_HEADER, FALSE);// 是否返回请求头 - //判断是否使用证书 - if($cert){ - $path = root_path() . '/extend/hema/wechat/cert/'; - file_put_contents($path . 'apiclient_cert.pem',$this->config['cert_pem']); - file_put_contents($path . 'apiclient_key.pem',$this->config['key_pem']); - curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); - curl_setopt($ch,CURLOPT_SSLCERT,$path . 'apiclient_cert.pem'); - curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); - curl_setopt($ch,CURLOPT_SSLKEY,$path . 'apiclient_key.pem'); - } - $data = curl_exec($ch);// 运行curl - curl_close($ch); - return $data; - } - - /** - * 生成签名MD5 - */ - private function makeSign($values) - { - //签名步骤一:按字典序排序参数 - ksort($values); - $string = $this->toUrlParams($values); - //签名步骤二:在string后加入KEY - $string = $string . '&key=' . $this->config['api_key']; - //签名步骤三:MD5加密 - $string = md5($string); - //签名步骤四:所有字符转为大写 - $result = strtoupper($string); - return $result; - } - - /** - * 格式化参数格式化成url参数 - */ - private function toUrlParams($values) - { - $buff = ''; - foreach ($values as $k => $v) { - if ($k != 'sign' && $v != '' && !is_array($v)) { - $buff .= $k . '=' . $v . '&'; - } - } - return trim($buff, '&'); - } +isp_config = Setting::getItem('wxpayisp',0); + $this->config = Setting::getItem('wxpayisp',0); + $this->config['is_sub'] = 2; + } + + /********** V3接口 **********/ + + /** + * H5下单API + * $out_trade_no=订单号, $total=支付金额,,$attach=订单描述 + * $profit_sharing=是否分账(有配送费要分账时传递) + */ + public function h5($out_trade_no,$total,$notify_url,$attach='订单支付',$profit_sharing = false) + { + $params = [ + 'description' => $attach,//商品描述 + 'out_trade_no' => $out_trade_no,//商户订单号 + 'attach' => $attach,//附加数据 + 'notify_url' => base_url() . $notify_url, //通知地址 + 'amount' => [ + 'total' => intval($total * 100),//订单总金额,单位为分 + ], + 'scene_info' => [ + 'payer_client_ip' => \request()->ip(),//用户终端IP + ], + 'h5_info' => [ + 'type' => 'Wap' + ] + ]; + if($this->config['is_sub'] == 1){ + //服务商 + $params['sp_appid'] = $this->isp_config['app_id'];//服务商应用ID + $params['sp_mchid'] = $this->isp_config['mch_id'];//服务商商户号 + $params['sub_appid'] = $this->config['app_id'];//子商户应用ID + $params['sub_mchid'] = $this->config['mch_id'];//子商户号 + $url = $this->getUrl('pay/partner/transactions/h5');//服务商 + $is_isp = true; + }else{ + //直连商户 + $params['appid'] = $this->config['app_id'];//小程序ID + $params['mchid'] = $this->config['mch_id'];//商户号 + $url = $this->getUrl('pay/transactions/h5');//直连商户 + $is_isp = false; + } + //判断是否开启分账 + $divide = Setting::getItem('divide',0); + if($profit_sharing or $divide['extract'] > 0){ + $params['settle_info']['profit_sharing'] = true; //开启分账 + } + $params = hema_json($params); + $headers = [ + 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $this->sign($url,'POST',$params,$is_isp), + 'Content-Type:application/json', + 'Accept:application/json', + 'User-Agent:' . $is_isp?$this->isp_config['mch_id']:$this->config['mch_id'], + ]; + $result = json_decode(Http::post($url, $params,[],$headers),true); + if(isset($result['code'])){ + $this->error = 'code:' . $result['code'] . ',msg:' . $result['message']; + return false; + } + return $result['h5_url']; + } + //扣取手续费 按照0.6%计算 + private function serviceFee($fee) + { + return intval(($fee - ($fee * 6 / 1000)) * 100); + } + /** + * 分账 + * $data:数组 =分账数据 + * [ + * out_order_no:第三方订单号 + * transaction_id:微信订单号 + * total:分账总金额 + * ] + * $applet_id=小程序编号 + * $delivery_fee=配送费分账金额 + */ + public function divide($data,$applet_id='',$delivery_fee=0) + { + $is_divide = false;//是否分账 + $total = $data['total'];//分账总金额 + $service_fee = 0;//平台分账金额(单位分) + $agent_fee = 0;//代理分账金额(单位分) + $agent_openid = '';//代理收款账号 + //判断外卖订单是否分账配送费 + if($delivery_fee > 0){ + $total = $total - $delivery_fee; + $delivery_fee = $this->serviceFee($delivery_fee);//去掉手续费 + $is_divide = true; //配送费大于0 开启分账 + } + $divide = Setting::getItem('divide',0); //分佣参数 + $applet = Applet::get($applet_id);//获取商家应用 + //如果开启分佣 + if($divide['extract'] > 0){ + $extract = $total * $divide['extract'] / 100;//抽取金额 + $service_fee = $this->serviceFee($extract);//去掉手续费 + if($divide['agent_extract'] > 0){ + //判断商家是否有代理商 + if($applet['agent_id'] > 0){ + if($account = DivideAccount::withoutGlobalScope()->where('applet_id',$applet_id)->find()){ + if(!empty($account['open_id'])){ + $agent_openid = $account['open_id']; + $agent_fee = $this->serviceFee($extract * $divide['agent_extract'] / 100);//去掉手续费 + $service_fee = $service_fee - $agent_fee; + } + } + } + } + $is_divide = true; //开启分账 + } + //判断是否要进行分账 + if(!$is_divide){ + $this->error = '不用分账'; + return false; + } + //***************** 添加分账接收方 *********************// + $receivers = [];//收款方账号列表 + //添加平台收佣账号 + if(($service_fee + $delivery_fee) > 0){ + if(!$this->addReceivers($applet_id)) { + $this->error = '添加平台分账接收方失败'; + return false; + } + $webpay = Setting::getItem('webpay',0)['wx']; //平台微信支付参数 + $receivers[] = [ + 'type' => 'MERCHANT_ID',//分账接收方类型 MERCHANT_ID=商户号 PERSONAL_OPENID=个人openid + 'account' => $webpay['mch_id'],//分账接收方账号 + 'amount' => $service_fee + $delivery_fee,//分账金额 + 'description' => '分佣给平台',//分账描述 + ]; + } + //添加代理收佣账号 + if($agent_fee > 0 and !empty($agent_openid)){ + if(!$this->addReceivers($applet_id,false,$agent_openid)) { + $this->error = '添加代理分账接收方失败'; + return false; + } + $receivers[] = [ + 'type' => $this->config['is_sub'] == 1 ? 'PERSONAL_SUB_OPENID':'PERSONAL_OPENID',//分账接收方类型 + 'account' => $agent_openid,//分账接收方账号 + 'amount' => $agent_fee,//分账金额 + 'description' => '分佣给代理',//分账描述 + ]; + } + //***************** 请求分账 *********************// + if(sizeof($receivers) == 0){ + $this->error = '收款方账号列表为空'; + return false; + } + if(!$this->profitSharing($data['transaction_id'],$data['out_order_no'],$receivers)) { + $this->error = '请求分账失败'; + return false; + } + //***************** 添加交易记录 *********************// + $record_log = [];//交易流水记录 + //是否增加平台分红记录(分佣) + if(($service_fee - $agent_fee) > 0){ + $money = sprintf("%.2f",$service_fee / 100);//计算金额 + //平台分红(分佣)记录 + array_push($record_log,[ + 'mode' => 40, //赠送 + 'type' => 30, //微信 + 'order_no' => $data['out_order_no'], + 'money' => $money, + 'remark' => '交易分佣' + ]); + //商户扣费记录 + array_push($record_log,[ + 'mode' => 50, //扣减 + 'type' => 30, //微信 + 'order_no' => $data['out_order_no'], + 'money' => $money, + 'user_id' => $applet['user_id'], + 'remark' => '交易服务费' + ]); + } + //是否增加配送费记录 + if($delivery_fee > 0){ + $money = sprintf("%.2f",$delivery_fee / 100);//计算金额 + //平台收取记录 + array_push($record_log,[ + 'mode' => 40, //赠送 + 'type' => 30, //微信 + 'order_no' => $data['out_order_no'], + 'money' => $money, + 'remark' => '第三方配送费' + ]); + //商户扣费记录 + array_push($record_log,[ + 'mode' => 50, //扣减 + 'type' => 30, //微信 + 'order_no' => $data['out_order_no'], + 'money' => $money, + 'user_id' => $applet['user_id'], + 'remark' => '第三方配送费' + ]); + } + //是否增加代理分佣记录 + if($agent_fee > 0){ + $money = sprintf("%.2f",$agent_fee / 100);//计算金额 + //平台收取记录 + array_push($record_log,[ + 'mode' => 40, //赠送 + 'type' => 30, //微信 + 'order_no' => $data['out_order_no'], + 'money' => $money, + 'user_id' => $applet['agent_id'], + 'remark' => '交易分佣' + ]); + } + //批量增加交易记录 + $model = new Record; + if(!$model->saveAll($record_log)){ + $this->error = '添加交易记录失败'; + return false; + } + return true; + } + /** + * 请求分账API + */ + private function profitSharing($transaction_id,$out_order_no,$receivers) + { + //服务商 + $params = [ + 'transaction_id' => $transaction_id,//微信订单号 + 'out_order_no' => $out_order_no,//商户分账单号 + 'receivers' => $receivers, + 'unfreeze_unsplit' => true,//是否解冻剩余未分资金 + ]; + if($this->config['is_sub'] == 1){ + //服务商 + $params['appid'] = $this->isp_config['app_id'];//服务商应用ID + $params['sub_appid'] = $this->config['app_id'];//子商户应用ID + $params['sub_mchid'] = $this->config['mch_id'];//子商户号 + $is_isp = true; + }else{ + //直连商户 + $params['appid'] = $this->config['app_id'];//小程序ID + $is_isp = false; + } + $params = hema_json($params); + $url = $this->getUrl('profitsharing/orders'); + $headers = [ + 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $this->sign($url,'POST',$params,$is_isp), + 'Content-Type:application/json', + 'Accept:application/json', + 'User-Agent:' . $is_isp?$this->isp_config['mch_id']:$this->config['mch_id'], + 'Wechatpay-Serial:' . $this->isp_config['serial_no'], + ]; + return $this->result(json_decode(Http::post($url, $params,[],$headers),true)); + } + /** + * 添加分账接收方API + * $is_mchid = 接收方是否是商户 $account = 接收账号 + */ + private function addReceivers($applet_id,$is_mchid=true,$account='') + { + if($this->config['is_sub'] == 1){ + //服务商 + $params['appid'] = $this->isp_config['app_id'];//服务商应用ID + $params['sub_appid'] = $this->config['app_id'];//子商户应用ID + $params['sub_mchid'] = $this->config['mch_id'];//子商户号 + if($is_mchid){ + $webpay = Setting::getItem('webpay',0)['wx']; + $params['type'] = 'MERCHANT_ID';//分账接收方类型 + $params['account'] = $webpay['mch_id'];//分账接收方账号 + $params['name'] = $this->getEncrypt($webpay['name']); //(加密)分账个人接收方姓名 分账接收方类型是MERCHANT_ID时,是商户全称(必传) + }else{ + $params['type'] = 'PERSONAL_SUB_OPENID';//分账接收方类型 + $params['account'] = $account;//分账接收方账号 + } + $params['relation_type'] = 'SERVICE_PROVIDER'; //与分账方的关系类型 服务商 + $is_isp = true; + $serial_no = $this->isp_config['serial_no']; + }else{ + //直连商户 + $params['appid'] = $this->config['app_id'];//小程序ID + if($is_mchid){ + $webpay = Setting::getItem('webpay',0)['wx']; + $params['type'] = 'MERCHANT_ID';//分账接收方类型 + $params['account'] = $webpay['mch_id'];//分账接收方账号 + $params['name'] = $this->getEncrypt($webpay['name'],false,$applet_id); //(加密)分账个人接收方姓名 分账接收方类型是MERCHANT_ID时,是商户全称(必传) + }else{ + $params['type'] = 'PERSONAL_OPENID';//分账接收方类型 + $params['account'] = $account;//分账接收方账号 + } + $params['relation_type'] = 'PARTNER'; ////与分账方的关系类型 合作伙伴 + $is_isp = false; + $serial_no = $this->config['serial_no']; + } + $params = hema_json($params); + $url = $this->getUrl('profitsharing/receivers/add'); + $headers = [ + 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $this->sign($url,'POST',$params,$is_isp), + 'Content-Type:application/json', + 'Accept:application/json', + 'User-Agent:' . $is_isp?$this->isp_config['mch_id']:$this->config['mch_id'], + 'Wechatpay-Serial:' . $serial_no, + ]; + return $this->result(json_decode(Http::post($url, $params,[],$headers),true)); + } + /** + * 申请退款API + */ + public function refunds($transaction_id,$out_refund_no,$refund_fee,$total_fee,$notify_url='',$reason='') + { + $params = [ + 'transaction_id' => $transaction_id,//微信支付订单号 + 'out_refund_no' => $out_refund_no,//退款订单号 + 'amount' => [ + 'refund' => intval($refund_fee * 100), // 退款金额,价格:单位分 + 'total' => intval($total_fee * 100), // 订单金额,价格:单位分 + 'currency' => 'CNY', //退款币种 只支持人民币:CNY + ], + ]; + if($this->config['is_sub'] == 1){ + //服务商 + $params['sub_mchid'] = $this->config['mch_id'];//子商户号 + $is_isp = true; + }else{ + $is_isp = false; + } + !empty($reason) && $params['reason'] = $reason;//退款原因 + !empty($notify_url) && $params['notify_url'] = base_url() . $notify_url; // 异步通知地址 + + $params = hema_json($params); + $url = $this->getUrl('refund/domestic/refunds'); + $headers = [ + 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $this->sign($url,'POST',$params,$is_isp), + 'Content-Type:application/json', + 'Accept:application/json', + 'User-Agent:' . $is_isp?$this->isp_config['mch_id']:$this->config['mch_id'], + ]; + return $this->result(json_decode(Http::post($url, $params,[],$headers),true)); + + } + /** + * 退款成功异步通知 + */ + public function refundsNotify($Model,$applet_id='') + { + //接收微信服务器回调的数据流 + if (!$json = file_get_contents('php://input')) { + $this->returnHttpCode(false); + } + // 将服务器返回的json数据转化为数组 + $result = json_decode($json,true); + if(empty($applet_id)){ + $this->config = Setting::getItem('webpay',0)['wx'];//平台商户支付参数 + }else{ + $this->config = Setting::getItem('wxpay',$applet_id);//商家商户支付参数 + } + if($this->config['is_sub'] == 1){ + //服务商 + $api_key = $this->isp_config['api_key']; + //判断平台证书是否过期 + if($this->isp_config['expire_time'] < time()){ + //更新平台证书 + if(!$this->certificates()){ + $this->returnHttpCode(false,$this->error);//更新失败 + } + } + }else{ + //直连商户 + $api_key = $this->config['api_key']; + //判断平台证书是否过期 + if($this->config['expire_time'] < time()){ + //更新平台证书 + if(!$this->certificates(false,$applet_id)){ + $this->returnHttpCode(false,$this->error);//更新失败 + } + } + } + if(!$decrypt = new AesUtil($api_key)){ + $this->returnHttpCode(false,$decrypt->getError()); + } + if(!$res = $decrypt->decryptToString($result['resource']['associated_data'], $result['resource']['nonce'], $result['resource']['ciphertext'])){ + $this->returnHttpCode(false,$decrypt->getError()); + } + $data = json_decode($res,true); + // 订单信息 + if(!$order = $Model->refundDetail($data['out_refund_no'])){ + $this->returnHttpCode(false,'订单不存在'); + } + + if($data['refund_status'] == 'SUCCESS') { + // 更新订单状态 + $order->updateRefundStatus($data['refund_id']); + $this->returnHttpCode(true);// 返回状态 + } + $this->returnHttpCode(false, '退款失败'); + } + /** + * Native下单API + * $out_trade_no=订单号, $total=支付金额,$attach=订单描述 $profit_sharing=是否分账 + */ + public function native($out_trade_no,$total,$notify_url,$attach='订单支付',$profit_sharing = false) + { + $params = [ + 'description' => $attach,//商品描述 + 'out_trade_no' => $out_trade_no,//商户订单号 + 'attach' => $attach,//附加数据 + 'notify_url' => base_url() . $notify_url, //通知地址 + 'amount' => [ + 'total' => intval($total * 100),//订单总金额,单位为分 + ], + 'scene_info' => [ + 'payer_client_ip' => \request()->ip(),//用户终端IP + ], + ]; + if($this->config['is_sub'] == 1){ + //服务商 + $params['sp_appid'] = $this->isp_config['app_id'];//服务商应用ID + $params['sp_mchid'] = $this->isp_config['mch_id'];//服务商商户号 + //$params['sub_appid'] = $this->config['app_id'];//子商户应用ID + $params['sub_mchid'] = $this->config['mch_id'];//子商户号 + //$params['payer']['sub_openid'] = $openid; //子用户标识Openid + $url = $this->getUrl('pay/partner/transactions/native');//服务商 + $is_isp = true; + }else{ + //直连商户 + $params['appid'] = $this->config['app_id'];//小程序ID + $params['mchid'] = $this->config['mch_id'];//商户号 + $url = $this->getUrl('pay/transactions/native');//直连商户 + $is_isp = false; + } + //判断是否开启分账 + $divide = Setting::getItem('divide',0); + if($profit_sharing or $divide['extract'] > 0){ + $params['settle_info']['profit_sharing'] = true; //开启分账 + } + $params = hema_json($params); + $headers = [ + 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $this->sign($url,'POST',$params,$is_isp), + 'Content-Type:application/json', + 'Accept:application/json', + 'User-Agent:' . $is_isp?$this->isp_config['mch_id']:$this->config['mch_id'], + ]; + $result = json_decode(Http::post($url, $params,[],$headers),true); + if(isset($result['code'])){ + $this->error = 'code:' . $result['code'] . ',msg:' . $result['message']; + return false; + } + if(!isset($result['code_url'])){ + $this->error = 'Native下单接口请求失败'; + return false; + } + return $result['code_url']; + } + /** + * JSAPI下单API + * $out_trade_no=订单号, $total=支付金额,$openid=微信用户ID, ,$attach=订单描述 + * $profit_sharing=是否分账(有配送费要分账时传递) + */ + public function jsapi($out_trade_no,$total,$openid,$notify_url,$attach='订单支付',$profit_sharing = false) + { + $params = [ + 'description' => $attach,//商品描述 + 'attach' => $attach,//附加数据 + 'out_trade_no' => $out_trade_no,//商户订单号 + 'notify_url' => base_url() . $notify_url, //通知地址 + 'amount' => [ + 'total' => intval($total * 100),//订单总金额,单位为分 + ], + 'scene_info' => [ + 'payer_client_ip' => \request()->ip(),//用户终端IP + ], + ]; + if($this->config['is_sub'] == 1){ + //服务商 + $params['sp_appid'] = $this->isp_config['app_id'];//服务商应用ID + $params['sp_mchid'] = $this->isp_config['mch_id'];//服务商商户号 + $params['sub_appid'] = $this->config['app_id'];//子商户应用ID + $params['sub_mchid'] = $this->config['mch_id'];//子商户号 + $params['payer']['sub_openid'] = $openid; //子用户标识Openid + $url = $this->getUrl('pay/partner/transactions/jsapi');//服务商 + $is_isp = true; + }else{ + //直连商户 + $params['appid'] = $this->config['app_id'];//小程序ID + $params['mchid'] = $this->config['mch_id'];//商户号 + $params['payer']['openid'] = $openid; //用户标识Openid + $url = $this->getUrl('pay/transactions/jsapi');//直连商户 + $is_isp = false; + } + //判断是否开启分账 + $divide = Setting::getItem('divide',0); + if($profit_sharing or $divide['extract'] > 0){ + $params['settle_info']['profit_sharing'] = true; //开启分账 + } + // $params = hema_json($params); + $params = json_encode($params); + $headers = [ + 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $this->sign($url,'POST',$params,$is_isp), + 'Content-Type:application/json', + 'Accept:application/json', + 'User-Agent:' . $is_isp?$this->isp_config['mch_id']:$this->config['mch_id'], + ]; + + + + $result = json_decode(Http::post($url, $params,[],$headers),true); + + if(isset($result['code'])){ + $this->error = 'code:' . $result['code'] . ',msg:' . $result['message']; + return false; + } + if(!isset($result['prepay_id'])){ + $this->error = 'JSAPI下单接口请求失败'; + return false; + } + $data = [ + 'timeStamp' => (string)time(), + 'nonceStr' => $this->nonce(), + 'package' => 'prepay_id=' . $result['prepay_id'], + 'signType' => 'RSA', + ]; + $data['paySign'] = $this->paySign($data); + return $data; + } + + /** + * 支付成功异步通知 + */ + public function notify($Model,$applet_id,$method='edit') + { + + Log::write('机333','notice'); + + //接收微信服务器回调的数据流 + if (!$json = file_get_contents('php://input')) { + $this->returnHttpCode(false); + } + // 将服务器返回的json数据转化为数组 + $result = json_decode($json,true); + + Log::write($json,'notice'); + + if(empty($applet_id)){ + $this->config = Setting::getItem('webpay',0)['wx'];//平台商户支付参数 + }else{ + $this->config = Setting::getItem('wxpayisp',0); + } + + $this->config['is_sub']=2; + + if($this->config['is_sub'] == 1){ + //服务商 + $api_key = $this->isp_config['api_key']; + //判断平台证书是否过期 + if($this->isp_config['expire_time'] < time()){ + //更新平台证书 + if(!$this->certificates()){ + $this->returnHttpCode(false,$this->error);//更新失败 + } + } + }else{ + //直连商户 + $api_key = $this->config['api_key']; + //判断平台证书是否过期 + if($this->config['expire_time'] < time()){ + //更新平台证书 + if(!$this->certificates(false,$applet_id)){ + $this->returnHttpCode(false,$this->error);//更新失败 + } + } + } + if(!$decrypt = new AesUtil($api_key)){ + $this->returnHttpCode(false,$decrypt->getError()); + } + if(!$res = $decrypt->decryptToString($result['resource']['associated_data'], $result['resource']['nonce'], $result['resource']['ciphertext'])){ + $this->returnHttpCode(false,$decrypt->getError()); + } + $data = json_decode($res,true); + // 订单信息 + if(!$order = $Model->payDetail($data['out_trade_no'])){ + $this->returnHttpCode(false,'订单不存在'); + } + + //判断支付状态 + if($data['trade_state'] == 'SUCCESS') { + if($method == 'add'){ + $Model->updatePayStatus($data['transaction_id'],$order); + Cache::delete($data['out_trade_no']); + }else{ + // 更新订单状态 + $order->updatePayStatus($data['transaction_id']); + } + // 返回状态 + $this->returnHttpCode(true); + } + // 返回状态 + $this->returnHttpCode(false, '支付失败'); + } + + /** + * 特约商户进件 + * 频率限制:15/s + */ + public function applyment($params) + { + //********************* 数据加密 ***************** + + //管理员姓名 + if(!$result = $this->getEncrypt($params['contact_info']['contact_name'])){ + return false; + } + $params['contact_info']['contact_name'] = $result; + //管理员电话 + if(!$result = $this->getEncrypt($params['contact_info']['mobile_phone'])){ + return false; + } + $params['contact_info']['mobile_phone'] = $result; + //管理员邮箱 + if(!$result = $this->getEncrypt($params['contact_info']['contact_email'])){ + return false; + } + $params['contact_info']['contact_email'] = $result; + //身份证姓名 + if(!$result = $this->getEncrypt($params['subject_info']['identity_info']['id_card_info']['id_card_name'])){ + return false; + } + $params['subject_info']['identity_info']['id_card_info']['id_card_name'] = $result; + //身份证号 + if(!$result = $this->getEncrypt($params['subject_info']['identity_info']['id_card_info']['id_card_number'])){ + return false; + } + $params['subject_info']['identity_info']['id_card_info']['id_card_number'] = $result; + + //身份证居住地址 + if(!$result = $this->getEncrypt($params['subject_info']['identity_info']['id_card_info']['id_card_address'])){ + return false; + } + $params['subject_info']['identity_info']['id_card_info']['id_card_address'] = $result; + + + //银行开户名称 + if(!$result = $this->getEncrypt($params['bank_account_info']['account_name'])){ + return false; + } + $params['bank_account_info']['account_name'] = $result; + //银行账号 + if(!$result = $this->getEncrypt($params['bank_account_info']['account_number'])){ + return false; + } + $params['bank_account_info']['account_number'] = $result; + + //********************* 上传图片 ***************** + //营业执照 + if(!$result = $this->upload($params['subject_info']['business_license_info']['license_copy'])){ + return false; + } + $params['subject_info']['business_license_info']['license_copy'] = $result; + //身份证正面 + if(!$result = $this->upload($params['subject_info']['identity_info']['id_card_info']['id_card_copy'])){ + return false; + } + $params['subject_info']['identity_info']['id_card_info']['id_card_copy'] = $result; + //身份证反面 + if(!$result = $this->upload($params['subject_info']['identity_info']['id_card_info']['id_card_national'])){ + return false; + } + $params['subject_info']['identity_info']['id_card_info']['id_card_national'] = $result; + //特殊资质 + if(!$result = $this->upload($params['settlement_info']['qualifications'][0])){ + return false; + } + $params['settlement_info']['qualifications'][0] = $result; + //门头照片 + if(!$result = $this->upload($params['business_info']['sales_info']['biz_store_info']['store_entrance_pic'][0])){ + return false; + } + $params['business_info']['sales_info']['biz_store_info']['store_entrance_pic'][0] = $result; + //店内照片 + if(!$result = $this->upload($params['business_info']['sales_info']['biz_store_info']['indoor_pic'][0])){ + return false; + } + $params['business_info']['sales_info']['biz_store_info']['indoor_pic'][0] = $result; + $params = hema_json($params); + $url = $this->getUrl('applyment4sub/applyment/'); + $headers = [ + 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $this->sign($url,'POST',$params), + 'Content-Type:application/json', + 'Accept:application/json', + 'User-Agent:' . $this->isp_config['mch_id'], + 'Wechatpay-Serial:' . $this->isp_config['serial_no'], + ]; + $result = json_decode(Http::post($url, $params,[],$headers),true); + if(isset($result['code'])){ + $this->error = 'code:' . $result['code'] . ',msg:' . $result['message']; + return false; + } + return $result['applyment_id']; + } + /** + * 查询申请单状态 + */ + public function queryApplyment($no,$is_applyment_id = false) + { + if($is_applyment_id){ + $path = 'applyment_id/' . $no;//通过申请单号查询申请状态(官方返回的编号) + }else{ + $path = 'business_code/' . $no;//通过业务申请编号查询申请状态(第三方自定义的编号) + } + $url = $this->getUrl('applyment4sub/applyment/'.$path); + $headers = [ + 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $this->sign($url,'GET'), + 'Accept:application/json', + ]; + return $this->result(json_decode(Http::get($url, [],[],$headers),true)); + } + /** + * 获取平台证书列表 + */ + private function certificates($is_isp=true,$applet_id='') + { + $url = $this->getUrl('certificates'); + $headers = [ + 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $this->sign($url,'GET','',$is_isp), + 'Accept:application/json', + 'User-Agent:https://zh.wikipedia.org/wiki/User_agent', + ]; + $result = json_decode(Http::get($url,[],[],$headers),true); + if(isset($result['code'])){ + $this->error = 'code:' . $result['code'] . ',msg:' . $result['message']; + return false; + } + //验证是否获取到了数据 + if(!isset($result['data']) and sizeof($result['data']) == 0){ + $this->error = '未获取到可用的平台证书'; + return false; + } + $result = $result['data'][0];//获取证书列表中的第一个数据 + if($is_isp){ + $api_key = $this->isp_config['api_key']; + }else{ + $api_key = $this->config['api_key']; + } + if(!$decrypt = new AesUtil($api_key)){ + $this->error = $decrypt->getError(); + return false; + } + if(!$res = $decrypt->decryptToString($result['encrypt_certificate']['associated_data'], $result['encrypt_certificate']['nonce'], $result['encrypt_certificate']['ciphertext'])){ + $this->error = $decrypt->getError(); + return false; + } + //计算到期时间 + $expire_time = explode('T',$result['expire_time']); + $expire_time = strtotime($expire_time[0]); + $model = new Setting; + //更新平台证书 + if($is_isp){ + $this->isp_config['certificates'] = $res; + $this->isp_config['serial_no'] = $result['serial_no']; + $this->isp_config['expire_time'] = $expire_time; + $model->edit('wxpayisp',$this->isp_config,0); //保存到数据库 + return true; + } + //更新特约商户 平台证书 + $this->config['certificates'] = $res; + $this->config['serial_no'] = $result['serial_no']; + $this->config['expire_time'] = $expire_time; + if(empty($applet_id)){ + $config = Setting::getItem('webpay',0); + $config['wx']['certificates'] = $res; + $config['wx']['serial_no'] = $result['serial_no']; + $config['wx']['expire_time'] = $expire_time; + $model->edit('webpay',$config,0); //保存到数据库 + }else{ + $model->edit('wxpay',$this->config,$applet_id); //保存到数据库 + } + return true; + } + + /** + * 图片上传API + */ + private function upload($file_path) + { + $file = file_get_contents($file_path);//获取网络图片 + //获取文件名称 + $arr = explode('/',$file_path); + $filename = $arr[sizeof($arr)-1]; + $meta =[ + 'filename' => $filename, + 'sha256' => hash('sha256',$file), + ]; + $url = $this->getUrl('merchant/media/upload'); + $boundary = uniqid();//随机数 + $headers = [ + 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $this->sign($url,'POST',hema_json($meta)), + 'Accept:application/json', + 'Content-Type:multipart/form-data;boundary=' . $boundary, + ]; + $params = '--' . $boundary . "\r\n"; + $params .= 'Content-Disposition:form-data; name="meta"' . "\r\n"; + $params .= 'Content-Type:application/json' . "\r\n\r\n"; + $params .= hema_json($meta) . "\r\n"; + $params .= '--' . $boundary . "\r\n"; + $params .= 'Content-Disposition:form-data;name="file";filename="' . $meta['filename'] . '"' . "\r\n"; + $params .= 'Content-Type:image/jpg' . "\r\n\r\n"; + $params .= $file . "\r\n"; + $params .= '--' . $boundary . '--' . "\r\n"; + $result = json_decode(Http::post($url, $params,[],$headers),true); + if(isset($result['code'])){ + $this->error = 'code:' . $result['code'] . ',msg:' . $result['message']; + return false; + } + if(isset($result['media_id'])){ + return $result['media_id']; + } + $this->error = '图片上传失败'; + return false; + } + + /** + * 调起支付签名 + */ + private function paySign($data) + { + $params = $this->config['app_id'] . "\n" . + $data['timeStamp'] . "\n" . + $data['nonceStr'] . "\n" . + $data['package'] . "\n"; + /*if($this->config['is_sub'] == 1){ + //服务商 + }else{ + //直连商户 + $private_key = $this->config['key_pem']; //API私有证书 + }*/ + $private_key = $this->isp_config['key_pem']; //API私有证书 + + $raw_sign = ''; + openssl_sign($params, $raw_sign, $private_key, 'sha256WithRSAEncryption'); + return base64_encode($raw_sign); + } + + /** + * 生成签名 + * $http_method = HTTP请求的方法(GET,POST,PUT + * serial_no 为你的商户证书序列号 + * $mch_private_key = 是商户API私钥,在商户平台下载的证书文件包含该文件,名称为apiclient_key.pem + * $is_isp 是否为服务商操作 + */ + private function sign($url,$http_method,$body='',$is_isp=true) + { + $timestamp = time(); //时间戳 + $nonce = $this->nonce(); //随机字符串 + $url_parts = parse_url($url); + $canonical_url = ($url_parts['path'] . (!empty($url_parts['query']) ? "?${url_parts['query']}" : "")); + $params = $http_method . "\n" . + $canonical_url . "\n" . + $timestamp . "\n" . + $nonce . "\n" . + $body . "\n"; + if($is_isp){ + $mchid = $this->isp_config['mch_id']; //商户号 + $serial_no = $this->isp_config['api_serial_no']; //API证书序列号 + $mch_private_key = $this->isp_config['key_pem']; //API私有证书 + }else{ + $mchid = $this->config['mch_id']; //商户号 + $serial_no = $this->config['api_serial_no']; //API证书序列号 + $mch_private_key = $this->config['key_pem']; //API私有证书 + } + $raw_sign = ''; + openssl_sign($params, $raw_sign, $mch_private_key, 'sha256WithRSAEncryption'); + $sign = base64_encode($raw_sign); + //$schema = 'WECHATPAY2-SHA256-RSA2048'; + $token = sprintf('mchid="%s",nonce_str="%s",timestamp="%d",serial_no="%s",signature="%s"',$mchid, $nonce, $timestamp, $serial_no, $sign); + return $token; + } + /** + * 敏感信息加密 + */ + private function getEncrypt($str,$is_isp = true,$applet_id='') + { + //判断平台证书是否过期 + if($is_isp){ + //服务商 + if($this->isp_config['expire_time'] < time()){ + //更新平台证书 + if(!$this->certificates()){ + return false;//更新失败 + } + } + $public_key = $this->isp_config['certificates'];//平台证书 + }else{ + //直连商户 + if($this->config['expire_time'] < time()){ + //更新平台证书 + if(!$this->certificates(false,$applet_id)){ + return false;//更新失败 + } + } + $public_key = $this->config['certificates'];//平台证书 + } + $encrypted = ''; + if (!openssl_public_encrypt($str, $encrypted, $public_key, OPENSSL_PKCS1_OAEP_PADDING)) { + $this->error = '敏感信息加密失败'; + return false; + } + return base64_encode($encrypted);//base64编码 + } + /** + * 生成随机字符串 + */ + private function nonce() + { + return md5(uniqid()); + } + /* + * 拼接请求域名接口 + */ + private function getUrl($url) + { + return $this->api_url . '/' . $this->version . '/' . $url; + } + /** + * 获取Headers数据 + */ + private function getHeaders() + { + $headers = array(); + foreach ($_SERVER as $key => $value) { + if (substr($key, 0, 5) === 'HTTP_') { + $key = substr($key, 5); + $key = str_replace('_', ' ', $key); + $key = str_replace(' ', '-', $key); + $key = strtolower($key); + $headers[$key] = $value; + } + } + return $headers; + } + /** + * 返回状态给微信服务器 + */ + private function returnHttpCode($is_success = true, $msg = '失败') + { + $json = hema_json([ + 'code' => $is_success ? 'SUCCESS' : 'FAIL', + 'message' => $is_success ? '成功' : $msg, + ]); + if($is_success){ + header('HTTP/1.1 200 OK'); + }else{ + header('HTTP/1.1 404 Not Found'); + } + die($json); + } + /** + * 请求数据验证 + **/ + private function result($result) + { + if(isset($result['code'])){ + $this->error = 'code:' . $result['code'] . ',msg:' . $result['message']; + return false; + } + return $result; + } + public function getError() + { + return $this->error; + } + + /********** V2接口 **********/ + /** + * 付款码支付 + * $auth_code=付款码 $order_no=订单号 $openid=微信用户ID, $total_fee=支付金额, ,$attach=订单描述 $divide=是否分账 + */ + public function micropay($auth_code,$order_no, $total_fee,$profit_sharing = false,$attach = '订单支付') + { + // 当前时间 + $time = time(); + // 生成随机字符串 + $nonceStr = md5($time); + // API参数 + $params = [ + 'auth_code' => $auth_code,//付款码支付 + 'attach' => $attach, + 'nonce_str' => $nonceStr,//随机字符串 + 'body' => $attach,//商品描述 + 'out_trade_no' => $order_no,//商户订单号 + 'total_fee' => intval($total_fee * 100), // 价格:单位分 + 'spbill_create_ip' => \request()->ip(),//服务终端IP + ]; + if($this->config['is_sub'] == 1){ + //服务商统一下单 + $values = Setting::getItem('wxpayisp',0); + $this->config['api_key'] = $this->isp_config['api_key'];//服务商商户的密钥 + $params['appid'] = $this->isp_config['app_id'];//服务商商户的APPID + $params['mch_id'] = $this->isp_config['mch_id'];//服务商商户号 + $params['sub_appid'] = $this->config['app_id'];//当前调起支付的小程序APPID + $params['sub_mch_id'] = $this->config['mch_id'];//服务商分配的子商户号 + }else{ + $params['appid'] = $this->config['app_id'];//小程序ID + $params['mch_id'] = $this->config['mch_id'];//商户号 + } + //判断是否开启分账 + $divide = Setting::getItem('divide',0); + if($profit_sharing or $divide['extract'] > 0){ + $params['profit_sharing'] = 'Y';//开启分账 + } + + // 生成签名 + $params['sign'] = $this->makeSign($params); + $url = 'https://api.mch.weixin.qq.com/pay/micropay';// 请求API + $result = $this->postXmlCurl($this->toXml($params), $url); + $prepay = $this->fromXml($result); + // 请求失败 + if ($prepay['return_code'] === 'FAIL') { + die(hema_json(['code' => -10, 'msg' => $prepay['return_msg']])); + } + //判断付款码支付时,用户支付中,需要输入密码 + if ($prepay['result_code'] === 'USERPAYING') { + return false; + } + if ($prepay['result_code'] === 'FAIL') { + die(hema_json(['code' => -10, 'msg' => $prepay['err_code_des']])); + } + return $prepay['transaction_id'];//支付交易号 + } + + /** + * 查询付款码支付结果是否成功 + */ + public function orderquery($out_trade_no) + { + // 当前时间 + $time = time(); + // 生成随机字符串 + $nonceStr = md5($time); + // API参数 + $params = [ + 'out_trade_no' => $out_trade_no, + 'nonce_str' => $nonceStr,//随机字符串 + ]; + if($this->config['is_sub'] == 1){ + //服务商统一下单 + $this->config['api_key'] = $this->isp_config['api_key'];//服务商商户的密钥 + $params['appid'] = $this->isp_config['app_id'];//服务商商户的APPID + $params['mch_id'] = $this->isp_config['mch_id'];//服务商商户号 + $params['sub_appid'] = $this->config['app_id'];//当前调起支付的小程序APPID + $params['sub_mch_id'] = $this->config['mch_id'];//服务商分配的子商户号 + }else{ + $params['appid'] = $this->config['app_id'];//小程序ID + $params['mch_id'] = $this->config['mch_id'];//商户号 + } + // 生成签名 + $params['sign'] = $this->makeSign($params); + // 请求API + $url = 'https://api.mch.weixin.qq.com/pay/orderquery'; + $result = $this->postXmlCurl($this->toXml($params), $url); + $prepay = $this->fromXml($result); + // 请求失败 + if ($prepay['return_code'] === 'SUCCESS' AND $prepay['result_code'] === 'SUCCESS') { + return $prepay['trade_state']; + } + return 'ERROR'; + } + /** + * 输出xml字符 + */ + private function toXml($values) + { + if (!is_array($values) + || count($values) <= 0 + ) { + return false; + } + $xml = ""; + foreach ($values as $key => $val) { + if (is_numeric($val)) { + $xml .= "<" . $key . ">" . $val . ""; + } else { + $xml .= "<" . $key . ">"; + } + } + $xml .= ""; + return $xml; + } + /** + * 将xml转为array + */ + private function fromXml($xml) + { + // 禁止引用外部xml实体 + libxml_disable_entity_loader(true); + return json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); + } + /** + * 以post方式提交xml到对应的接口url + */ + private function postXmlCurl($xml, $url, $cert = false, $second = 30) + { + $ch = curl_init(); + curl_setopt($ch, CURLOPT_TIMEOUT, $second);// 设置超时时间 + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);//https请求 不验证证书和host + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);//严格校验 + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);// 要求结果为字符串且输出到屏幕上 + curl_setopt($ch, CURLOPT_POST, TRUE);// post提交方式 + curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); + curl_setopt($ch, CURLOPT_HEADER, FALSE);// 是否返回请求头 + //判断是否使用证书 + if($cert){ + $path = root_path() . '/extend/hema/wechat/cert/'; + file_put_contents($path . 'apiclient_cert.pem',$this->config['cert_pem']); + file_put_contents($path . 'apiclient_key.pem',$this->config['key_pem']); + curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); + curl_setopt($ch,CURLOPT_SSLCERT,$path . 'apiclient_cert.pem'); + curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); + curl_setopt($ch,CURLOPT_SSLKEY,$path . 'apiclient_key.pem'); + } + $data = curl_exec($ch);// 运行curl + curl_close($ch); + return $data; + } + + /** + * 生成签名MD5 + */ + private function makeSign($values) + { + //签名步骤一:按字典序排序参数 + ksort($values); + $string = $this->toUrlParams($values); + //签名步骤二:在string后加入KEY + $string = $string . '&key=' . $this->config['api_key']; + //签名步骤三:MD5加密 + $string = md5($string); + //签名步骤四:所有字符转为大写 + $result = strtoupper($string); + return $result; + } + + /** + * 格式化参数格式化成url参数 + */ + private function toUrlParams($values) + { + $buff = ''; + foreach ($values as $k => $v) { + if ($k != 'sign' && $v != '' && !is_array($v)) { + $buff .= $k . '=' . $v . '&'; + } + } + return trim($buff, '&'); + } } \ No newline at end of file diff --git a/public/.well-known/acme-challenge/MSXAiMoekTBByxVW78vewFjtSHH8qZ9O0Mwdzt1_dD8 b/public/.well-known/acme-challenge/MSXAiMoekTBByxVW78vewFjtSHH8qZ9O0Mwdzt1_dD8 new file mode 100644 index 0000000..a10ad66 --- /dev/null +++ b/public/.well-known/acme-challenge/MSXAiMoekTBByxVW78vewFjtSHH8qZ9O0Mwdzt1_dD8 @@ -0,0 +1 @@ +MSXAiMoekTBByxVW78vewFjtSHH8qZ9O0Mwdzt1_dD8.M2aqQcnvx01Y2S5zCFXJr1JyTjgYmG5xwwL0dfQzKco \ No newline at end of file diff --git a/public/uploads/20231201/1be072d5272f567b09e85a28953712d9.jpg b/public/uploads/20231201/1be072d5272f567b09e85a28953712d9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b7834ac59cccdbdfe49f6c3e6d6c7f43a175316 GIT binary patch literal 122498 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 literal 0 HcmV?d00001 diff --git a/runtime/admin/temp/1135d99398657c0ae566d459308e8327.php b/runtime/admin/temp/1135d99398657c0ae566d459308e8327.php old mode 100644 new mode 100755 diff --git a/runtime/admin/temp/165f30f93e40130c15d885f561996cb2.php b/runtime/admin/temp/165f30f93e40130c15d885f561996cb2.php old mode 100644 new mode 100755 diff --git a/runtime/admin/temp/29a1b1f477dc444c90efb32e05e28fcd.php b/runtime/admin/temp/29a1b1f477dc444c90efb32e05e28fcd.php old mode 100644 new mode 100755 diff --git a/runtime/admin/temp/352d937338d3cbeaa5a6b2aef6a0495e.php b/runtime/admin/temp/352d937338d3cbeaa5a6b2aef6a0495e.php old mode 100644 new mode 100755 diff --git a/runtime/admin/temp/3a0f7010e1e6219083ad8c5646d41a40.php b/runtime/admin/temp/3a0f7010e1e6219083ad8c5646d41a40.php old mode 100644 new mode 100755 diff --git a/runtime/admin/temp/5c32e7932a0700ecea140e20f7bc660c.php b/runtime/admin/temp/5c32e7932a0700ecea140e20f7bc660c.php old mode 100644 new mode 100755 diff --git a/runtime/admin/temp/77873608a3a896bd3d43bafe9fe9a27f.php b/runtime/admin/temp/77873608a3a896bd3d43bafe9fe9a27f.php old mode 100644 new mode 100755 diff --git a/runtime/admin/temp/77d3402cf97c0a269213cffcfac5cd3c.php b/runtime/admin/temp/77d3402cf97c0a269213cffcfac5cd3c.php old mode 100644 new mode 100755 diff --git a/runtime/admin/temp/871d8f9ac37b49ddb1f8892d42b0b432.php b/runtime/admin/temp/871d8f9ac37b49ddb1f8892d42b0b432.php old mode 100644 new mode 100755 diff --git a/runtime/admin/temp/ce62fa7229051749de6651961ed8a08c.php b/runtime/admin/temp/ce62fa7229051749de6651961ed8a08c.php old mode 100644 new mode 100755 diff --git a/runtime/admin/temp/d0998e50cb4b95fe491115d630adb4d8.php b/runtime/admin/temp/d0998e50cb4b95fe491115d630adb4d8.php old mode 100644 new mode 100755 diff --git a/runtime/admin/temp/db3fc3ab033eae396bc223a1db61ffa3.php b/runtime/admin/temp/db3fc3ab033eae396bc223a1db61ffa3.php old mode 100644 new mode 100755 diff --git a/runtime/applet/log/202311/21_error.log b/runtime/applet/log/202311/21_error.log old mode 100644 new mode 100755 diff --git a/runtime/applet/temp/0401244b90b33ea4345ab01331660c33.php b/runtime/applet/temp/0401244b90b33ea4345ab01331660c33.php old mode 100644 new mode 100755 diff --git a/runtime/applet/temp/4d1c52033742f01e5be6650c8d5d5c31.php b/runtime/applet/temp/4d1c52033742f01e5be6650c8d5d5c31.php old mode 100644 new mode 100755 diff --git a/runtime/applet/temp/6d4c9daa5662bf5b4314aa7ff4421e3e.php b/runtime/applet/temp/6d4c9daa5662bf5b4314aa7ff4421e3e.php old mode 100644 new mode 100755 diff --git a/runtime/applet/temp/6e46255bb576ddd9bc889b5af5c6af2a.php b/runtime/applet/temp/6e46255bb576ddd9bc889b5af5c6af2a.php old mode 100644 new mode 100755 diff --git a/runtime/applet/temp/77dea72f140119eec7bc249b88fb2458.php b/runtime/applet/temp/77dea72f140119eec7bc249b88fb2458.php old mode 100644 new mode 100755 diff --git a/runtime/applet/temp/856c52ff20046a0878ce6c7c3f189901.php b/runtime/applet/temp/856c52ff20046a0878ce6c7c3f189901.php old mode 100644 new mode 100755 diff --git a/runtime/applet/temp/8f1b83cd3dd31541f148aeee4301fb03.php b/runtime/applet/temp/8f1b83cd3dd31541f148aeee4301fb03.php old mode 100644 new mode 100755 diff --git a/runtime/applet/temp/9fe3befe3ea695f4e50a001bee83c480.php b/runtime/applet/temp/9fe3befe3ea695f4e50a001bee83c480.php old mode 100644 new mode 100755 diff --git a/runtime/applet/temp/d406f6394afc907afff31febc70c8935.php b/runtime/applet/temp/d406f6394afc907afff31febc70c8935.php old mode 100644 new mode 100755 diff --git a/runtime/applet/temp/f23a297c97a3d0d4d3ea56de0ee9794f.php b/runtime/applet/temp/f23a297c97a3d0d4d3ea56de0ee9794f.php old mode 100644 new mode 100755 diff --git a/runtime/cache/13/0fd29bc1e1c9570496921b09ae2849.php b/runtime/cache/13/0fd29bc1e1c9570496921b09ae2849.php old mode 100644 new mode 100755 diff --git a/runtime/cache/21/413a1afbfae837472e4844bda5ddbc.php b/runtime/cache/21/413a1afbfae837472e4844bda5ddbc.php old mode 100644 new mode 100755 diff --git a/runtime/cache/30/4fce12426ae0229ae22216efc4ea5b.php b/runtime/cache/30/4fce12426ae0229ae22216efc4ea5b.php old mode 100644 new mode 100755 diff --git a/runtime/cache/4e/819c837d54a6ed09abc77a8560a66f.php b/runtime/cache/4e/819c837d54a6ed09abc77a8560a66f.php old mode 100644 new mode 100755 diff --git a/runtime/cache/90/11cab08498f44656fa8e2447787b43.php b/runtime/cache/90/11cab08498f44656fa8e2447787b43.php index 5811081..2b945a5 100644 --- a/runtime/cache/90/11cab08498f44656fa8e2447787b43.php +++ b/runtime/cache/90/11cab08498f44656fa8e2447787b43.php @@ -1,4 +1,55 @@ -a:0:{} \ No newline at end of file +a:3:{s:7:"ability";a:5:{s:3:"key";s:7:"ability";s:8:"describe";s:12:"功能设置";s:6:"values";a:6:{s:12:"applet_apply";s:1:"1";s:10:"applet_fee";s:1:"0";s:13:"applet_online";s:1:"1";s:9:"pay_apply";s:1:"1";s:7:"open_id";s:0:"";s:5:"wxmap";s:35:"OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77";}s:9:"applet_id";i:0;s:11:"update_time";i:0;}s:3:"web";a:5:{s:3:"key";s:3:"web";s:8:"describe";s:12:"站点设置";s:6:"values";a:9:{s:4:"name";s:36:"蓝色畅想网络股份有限公司";s:7:"company";s:0:"";s:7:"address";s:0:"";s:3:"icp";s:0:"";s:11:"description";s:0:"";s:8:"keywords";s:0:"";s:11:"baidu_count";s:0:"";s:2:"qq";s:0:"";s:5:"phone";s:0:"";}s:9:"applet_id";i:0;s:11:"update_time";i:0;}s:8:"wxpayisp";a:5:{s:3:"key";s:8:"wxpayisp";s:8:"describe";s:27:"微信支付服务商设置";s:6:"values";a:9:{s:6:"app_id";s:18:"wx3668302906e3894f";s:6:"mch_id";s:10:"1658128914";s:7:"api_key";s:32:"GS4fwElUx6Ys9KbFMvFlmok1zkL3UMno";s:13:"api_serial_no";s:40:"51B38FC8749949FFEC70E7CDB6D8EC7057D7B250";s:8:"cert_pem";s:1504:"-----BEGIN CERTIFICATE----- +MIIEKzCCAxOgAwIBAgIUUbOPyHSZSf/scOfNttjscFfXslAwDQYJKoZIhvcNAQEL +BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT +FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg +Q0EwHhcNMjMxMTA4MTAzMjQwWhcNMjgxMTA2MTAzMjQwWjCBhDETMBEGA1UEAwwK +MTY1ODEyODkxNDEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTAwLgYDVQQL +DCfpu4TovpvkuIDvvIjljqbpl6jvvInpo5/lk4HmnInpmZDlhazlj7gxCzAJBgNV +BAYMAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAKUgYnkTu2HZT/eQoYNgWLYR/L5T1HRVO4jwBhrXaWqdqBOH6Jx+ +8VNhWAwg9C6ULjYfqBRlxoyAyH/0xJeFvmbL2mohpgflRsXjSqdaBgP449M3yr2T +D0lFlRfDRHDVCOkfzUEmpWFwytBZIjI+1t5/s5Wzz4tysHTOtmBBXhcfoLwy/gdQ +3nv1OAlH9nf9SAo9t/iZVC47Tz3gdu2WyNHepnaExUrC8cAypL9bXtCkOVHwO+Km +7ox5sR9lGKsQ6ArANHYmpwWXxy9iOm3TzNINnMvuJ26k4qOw69qsn+bAEBW0pe82 +14uQK1mdbFZeBl6dSqxtGg2AHUMkJlE56mECAwEAAaOBuTCBtjAJBgNVHRMEAjAA +MAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGEaHR0cDovL2V2 +Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJD +MDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFCNjU0MjJFMTJC +MjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEBCwUAA4IBAQCT +ovV7SSKsIAmiVmf0CqmRxucNIHQDPcUuBTrHFIaQYIIOwiJd2tfzzvF8CF3EAKpD +IkaZflQaGtYQQ81atJ8TNGzeTseS0mmjucea808bvHOFmxrMmY1D/l2NjklOEpVd +Rhs5HMtOAc4rq6cXbSK/a/sP/Lyc1vu39/bkCDITWtH8sVAxPgZpFHPR1PXxhKwJ +iMg70BWmzIBqIWSfB9NC0kbKOk9TjJNiZk8N+IoQaWiZY/n4X0rLNEKLernlvxBu +O+C3u/L9W1WAZM+GXsNNnPmGSF//GHPYEGWn0nKwTm9EvHERR/QGPDhMXg4h358I +j8bCl9IjOKZtzE1+ztVu +-----END CERTIFICATE-----";s:7:"key_pem";s:1703:"-----BEGIN PRIVATE KEY----- +MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQClIGJ5E7th2U/3 +kKGDYFi2Efy+U9R0VTuI8AYa12lqnagTh+icfvFTYVgMIPQulC42H6gUZcaMgMh/ +9MSXhb5my9pqIaYH5UbF40qnWgYD+OPTN8q9kw9JRZUXw0Rw1QjpH81BJqVhcMrQ +WSIyPtbef7OVs8+LcrB0zrZgQV4XH6C8Mv4HUN579TgJR/Z3/UgKPbf4mVQuO089 +4HbtlsjR3qZ2hMVKwvHAMqS/W17QpDlR8Dvipu6MebEfZRirEOgKwDR2JqcFl8cv +Yjpt08zSDZzL7idupOKjsOvarJ/mwBAVtKXvNteLkCtZnWxWXgZenUqsbRoNgB1D +JCZROephAgMBAAECggEAOVfoupFOpmlYKunwHPaNeBUBB3uHMSsUNLbd995Mvnin +kLjG3+n5lnIcqIGdKrvM3IDb1tGNROfIOR9gUhphB8PNQsQSq3VEwZ3wI/PQWPrK +62PZpUH3sgNXBlyKXQCuSn7/wZtRHWiVFguOI5LM/ZGtZNR/w7Z9buMGVKD+stp7 +Gc4C15Vss7FVh00BLOoiyncUwkdiIGMMOfBqgCHiFrphSPIdGjzb1WqMjU/Np7N0 +dSwpg0m583u8/mBovfZ+NHe1FqtXtltzl4pYohHu9qgaPtuKdFo8z6Dh+8Y5QLip +31TzvZFpFn5ZJNBq3WQYdARkq+ZMCue6IUznA2NTjQKBgQDSTtFqs6fHvUvSLULZ +8w3HMAAD+3EEPQf4bjrZKpvbKyuRMdzTJzjyLFqURpYELiQ+PK3KmF3rl1X0wdby +383pHXhUjq6GfFGiYDaf8V2HMSKwrLKj8M/CGH0Z6rScE0FFM6RoSHLfZWmoLJI7 +JoEd99ekORKWLxiXGWMClq0Z4wKBgQDJAJvePrlzsCmJN4qW73b1aW7sUPpqJz8k +lm5Nrci5hQoTx52QKYYJw+/6hEM+z+K0j3cfMe4Q/jtRcBaCaIWBTmwK+x176NZy +4j+FsdQsIiBJDk5igGDLnuEPONJa96MSpbIgIUqgZvJs9W/j+DTwUakmiBtmzQdC +wHKREfTt6wKBgEBvxdpbkVyxszmChKkiv2X4XwjZUZdq27ZSj9VaKMbOQ1sJXA+W +ROxuipJDzlMZkCFBlj4s0RoOFFgZzDI+QGjcjrHZxb+O97Q4poP7AB0cAPUA9Psm +HYHq3unB7/SiMa1yVT1edVPdTrIodeWJtqXn+jpnAjrh0zb4oE16vS7hAoGAQCGP +mbNNnFnChuNPtqSkwdxn5cJYg3IONXBBtUsTVg3aj0ELRqnY+FipwrZcdjgBzzZO +/YcCvC1BY9RteiI7JmyNEFvapmQ9t930AoYgegxRXL3RyJ/JQm5oxGCOzTNhtltj +n9i/ZLoz8wvELWpOCbckTwTyKTSVcnjQlPSzvw0CgYAQB4hoFDmyUvS1XLN92q+N +tkJz8Dx5wpi094+tUiQj6Mpde0EuE5DdIdTEi3aixuazfqs5Fhe2ugoHk/l4bf44 +GJVyf61VD/ynOAmqhkp+wxILucu8oRLgHOKKjO9VFZ1Q+UIsMdYY/YD9oxRuFuOk +wZYLkEEnMm3Rvn658+iG8A== +-----END PRIVATE KEY-----";s:9:"serial_no";s:0:"";s:12:"certificates";s:0:"";s:11:"expire_time";s:1:"0";}s:9:"applet_id";i:0;s:11:"update_time";i:0;}} \ No newline at end of file diff --git a/runtime/cache/b4/1fbff599add95281dd146591f4da6f.php b/runtime/cache/b4/1fbff599add95281dd146591f4da6f.php index 5811081..5fb11b1 100644 --- a/runtime/cache/b4/1fbff599add95281dd146591f4da6f.php +++ b/runtime/cache/b4/1fbff599add95281dd146591f4da6f.php @@ -1,4 +1,78 @@ -a:0:{} \ No newline at end of file +a:1:{s:5:"wxpay";a:5:{s:3:"key";s:5:"wxpay";s:8:"describe";s:12:"微信支付";s:6:"values";a:10:{s:6:"app_id";s:18:"wx3668302906e3894f";s:6:"mch_id";s:10:"1658128914";s:7:"api_key";s:32:"GS4fwElUx6Ys9KbFMvFlmok1zkL3UMno";s:13:"api_serial_no";s:40:"51B38FC8749949FFEC70E7CDB6D8EC7057D7B250";s:8:"cert_pem";s:1504:"-----BEGIN CERTIFICATE----- +MIIEKzCCAxOgAwIBAgIUUbOPyHSZSf/scOfNttjscFfXslAwDQYJKoZIhvcNAQEL +BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT +FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg +Q0EwHhcNMjMxMTA4MTAzMjQwWhcNMjgxMTA2MTAzMjQwWjCBhDETMBEGA1UEAwwK +MTY1ODEyODkxNDEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTAwLgYDVQQL +DCfpu4TovpvkuIDvvIjljqbpl6jvvInpo5/lk4HmnInpmZDlhazlj7gxCzAJBgNV +BAYMAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAKUgYnkTu2HZT/eQoYNgWLYR/L5T1HRVO4jwBhrXaWqdqBOH6Jx+ +8VNhWAwg9C6ULjYfqBRlxoyAyH/0xJeFvmbL2mohpgflRsXjSqdaBgP449M3yr2T +D0lFlRfDRHDVCOkfzUEmpWFwytBZIjI+1t5/s5Wzz4tysHTOtmBBXhcfoLwy/gdQ +3nv1OAlH9nf9SAo9t/iZVC47Tz3gdu2WyNHepnaExUrC8cAypL9bXtCkOVHwO+Km +7ox5sR9lGKsQ6ArANHYmpwWXxy9iOm3TzNINnMvuJ26k4qOw69qsn+bAEBW0pe82 +14uQK1mdbFZeBl6dSqxtGg2AHUMkJlE56mECAwEAAaOBuTCBtjAJBgNVHRMEAjAA +MAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGEaHR0cDovL2V2 +Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJD +MDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFCNjU0MjJFMTJC +MjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEBCwUAA4IBAQCT +ovV7SSKsIAmiVmf0CqmRxucNIHQDPcUuBTrHFIaQYIIOwiJd2tfzzvF8CF3EAKpD +IkaZflQaGtYQQ81atJ8TNGzeTseS0mmjucea808bvHOFmxrMmY1D/l2NjklOEpVd +Rhs5HMtOAc4rq6cXbSK/a/sP/Lyc1vu39/bkCDITWtH8sVAxPgZpFHPR1PXxhKwJ +iMg70BWmzIBqIWSfB9NC0kbKOk9TjJNiZk8N+IoQaWiZY/n4X0rLNEKLernlvxBu +O+C3u/L9W1WAZM+GXsNNnPmGSF//GHPYEGWn0nKwTm9EvHERR/QGPDhMXg4h358I +j8bCl9IjOKZtzE1+ztVu +-----END CERTIFICATE-----";s:7:"key_pem";s:1703:"-----BEGIN PRIVATE KEY----- +MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQClIGJ5E7th2U/3 +kKGDYFi2Efy+U9R0VTuI8AYa12lqnagTh+icfvFTYVgMIPQulC42H6gUZcaMgMh/ +9MSXhb5my9pqIaYH5UbF40qnWgYD+OPTN8q9kw9JRZUXw0Rw1QjpH81BJqVhcMrQ +WSIyPtbef7OVs8+LcrB0zrZgQV4XH6C8Mv4HUN579TgJR/Z3/UgKPbf4mVQuO089 +4HbtlsjR3qZ2hMVKwvHAMqS/W17QpDlR8Dvipu6MebEfZRirEOgKwDR2JqcFl8cv +Yjpt08zSDZzL7idupOKjsOvarJ/mwBAVtKXvNteLkCtZnWxWXgZenUqsbRoNgB1D +JCZROephAgMBAAECggEAOVfoupFOpmlYKunwHPaNeBUBB3uHMSsUNLbd995Mvnin +kLjG3+n5lnIcqIGdKrvM3IDb1tGNROfIOR9gUhphB8PNQsQSq3VEwZ3wI/PQWPrK +62PZpUH3sgNXBlyKXQCuSn7/wZtRHWiVFguOI5LM/ZGtZNR/w7Z9buMGVKD+stp7 +Gc4C15Vss7FVh00BLOoiyncUwkdiIGMMOfBqgCHiFrphSPIdGjzb1WqMjU/Np7N0 +dSwpg0m583u8/mBovfZ+NHe1FqtXtltzl4pYohHu9qgaPtuKdFo8z6Dh+8Y5QLip +31TzvZFpFn5ZJNBq3WQYdARkq+ZMCue6IUznA2NTjQKBgQDSTtFqs6fHvUvSLULZ +8w3HMAAD+3EEPQf4bjrZKpvbKyuRMdzTJzjyLFqURpYELiQ+PK3KmF3rl1X0wdby +383pHXhUjq6GfFGiYDaf8V2HMSKwrLKj8M/CGH0Z6rScE0FFM6RoSHLfZWmoLJI7 +JoEd99ekORKWLxiXGWMClq0Z4wKBgQDJAJvePrlzsCmJN4qW73b1aW7sUPpqJz8k +lm5Nrci5hQoTx52QKYYJw+/6hEM+z+K0j3cfMe4Q/jtRcBaCaIWBTmwK+x176NZy +4j+FsdQsIiBJDk5igGDLnuEPONJa96MSpbIgIUqgZvJs9W/j+DTwUakmiBtmzQdC +wHKREfTt6wKBgEBvxdpbkVyxszmChKkiv2X4XwjZUZdq27ZSj9VaKMbOQ1sJXA+W +ROxuipJDzlMZkCFBlj4s0RoOFFgZzDI+QGjcjrHZxb+O97Q4poP7AB0cAPUA9Psm +HYHq3unB7/SiMa1yVT1edVPdTrIodeWJtqXn+jpnAjrh0zb4oE16vS7hAoGAQCGP +mbNNnFnChuNPtqSkwdxn5cJYg3IONXBBtUsTVg3aj0ELRqnY+FipwrZcdjgBzzZO +/YcCvC1BY9RteiI7JmyNEFvapmQ9t930AoYgegxRXL3RyJ/JQm5oxGCOzTNhtltj +n9i/ZLoz8wvELWpOCbckTwTyKTSVcnjQlPSzvw0CgYAQB4hoFDmyUvS1XLN92q+N +tkJz8Dx5wpi094+tUiQj6Mpde0EuE5DdIdTEi3aixuazfqs5Fhe2ugoHk/l4bf44 +GJVyf61VD/ynOAmqhkp+wxILucu8oRLgHOKKjO9VFZ1Q+UIsMdYY/YD9oxRuFuOk +wZYLkEEnMm3Rvn658+iG8A== +-----END PRIVATE KEY-----";s:9:"serial_no";s:40:"2A61BFFACF420E57F1D73A069F2EA1C30961207A";s:12:"certificates";s:1475:"-----BEGIN CERTIFICATE----- +MIIEFDCCAvygAwIBAgIUKmG/+s9CDlfx1zoGny6hwwlhIHowDQYJKoZIhvcNAQEL +BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT +FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg +Q0EwHhcNMjMxMTA4MTAzMjM5WhcNMjgxMTA2MTAzMjM5WjBuMRgwFgYDVQQDDA9U +ZW5wYXkuY29tIHNpZ24xEzARBgNVBAoMClRlbnBheS5jb20xHTAbBgNVBAsMFFRl +bnBheS5jb20gQ0EgQ2VudGVyMQswCQYDVQQGDAJDTjERMA8GA1UEBwwIU2hlblpo +ZW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDoIoi8kZC6F+pMZRYg +n1NN1YsFtb6eEaf+kZtqjlj4Pe9DLAxegnsGMv/AAZyOK2i2Q1NCr6omH8YjKjFw +rqRD/0mR3+cl0RfSQxTwF02phycmYF8s52RhYimYtD1/eISjBFN9GiEgci1P8uzy +f62oVmSjJif5X4Elc/exoOWiCerYFF+5oAANoS59kkrLwHfNrFnKm8ZvkOjsEn1N +0/GqjMXMvBMrOhCDD6jXtJRwixwIU7DXRhSKRJJnQS/1xQTA6VGDZTQzsQCm5tPW +MSItnsOGocNBJU/ie8B3RKlrqxEhra882k59Z9k4b3fXsU5ap8JHRBhi39XnwME1 +sJW3AgMBAAGjgbkwgbYwCQYDVR0TBAIwADALBgNVHQ8EBAMCA/gwgZsGA1UdHwSB +kzCBkDCBjaCBiqCBh4aBhGh0dHA6Ly9ldmNhLml0cnVzLmNvbS5jbi9wdWJsaWMv +aXRydXNjcmw/Q0E9MUJENDIyMEU1MERCQzA0QjA2QUQzOTc1NDk4NDZDMDFDM0U4 +RUJEMiZzZz1IQUNDNDcxQjY1NDIyRTEyQjI3QTlEMzNBODdBRDFDREY1OTI2RTE0 +MDM3MTANBgkqhkiG9w0BAQsFAAOCAQEAK3O+Tjsmljv25DAsenDxq1DZLUkf0Ehy ++Y4pF9aUuf1hCZcoXgqlNdFqQvE5v6yYVcK8hpv04bkX/2ZSKvWvrmIWEn9Lb5Yu +rAStXkMjBbNxpeK5PUrHo3n5LXEGuB0bamSD+i8PZPmRxA0M+crdJxdsM6DY3vSg +TstrkoKrxgJKonUi3lRt3wUHWzPIfZe6icwGAUBWZ6csP2gFaVZzqIPN56+8Np2X +2JJbdB2KwhEQXjNGx6wbB3qD505U0d7QStkdvy9EdpNlVwl4WKWERRpAsuUw3eiN +cn+D5Xis/c7HL1qD35bCwC3xdJCL17uIiiQ8mOsXchORdCybEOW/dw== +-----END CERTIFICATE-----";s:11:"expire_time";i:1857052800;s:6:"is_sub";i:2;}s:9:"applet_id";i:10001;s:11:"update_time";i:0;}} \ No newline at end of file diff --git a/runtime/cache/eb/300fe116b3568a7e80a6c2812b1a38.php b/runtime/cache/eb/300fe116b3568a7e80a6c2812b1a38.php index 60db4cb..36fe805 100644 --- a/runtime/cache/eb/300fe116b3568a7e80a6c2812b1a38.php +++ b/runtime/cache/eb/300fe116b3568a7e80a6c2812b1a38.php @@ -1,4 +1,4 @@ -1700723253 \ No newline at end of file +1701756591 \ No newline at end of file diff --git a/runtime/index/temp/60a64cd47b22d798d9e777f4f707b2cd.php b/runtime/index/temp/60a64cd47b22d798d9e777f4f707b2cd.php old mode 100644 new mode 100755 diff --git a/runtime/index/temp/b430673016f1b8d1351a534a69510985.php b/runtime/index/temp/b430673016f1b8d1351a534a69510985.php old mode 100644 new mode 100755 diff --git a/runtime/index/temp/b84ab2a86a49fb8098a55f114226b794.php b/runtime/index/temp/b84ab2a86a49fb8098a55f114226b794.php old mode 100644 new mode 100755 diff --git a/runtime/index/temp/c17836b361a86127d4c136cc0bb98e5b.php b/runtime/index/temp/c17836b361a86127d4c136cc0bb98e5b.php old mode 100644 new mode 100755 diff --git a/runtime/session/sess_31e79552bdc9d8bfd196f0495656145c b/runtime/session/sess_31e79552bdc9d8bfd196f0495656145c old mode 100644 new mode 100755 diff --git a/runtime/store/log/202311/21_error.log b/runtime/store/log/202311/21_error.log old mode 100644 new mode 100755 diff --git a/runtime/store/temp/0c8787a77f02614aefcaa341d7335ca2.php b/runtime/store/temp/0c8787a77f02614aefcaa341d7335ca2.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/10eaa1c936787f73e9ca337f946da334.php b/runtime/store/temp/10eaa1c936787f73e9ca337f946da334.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/233e0da4a493f66c5eda33831df6debb.php b/runtime/store/temp/233e0da4a493f66c5eda33831df6debb.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/32927b1e6f229976b3bfb1d748722e68.php b/runtime/store/temp/32927b1e6f229976b3bfb1d748722e68.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/39bcbcc718db9ee53e923309aaeb92b9.php b/runtime/store/temp/39bcbcc718db9ee53e923309aaeb92b9.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/409e4e4a205ca0731d204c8584cbd9de.php b/runtime/store/temp/409e4e4a205ca0731d204c8584cbd9de.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/5ba392d1c9e1e74ec22aae78b0af9092.php b/runtime/store/temp/5ba392d1c9e1e74ec22aae78b0af9092.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/5eecfbdd931a94d55dafc8f38d15c9ab.php b/runtime/store/temp/5eecfbdd931a94d55dafc8f38d15c9ab.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/6da5e1cd8c29396c8903d1413abd1e55.php b/runtime/store/temp/6da5e1cd8c29396c8903d1413abd1e55.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/8e50fcdf9dfa90740feb9f2ee72e8a28.php b/runtime/store/temp/8e50fcdf9dfa90740feb9f2ee72e8a28.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/988feca942d491d8bbd9f5550fca01cf.php b/runtime/store/temp/988feca942d491d8bbd9f5550fca01cf.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/acbc153a7dd97ab50d0d10d18165b7bc.php b/runtime/store/temp/acbc153a7dd97ab50d0d10d18165b7bc.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/ae9927b8c2651c650d93812e8343c6e9.php b/runtime/store/temp/ae9927b8c2651c650d93812e8343c6e9.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/b309110cddd7c2715b4a38353ff0bb36.php b/runtime/store/temp/b309110cddd7c2715b4a38353ff0bb36.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/b7355a86bf291b1b080d4bff48d89329.php b/runtime/store/temp/b7355a86bf291b1b080d4bff48d89329.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/c496503fb310b9f0807d3690b9becaa7.php b/runtime/store/temp/c496503fb310b9f0807d3690b9becaa7.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/c778416e005d01626bafe09f7eec06d2.php b/runtime/store/temp/c778416e005d01626bafe09f7eec06d2.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/ca970d4ab4bd1237b6f93eb72cba4306.php b/runtime/store/temp/ca970d4ab4bd1237b6f93eb72cba4306.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/d6e8468d5e2899d8e0a2a06666a55b1e.php b/runtime/store/temp/d6e8468d5e2899d8e0a2a06666a55b1e.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/d7390d1714e1d942ac842975d838ebd7.php b/runtime/store/temp/d7390d1714e1d942ac842975d838ebd7.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/f2a615aee8ef64e5e71245bee61efdcc.php b/runtime/store/temp/f2a615aee8ef64e5e71245bee61efdcc.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/f2d764740df911d8d11f8c0d29ea314f.php b/runtime/store/temp/f2d764740df911d8d11f8c0d29ea314f.php old mode 100644 new mode 100755 diff --git a/runtime/store/temp/f5a702ff70f080324a5f05ce3e1cc418.php b/runtime/store/temp/f5a702ff70f080324a5f05ce3e1cc418.php old mode 100644 new mode 100755 diff --git a/runtime/user/log/202311/21_error.log b/runtime/user/log/202311/21_error.log old mode 100644 new mode 100755 diff --git a/runtime/user/temp/2d3218e5f4e26e3b8b658949082baf1f.php b/runtime/user/temp/2d3218e5f4e26e3b8b658949082baf1f.php old mode 100644 new mode 100755 diff --git a/runtime/user/temp/7ed378d2e688fc3af98e70c4fc2797ba.php b/runtime/user/temp/7ed378d2e688fc3af98e70c4fc2797ba.php old mode 100644 new mode 100755 diff --git a/runtime/user/temp/7eddf9dad1c49a6d7f1c63d22923ff77.php b/runtime/user/temp/7eddf9dad1c49a6d7f1c63d22923ff77.php old mode 100644 new mode 100755 diff --git a/runtime/user/temp/874e2d7a5be2959b9dc4ef7ce6faa47b.php b/runtime/user/temp/874e2d7a5be2959b9dc4ef7ce6faa47b.php old mode 100644 new mode 100755 diff --git a/runtime/user/temp/93ed04fe573c38439d4a42fb7d368b2f.php b/runtime/user/temp/93ed04fe573c38439d4a42fb7d368b2f.php old mode 100644 new mode 100755 diff --git a/runtime/user/temp/afec97ae6c4cbf0aeb5fe21866576881.php b/runtime/user/temp/afec97ae6c4cbf0aeb5fe21866576881.php old mode 100644 new mode 100755