public function register()
 {
     C('TOKEN_ON', false);
     $data['username'] = $_POST['username'];
     $data['password'] = $_POST['password'];
     $data['pwd'] = $_POST['password'];
     $data['repassword'] = $_POST['repassword'];
     $data['company'] = $_POST['company'];
     $data['industry'] = $_POST['industry'];
     $data['pos'] = $_POST['pos'];
     $data['tel'] = $_POST['tel'];
     $data['name'] = $_POST['name'];
     $data['city'] = $_POST['city'];
     $data['status'] = 1;
     $pageData = array();
     $db = D('Users');
     if ($db->create($data)) {
         $id = $db->add();
         $pageData['status'] = 0;
         require_once COMMON_PATH . '/WebsiteUserFuncManager.php';
         $websiteUserFuncManager = new WebsiteUserFuncManager($id);
         $websiteUserFuncManager->openDefaultFuncGroups();
     } else {
         $pageData['status'] = 1;
         $pageData['error'] = $db->getError();
     }
     echo json_encode($pageData);
 }
 public function m_alipay_notify()
 {
     Log::record('mp_notify called. get:' . print_r($_GET, true) . ' post:' . print_r($_POST, true), Log::INFO);
     Log::save();
     $out_trade_no = $_POST['out_trade_no'];
     $agent_cfg;
     if (!empty($out_trade_no)) {
         $sql = 'select u.id,ac.agent_id,ac.cfg_data,a.role ' . ' from tp_audit_merchant_purchase as mp ' . ' left JOIN tp_users as u on mp.user_id = u.id ' . ' LEFT JOIN tp_oem_cfg as ac on u.administrator = ac.agent_id ' . " LEFT JOIN tp_user as a on u.administrator = a.id " . " where mp.trade_no = '{$out_trade_no}';";
         $Model = new Model();
         $cfg = $Model->query($sql);
         $agent_cfg = unserialize($cfg[0]['cfg_data']);
         if ($cfg != false && ($cfg[0]['role'] == 12 || $cfg[0]['role'] == 13)) {
             $default_agent_cfg = C('default_agent_info');
             //代理商用户和直销用户使用领众的支付信息
             $agent_cfg['alipay_seller_email'] = $default_agent_cfg['alipay_seller_email'];
             $agent_cfg['alipay_partner'] = $default_agent_cfg['alipay_partner'];
             $agent_cfg['alipay_key'] = $default_agent_cfg['alipay_key'];
             $agent_cfg['alipay_service'] = $default_agent_cfg['alipay_service'];
         }
     }
     $alipayConfig = C('alipay_config');
     $alipayConfig['partner'] = $agent_cfg['alipay_partner'];
     $alipayConfig['key'] = $agent_cfg['alipay_key'];
     import("@.ORG.Alipay.AlipayNotify");
     //计算得出通知验证结果
     $alipayNotify = new AlipayNotify($alipayConfig);
     $verify_result = $alipayNotify->verifyNotify();
     if ($verify_result) {
         Log::record('mp_notify verify succeed.' . $out_trade_no, Log::INFO);
         //Log::record('mp_notify:  '.print_r($_POST, true), Log::INFO);
         Log::save();
         //商户订单号
         $out_trade_no = $_POST['out_trade_no'];
         //支付宝交易号
         $data['ali_trade_no'] = $_POST['trade_no'];
         //交易状态
         $data['ali_trade_status'] = $_POST['trade_status'];
         $data['ali_notify_id'] = $_POST['notify_id'];
         $data['ali_notify_type'] = $_POST['notify_type'];
         $data['ali_total_fee'] = $_POST['total_fee'];
         $data['ali_is_success'] = '1';
         $data['ali_buyer_email'] = $_POST['buyer_email'];
         $data['ali_buyer_id'] = $_POST['buyer_id'];
         $data['handler'] = 1;
         //notify
         $data['finish_time'] = time();
         // 检查交易是否存在领众数据库
         $auditRecord = M('audit_merchant_purchase')->where(array('trade_no' => $out_trade_no))->find();
         if ($auditRecord == false || empty($auditRecord['user_id'])) {
             Log::record('mp_notify: out_trade_no not exist:' . $out_trade_no, Log::ERR);
             // Log::record("record the notify info:".print_r($_POST,true));
             Log::save();
             echo 'fail';
             exit;
         }
         $merchantPackages = C('MERCHANT_PACKAGES');
         // 如果订单不处于 提交 状态,则忽略
         if ($auditRecord['status'] != 1) {
             Log::record('mp_notify conflict ' . $out_trade_no);
             if ($auditRecord['status'] != 6) {
                 //如果不是重复提交,则应该保存提醒信息
                 Log::record("record the notify info:" . print_r($_POST, true));
             }
             Log::save();
             echo "fail";
             exit;
         }
         if ($data['ali_trade_status'] == 'TRADE_FINISHED' || $data['ali_trade_status'] == 'TRADE_SUCCESS') {
             $data['status'] = 2;
             M('audit_merchant_purchase')->where(array('trade_no' => $out_trade_no))->save($data);
             // 验证该请求来自支付宝
             require_once COMMON_PATH . '/AlipayNotifyVerifyHelper.php';
             $verifyStatus = AlipayNotifyVerifyHelper::ali_notify_verify($alipayConfig['partner'], $data['ali_notify_id']);
             if ($verifyStatus == false) {
                 Log::record('m_return_url fail ali_notify_verify' . $out_trade_no, Log::ERR);
                 Log::save();
                 M('audit_merchant_purchase')->where(array('trade_no' => $out_trade_no))->setField('status', 4);
                 echo "fail";
                 exit;
             }
             M('audit_merchant_purchase')->where(array('trade_no' => $out_trade_no))->setField('status', 5);
             Log::record('mp_notify finish ali_notify_verify. status=>5 ' . $out_trade_no, Log::INFO);
             Log::save();
             // 套餐处理
             //需根据套餐类型设置payload参数:功能套餐设置成天数,短信包设置为条数
             $package_type = $merchantPackages[$auditRecord['package_id']]['type'];
             switch ($package_type) {
                 case 1:
                     // 套餐处理
                     $fgListStr = $merchantPackages[$auditRecord['package_id']]['function_groups'];
                     $durationInSecs = $auditRecord['package_duration'] * 31 * 24 * 60 * 60;
                     Log::record('mp_notify start open fg ' . $fgListStr . ' for ' . $durationInSecs . ' secs ' . $out_trade_no, Log::INFO);
                     Log::save();
                     $codeFgIdList = explode(",", $fgListStr);
                     $websiteUserFuncManager = new WebsiteUserFuncManager($auditRecord['user_id']);
                     $websiteUserFuncManager->extendFuncGroups($codeFgIdList, $durationInSecs);
                     Log::record('mp_notify finish open fg ' . $out_trade_no, Log::INFO);
                     Log::save();
                     break;
                 case 2:
                     //短信包
                     $volume = $auditRecord['package_duration'];
                     Log::record('mp_notify start sms ' . $volume . ' ' . $out_trade_no, Log::INFO);
                     $websiteUserFuncManager = new WebsiteUserFuncManager($auditRecord['user_id']);
                     $res = $websiteUserFuncManager->extendSmsAccount($volume);
                     Log::record('mp_notify finish sms ' . $out_trade_no, Log::INFO);
                     Log::save();
                     break;
             }
             M('audit_merchant_purchase')->where(array('trade_no' => $out_trade_no))->setField('status', 6);
             echo "success";
             Log::save();
             exit;
         } else {
             Log::record('mp_notify fail to pay ' . $out_trade_no, Log::ERR);
             Log::save();
             $data['status'] = 3;
             //支付失败
             M('audit_merchant_purchase')->where(array('trade_no' => $out_trade_no))->save($data);
             echo "fail";
             exit;
         }
     } else {
         Log::record('mp_notify verify fail.', Log::ERR);
         Log::save();
         echo "fail";
         exit;
     }
 }
 static function init()
 {
     $fp = fopen(CONF_PATH . 'public_key.pem', "r");
     self::$inviteCodePubKey = fread($fp, 8192);
     fclose($fp);
 }
 public function activate()
 {
     $condition = array();
     if (IS_POST && isset($_POST['activateSubmit'])) {
         $code = $_POST['invitecode'];
         $user_id = $_POST['userid'];
         $websiteUserFuncManager = new WebsiteUserFuncManager($user_id);
         $res = $websiteUserFuncManager->activate($code, current(M('user')->field('username')->find(session(C('USER_AUTH_KEY')))));
         if ($res['success'] == 1) {
             $this->success("充值成功!");
         } else {
             $this->error($res['error']);
         }
     } else {
         $id = $this->_get('id', 'intval', -1);
         if (!$id) {
             $this->error('参数错误!');
         }
         $Model = new Model();
         // 实例化一个model对象 没有对应任何数据表
         $fgroups = $Model->query("SELECT  tp_function_group.`name` ,tp_function_group.visible visible,tp_function_group.id id, tp_user_func_group.id relationid, tp_user_func_group.status status, tp_user_func_group.start_time, tp_user_func_group.expire_time from tp_function_group LEFT OUTER JOIN tp_user_func_group  on tp_function_group.id = tp_user_func_group.group_id and tp_function_group.status =1 and tp_user_func_group.user_id=" . $id . " order by tp_function_group.sort asc, tp_function_group.id asc");
         $this->assign('func_groups', $fgroups);
         $this->assign('userid', $id);
         $this->assign('tpltitle', '授权');
         $smsAccount = M('smsaccount')->where(array('user_id' => $id))->find();
         if (!empty($smsAccount)) {
             $smsAccount['balance'] = $smsAccount['total'] - $smsAccount['used'];
             $this->assign('smsaccount', $smsAccount);
         }
         $this->display();
     }
 }
 public function activate()
 {
     if (IS_POST) {
         $code = trim($_POST['invitecode']);
         $user_id = $_SESSION['uid'];
         $websiteUserFuncManager = new WebsiteUserFuncManager($user_id);
         $res = $websiteUserFuncManager->activate($code, session('uname'));
         if ($res['success'] == 1) {
             $this->success("充值成功!", U('Index/index'));
         } else {
             $this->error($res['error']);
         }
     } else {
         $this->display();
     }
 }