*/ public function index(){ $config = [ // 必要配置 'app_id' => config('smallprogram_appid'), 'mch_id' => config('wxpay_mchid'), 'key' => config('wxpay_paykey'), // API v2 密钥 (注意: 是v2密钥 是v2密钥 是v2密钥) // 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书) 'cert_path' => get_file_path(config('wxpay_appclient_cert')), // XXX: 绝对路径!!!! 'key_path' => get_file_path(config('wxpay_appclient_key')), // XXX: 绝对路径!!!! ]; $app = Factory::payment($config); $response = $app->handlePaidNotify(function ($message, $fail) { // 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单 $ordernum = $message['out_trade_no']; $order = MemberServiceOrderModel::where(['ordernum'=>$ordernum])->find(); if (!$order || $order['status'] == 2) { // 如果订单不存在 或者 订单已经支付过了 return true; //已处理 } //微信:【订单查询】接口,确认已支付 $config = [ // 必要配置 'app_id' => config('smallprogram_appid'), 'mch_id' => config('wxpay_mchid'), 'key' => config('wxpay_paykey'), ]; $app = Factory::payment($config); $wx_res = $app->order->queryByTransactionId($message['transaction_id']); $weixinquery = serialize($wx_res); if ($message['return_code'] === 'SUCCESS') { // return_code 表示通信状态,不代表支付状态 //// 用户是否支付成功 if (array_key_exists('result_code', $message) && $message['result_code'] === 'SUCCESS') { //更新订单状态 $orderinfo = MemberServiceOrderModel::where(['ordernum'=>$ordernum,'status'=>1])->find(); if (!$orderinfo){ return true; } if ($orderinfo['status'] != 1){ return true; } //购买群二维码 if($orderinfo['type']==1){ //进行积分发送 $memberinfo = MemberModel::where('id',$orderinfo['uid'])->find(); if(!empty($memberinfo['invitation_uid'])){ //一级发送积分 if(!empty(config('one_integral'))){ $one_invitation_uinfo = MemberModel::where('id',$memberinfo['invitation_uid'])->find(); $points_num = $orderinfo['totalprice'] * (config('one_integral')/100); $points_num = round($points_num); if($points_num<=0){ $points_num = 1; } MemberModel::where('id',$memberinfo['invitation_uid'])->setInc('balance',$points_num); //插入积分记录、 MemberBalanceLogsModel::addGetLog($memberinfo['invitation_uid'],1,$points_num,$orderinfo['ordernum'],'一级分销反馈积分',$orderinfo['uid']); //二级发送积分 if(!empty($one_invitation_uinfo['invitation_uid']) && !empty(config('two_integral'))){ $two_points_num = $orderinfo['totalprice'] * (config('two_integral')/100); $two_points_num = round($two_points_num); if($two_points_num<=0){ $two_points_num = 1; } MemberModel::where('id',$one_invitation_uinfo['invitation_uid'])->setInc('balance',$two_points_num); //插入积分记录、 MemberBalanceLogsModel::addGetLog($one_invitation_uinfo['invitation_uid'],1,$two_points_num,$orderinfo['ordernum'],'二级分销反馈积分',$orderinfo['uid']); } } } } //积分充值 if($orderinfo['type']==2){ //充值成功,给用户增加积分 MemberModel::where('id',$orderinfo['uid'])->setInc('balance',intval($orderinfo['service_title'])); //插入积分记录、 MemberBalanceLogsModel::addGetLog($orderinfo['uid'],1,intval($orderinfo['service_title']),$orderinfo['ordernum'],'用户充值积分'); } //购买vip if($orderinfo['type']==3){ MemberModel::where('id',$orderinfo['uid'])->update([ 'vip_id'=>$orderinfo['service_thumb'], 'vip_title'=>$orderinfo['service_title'], ]); } $res = MemberServiceOrderModel::where(['ordernum'=>$ordernum])->update([ 'status'=>2, 'update_time'=>time(), 'pay_time'=>time(), 'pay_data' =>$weixinquery, ]); } elseif (array_key_exists('result_code', $message) && $message['result_code'] === 'FAIL') { // 用户支付失败 return $fail('通信失败,请稍后再通知我'); } } else { return $fail('通信失败,请稍后再通知我'); } return true; // 返回处理完成 }); $response->send(); } //取消超时未支付的订单 public function cancelorder(){ $where = []; $where[] = ['timeout_time','elt',time()]; $where[] = ['status','eq',1]; if(empty(MemberServiceOrderModel::where($where)->count())){ return 'ok'; } $res = MemberServiceOrderModel::where($where)->update(['status'=>3]); if($res){ return 'ok'; }else{ return 'fail'; } } //用户协议 public function useragreement(){ $useragreementmsg = config('useragreement'); //商品详情 $strs = 'https://'.$_SERVER['HTTP_HOST'].'/uploads/'; $useragreementmsg= str_replace("/uploads/", $strs, $useragreementmsg); return json(['code' => 200, 'msg' => '查询成功','result'=>$useragreementmsg]); } //隐私政策 public function privacypolicy(){ $useragreementmsg = config('privacypolicy'); //商品详情 $strs = 'https://'.$_SERVER['HTTP_HOST'].'/uploads/'; $useragreementmsg= str_replace("/uploads/", $strs, $useragreementmsg); return json(['code' => 200, 'msg' => '查询成功','result'=>$useragreementmsg]); } //摇钱树产生金币 public function moneytree(){ $userlist = MemberModel::where('is_delete',0)->select(); if(!empty($userlist)){ foreach ($userlist as $k=>$v){ //存在未领取金币用户不持续产生金币 $wlqjinbi = MMoneyTreeLogsModel::where(['uid'=>$v['id'],'status'=>1])->count(); if(!empty($wlqjinbi)){ continue; } //无邀请用户的用户不产生金币 $invitation_num = MemberModel::where(['invitation_uid'=>$v['id'],'is_delete'=>0])->count(); if(empty($invitation_num)){ continue; } //根据用户分享人数,获得对应积分 $integral_num = MoneyTreeModel::getintegralnum($invitation_num); //根据用户分享人数,获得摇钱树等级 $tree_grade = MoneyTreeModel::gettreegrade($invitation_num); if(empty($integral_num) || empty($tree_grade)){ continue; } $is_generate = 0; $create_time = MMoneyTreeLogsModel::where(['uid'=>$v['id']])->order('create_time desc')->value('create_time'); if(!empty($create_time)){ $create_time = $create_time + 86400; if($create_time<=time()){ $is_generate = 1; } }else{ $is_generate = 1; } if($is_generate==1){ MMoneyTreeLogsModel::create([ 'uid'=>$v['id'], 'tree_grade'=>$tree_grade, 'integral_num'=>$integral_num, 'create_time'=>time(), 'update_time'=>time(), ]); } } } echo 'ok'; } }