public function wxpay_js()
 {
     $tools = new JsApiPay();
     if (!Input::has('code')) {
         $data = array('period_id' => Input::get('period_id'), 'user_id' => Session::get('user.id'));
         $base_url = urlencode('http://test.zerioi.com/pay/wxpay_js?' . http_build_query($data, '', '&'));
         //$base_url = urlencode( 'http://test.zerioi.com/pay/wxpay?period_id='.Input::get('period_id') );
         $url = $tools->CreateOauthUrlForCode($base_url);
         return Redirect::to($url);
     }
     $open_id = Session::get('user.open_id');
     if (!isset($open_id)) {
         $open_id = $tools->GetOpenidFromMp(Input::get('code'));
         Session::put('user.open_id', $open_id);
     } else {
         Session::forget('user.open_id');
     }
     // 选择用户默认账户
     $user_id = Input::get('user_id');
     $account = RegisterAccount::where('user_id', $user_id)->first();
     if (!isset($account)) {
         return Response::make('请先申请挂号账户');
     }
     $account_id = $account->id;
     $period_id = Input::get('period_id');
     $period = Period::find($period_id);
     if (!$this->validate_peirod($period)) {
         return Response::make('无效时间段,请重新选择');
     }
     /**
      * 创建订单时先将对应时间段的挂号数加1,
      * 以避免微信支付异步通知顺序不一致导致
      * 挂号记录创建顺序不一致
      */
     $period->start = date('H:i', strtotime($period->start));
     $period->end = date('H:i', strtotime($period->end));
     $schedule = $period->schedule;
     $doctor = $schedule->doctor;
     $possible_period = array('上午', '下午');
     $schedule = array('date' => $schedule->date, 'period' => $possible_period[$schedule->period]);
     // 附加信息
     $attach = array('period_id' => (int) Input::get('period_id'), 'account_id' => $account_id);
     // 创建订单
     $order = $this->create_order(Input::get('user_id'), 'JSAPI', json_encode($attach), (int) ($doctor->register_fee * 100), $open_id);
     $para = $tools->GetJsApiParameters($order);
     $data = array('period' => $period, 'schedule' => $schedule, 'doctor' => $doctor, 'department' => $doctor->department->name, 'para' => $para);
     return View::make('register.pay', $data);
 }