Beispiel #1
0
 /**
  * 申请页面
  * @param PageService $pageService
  * @param ShakeAroundClient $shakeAroundClient
  * @param WeixinClient $weixinClient
  * @return string
  */
 public function create(PageService $pageService, ShakeAroundClient $shakeAroundClient)
 {
     $requestData = json_decode($this->inputData, true);
     $validator = Validator::make($requestData, ['title' => 'required|max:6', 'description' => 'required|max:7', 'icon_url' => 'required', 'url' => '', 'comment' => '']);
     if ($validator->fails()) {
         return RestHelp::parametersIllegal($validator->messages()->first());
     }
     $guid = Uuid::v4(false);
     //TODO 检查各个字段长度
     $arrPage = ['title' => $requestData['title'], 'description' => $requestData['description'], 'comment' => isset($requestData['comment']) ? $requestData['comment'] : '', 'icon_url' => $requestData['icon_url'], 'url' => Config::get('app.url') . str_replace('GUID', $guid, Config::get("weixin.callback_url"))];
     $appid = Session::get('wx_appid');
     $appsecret = Session::get('wx_appsecret');
     $page = new Page($arrPage);
     try {
         $page->page_url = $page->url;
         $pageId = $pageService->applyPageOnline($shakeAroundClient, $page, $appid, $appsecret);
     } catch (\Exception $e) {
         return RestHelp::encodeResult($e->getCode(), $e->getMessage());
     }
     $page->page_id = $pageId;
     unset($page->page_url);
     $page->url = empty($requestData['url']) ? "" : $requestData['url'];
     $page->guid = $guid;
     $page->wx_mp_id = Session::get('wx_mp_id');
     $id = $pageService->create($page);
     return RestHelp::success(['page_id' => $id]);
 }
Beispiel #2
0
 /**
  * 获取token
  * @param null
  * @return mixed
  * @author zhengqian.zhu
  */
 public function getToken(Request $request)
 {
     $request = $request->only('appid', 't', 'sign');
     $validator = \Validator::make($request, array('appid' => 'required', 't' => 'required', 'sign' => 'required'));
     if ($validator->fails()) {
         return RestHelp::parametersIllegal($validator->messages()->first());
     }
     $app = App::where("app_id", $request['appid'])->first();
     if (!$app) {
         return RestHelp::encodeResult("21001", "appId not found");
     }
     $appsecret = $app->app_secret;
     $md5Sign = $this->md5Str($request['appid'], $appsecret, $request['t']);
     if ($request['sign'] != $md5Sign) {
         return RestHelp::encodeResult("21002", "sign not correct");
     }
     $day = new \DateTime();
     $day->modify("+2 hours");
     $app->expire_at = $day->format("Y-m-d H:i:s");
     //如果存在未过期的token,直接返回token
     if (!$app->access_token || $app->expire_at <= date("Y-m-d H:i:s")) {
         $app->access_token = Uuid::v4(false);
     }
     $app->save();
     return RestHelp::success(['access_token' => $app->access_token, 'expires_in' => 7200]);
 }
Beispiel #3
0
function generate_ticket($appid, $timeout, $redis)
{
    $uuid = \J20\Uuid\Uuid::v4(false);
    $ticket = md5($uuid . self::SALT);
    $data = array('sid' => session_id(), 'appid' => $appid);
    $redis->setex($ticket, 60, json_encode($data));
    return $ticket;
}
Beispiel #4
0
 /**
  * Execute the console command.
  *
  * @return mixed
  */
 public function fire()
 {
     $file = public_path('region.js');
     try {
         $json = file_get_contents($file);
     } catch (\Exception $e) {
         echo $e->getMessage();
     }
     \DB::table('addresses')->truncate();
     eval($json);
     //province
     foreach ($province as $p) {
         $address = new Address();
         $address->id = $p[0];
         $address->guid = Uuid::v4(false);
         $address->address = $p[1][0];
         $address->parent_id = 0;
         $address->level = $p[2];
         $address->save();
     }
     $i = 0;
     $arrId = array();
     foreach ($json as $v) {
         if ($v[3] == 3) {
             continue;
         }
         $address = new Address();
         if (in_array($v[0], $arrId)) {
             rsort($arrId);
             $id = $arrId[0] + 1;
             \Log::info(sprintf("%s in arr ,+1 = %s", $v[0], $id));
         } else {
             $id = $v[0];
         }
         $address->id = $id;
         $address->guid = Uuid::v4(false);
         $address->address = $v[1][0];
         $address->parent_id = $v[2];
         $address->level = $v[3];
         array_push($arrId, $id);
         try {
             $address->save();
         } catch (\Exception $e) {
             \Log::info(sprintf("erro msg: %s ", $e->getMessage()));
             continue;
         }
         echo sprintf("success insert one raw,ID: %s", $address->id);
         $i++;
         echo "\n";
     }
     echo sprintf("complete !! %s raws affected\n", $i);
 }
Beispiel #5
0
 /**
  * 将上传地址带有local:// http:// 转成微信地址
  * @param $rawPathStr
  */
 public function converToUrlOnline(ShakeAroundClient $shakeAroundClient, $materialFile, $appid = null, $appsecret = null)
 {
     //TODO 判断图片路径是否是微信域名,如果符合则不进行下载
     if (preg_match("/^local:\\/\\/(.*)/", $materialFile, $match)) {
         $materialFile = $match[1];
     } elseif (preg_match("/^http:\\/\\/(.*)/", $materialFile, $match)) {
         $dir = public_path('upload/' . date("Ymd"));
         if (!is_dir($dir)) {
             mkdir($dir, 0777, true);
         }
         $materialFile = $shakeAroundClient->downloadFile($materialFile, public_path("upload/" . date("Ymd") . '/' . Uuid::v4(false) . '.png'));
     } else {
         throw new \Exception("file format illegal");
     }
     $ret = $shakeAroundClient->addMaterial($materialFile, $this->getWeixinToken($appid, $appsecret));
     if ($ret->errcode != 0) {
         throw new \Exception($ret->errmsg, 90000);
     }
     return $ret->data->pic_url;
 }
Beispiel #6
0
 /**
  * 所有中间处理逻辑,生产本地ticket
  * @param $pageId //页面id号
  * @param ShakeAroundClient $shakeAroundClient
  * @param SharkService $sharkService
  * @throws Exception
  */
 public function redirectCallback(ShakeAroundClient $shakeAroundClient, SharkService $sharkService)
 {
     $requestData = $this->input;
     if (!array_key_exists('ticket', $requestData)) {
         throw new Exception("param miss ticket");
     }
     if (!array_key_exists('guid', $requestData)) {
         throw new Exception("param miss guid");
     }
     $objPage = WeixinPage::where('guid', $requestData['guid'])->first();
     if (!$objPage) {
         return RestHelp::encodeResult(23001, sprintf(" guid %s not found", $requestData['guid']));
     }
     $uuid = Uuid::v4(false);
     //set into redis
     try {
         $sharkService->setInfoInRedis($shakeAroundClient, $uuid, $requestData['ticket'], 0, $objPage->mp->appid, $objPage->mp->appsecret);
     } catch (Exception $e) {
         echo $e->getMessage() . $e->getCode();
         exit;
     }
     try {
         $ret = $sharkService->setInfoInDB($shakeAroundClient, $requestData['ticket'], 0, $objPage->mp->appid, $objPage->mp->appsecret);
     } catch (Exception $e) {
         echo $e->getMessage() . $e->getCode();
         exit;
     }
     $appid = $objPage->mp->appid;
     $appsecret = $objPage->mp->appsecret;
     $sharkService->saveUserInfo(new WeixinUserService(), $ret->openid, $appid, $appsecret, $objPage->mp->mp_id, $objPage->mp->id);
     //判断该设备有没有设置重定向,如果设置了,直接跳转
     $wxDevice = WeixinDevice::where('uuid', $ret->uuid)->where('major', $ret->major)->where('minor', $ret->minor)->first();
     if (!$wxDevice) {
         return "device not found";
         exit;
     }
     $url = $wxDevice->redirect_url ? $wxDevice->redirect_url : $objPage->url;
     $url = preg_match("/\\?/", $url) ? $url . "&ticket=" . $uuid : $url . "?ticket=" . $uuid;
     //redirect
     return redirect($url);
 }
Beispiel #7
0
 public function update($id)
 {
     $relPath = null;
     $shop = $this->shopService->getShopById($id);
     if (!$shop) {
         abort(404);
     }
     $input = Input::all();
     $validator = Validator::make($input, ['name' => 'required']);
     if ($validator->fails()) {
         return redirect()->back()->with('error_tips', "参数错误: " . $validator->messages()->first());
     }
     if (Input::hasFile('image')) {
         $file = Input::file('image');
         $ext = $file->getClientOriginalExtension();
         $filename = Uuid::v4(false) . ".{$ext}";
         $file->move(public_path('shopimages'), $filename);
         $relPath = "/shopimages/{$filename}";
     }
     if (!$relPath) {
         $relPath = '/images/logo_160.png';
     }
     $shop->name = $input['name'];
     $shop->thumbnail = $relPath;
     $shop->comment = $input['comment'];
     $shop->subtitle = $shop->name;
     try {
         $shop->save();
         if ($shop->page_id) {
             $this->shopService->updateShopPage($shop);
         }
     } catch (Exception $e) {
         return redirect()->back()->with('error_tips', "修改失败");
     }
     return redirect()->route('shops')->with('success_tips', "修改成功");
 }
Beispiel #8
0
 public function createNewToken()
 {
     return Uuid::v4(false);
 }
Beispiel #9
0
 /**
  * 根据微信的 media_id 下载文件
  * @author Hanxiang
  * @param $media_id
  * @param string $type
  * @return bool|string
  */
 public function downloadMedia($media_id, $type = '')
 {
     $mq = new MQ();
     $access_token = $mq->getWeixinAccessTokenByName('test');
     // TODO
     $url = WeixinClient::API_GET_MEDIA;
     $url = sprintf($url, $access_token, $media_id);
     $ch = curl_init($url);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     $res = curl_exec($ch);
     $obj = json_decode($res, true);
     curl_close($ch);
     if (isset($obj['errcode']) && $obj['errcode'] == 40007) {
         return false;
     }
     $fp = fopen($url, 'r');
     $filePath = "shopimages/" . Uuid::v4(false) . ".jpg";
     file_put_contents(public_path($filePath), $fp);
     return $filePath;
 }
Beispiel #10
0
 /**
  * 编辑商品post
  * @author Hanxiang
  * @param $id
  * @return view
  */
 public function updatePost($id)
 {
     $item = Item::find($id);
     if (!$item) {
         abort(404);
     }
     $input = Input::all();
     $validator = Validator::make($input, ['supplier' => 'required', 'item-title' => 'required', 'item-code' => 'required', 'item-barcode' => 'required', 'item-stock' => 'required', 'item-type' => 'required', 'item-weight' => 'numeric', 'item-volume' => 'numeric', 'item-market-price' => 'required', 'item-price' => 'required', 'item-commission-ratio' => 'required', 'item-commission' => 'required', 'item-postage-type' => 'required', 'item-sale-status' => 'required', 'item-shelf-status' => 'required', 'item-is-direct-sale' => 'in:Y,N']);
     if ($validator->fails()) {
         return redirect()->route('adminItemsUpdate', [$id])->with('error_tips', "参数错误: " . $validator->messages()->first());
     }
     if (Input::hasFile('item-image')) {
         $file = Input::file('item-image');
         $ext = $file->getClientOriginalExtension();
         $filename = Uuid::v4(false) . ".{$ext}";
         $file->move(public_path('itemimages'), $filename);
         $relPath = "/itemimages/{$filename}";
         $image = new Image();
         $image->url = $relPath;
         $image->name = $input['item-title'];
         $image->type = 1;
         //TODO
         $image->save();
         $imageId = $image->id;
         $itemImage = ItemImage::where('item_id', $id)->get();
         if (count($itemImage) > 0) {
             ItemImage::where('item_id', $id)->update(['image_id' => $imageId]);
         } else {
             $ii = new ItemImage();
             $ii->item_id = $id;
             $ii->image_id = $imageId;
             $ii->save();
         }
     }
     $item->name = $input['item-title'];
     $item->title = $input['item-title'];
     $item->code = $input['item-code'];
     $item->barcode = $input['item-barcode'];
     $item->type_id = $input['item-type'];
     $item->supplier_id = $input['supplier'];
     $item->spec = $input['item-spec'];
     $item->stock = $input['item-stock'];
     $item->weight = $input['item-weight'];
     $item->volume = $input['item-volume'];
     $item->price = $input['item-price'];
     $item->commission = $input['item-commission'];
     $item->commission_ratio = $input['item-commission-ratio'];
     $item->market_price = $input['item-market-price'];
     $item->postage_type = $input['item-postage-type'];
     $item->shelf_status = $input['item-shelf-status'];
     $item->sale_status = $input['item-sale-status'];
     $item->is_direct_sale = $input['item-is-direct-sale'];
     $item->comment = $input['item-comment'];
     try {
         $item->save();
     } catch (Exception $e) {
         return redirect()->route('adminItemsUpdate', [$id])->with('error_tips', "添加失败");
     }
     return redirect()->route('adminItems')->with('success_tips', "修改成功");
 }
Beispiel #11
0
 /**
  * 修改页面 post
  * @author Hanxiang
  * @param PageService $pageService
  * @param ShakeAroundClient $shakeAroundClient
  * @return mixed
  */
 public function updatePost(PageService $pageService, ShakeAroundClient $shakeAroundClient)
 {
     $input = Input::all();
     $validator = Validator::make($input, ['wx-page-id' => 'required', 'txt-title' => 'required', 'txt-subtitle' => 'required', 'txt-url' => 'required', 'txt-comment' => '']);
     if ($validator->fails()) {
         return redirect('/admin/wxpages/update/' . $input['wx-page-id'])->with('result', false)->with('msg', '参数错误');
     }
     $wxPage = WeixinPage::find($input['wx-page-id']);
     if (!$wxPage) {
         return redirect('/admin/wxpages/update/' . $input['wx-page-id'])->with('result', false)->with('msg', '操作失败');
     }
     $pageArray = [];
     $pageArray['page_id'] = $wxPage->page_id;
     $pageArray['title'] = $input['txt-title'];
     $pageArray['description'] = $input['txt-subtitle'];
     $pageArray['url'] = $input['txt-url'];
     $pageArray['comment'] = $input['txt-comment'];
     if (Input::hasFIle('file-icon')) {
         $file = Input::file('file-icon');
         $ext = $file->getClientOriginalExtension();
         $filename = Uuid::v4(false) . ".{$ext}";
         $file->move(public_path("pageicons"), $filename);
         $allFilename = public_path("pageicons/") . $filename;
         try {
             $pageArray['icon_url'] = $pageService->converToUrlOnline($shakeAroundClient, 'local://' . $allFilename);
         } catch (\Exception $e) {
             return redirect('/admin/wxpages/update/' . $input['wx-page-id'])->with('result', false)->with('msg', '操作失败 ' . $e->getMessage() . $e->getCode());
         }
     } else {
         $pageArray['icon_url'] = $wxPage->icon_url;
     }
     $page = new Page($pageArray);
     $page->page_url = $page->url;
     unset($page->url);
     $wxMp = WeixinMp::find($wxPage->wx_mp_id);
     $appid = $wxMp->appid;
     $appsecret = $wxMp->appsecret;
     try {
         $pageService->updatePageOnline($shakeAroundClient, $page, $appid, $appsecret);
     } catch (\Exception $e) {
         return redirect('/admin/wxpages/update/' . $input['wx-page-id'])->with('result', false)->with('msg', '操作失败 ' . $e->getMessage() . $e->getCode());
     }
     unset($page->page_url);
     try {
         $pageService->update($wxPage, $page);
     } catch (\Exception $e) {
         return redirect('/admin/wxpages/update/' . $input['wx-page-id'])->with('result', false)->with('msg', '操作失败 ' . $e->getMessage());
     }
     return redirect('/admin/wxpages')->with('result', true)->with('msg', "操作成功");
 }
Beispiel #12
0
 /**
  *
  * @author zhengqian@dajiayao.cc
  */
 public function sync($appid, $appsecret)
 {
     $mp_id = WeixinMp::where('appid', $appid)->where('appsecret', $appsecret)->first()->id;
     $bid = 0;
     $countPage = 0;
     //定义缓存数组
     $cacheArrayPage = [];
     while (true) {
         $ret = $this->syncPage($appid, $appsecret, $bid, 20);
         $pages = $ret->pages;
         $bid = $bid + count($pages);
         if (!$pages) {
             break;
         }
         //开始同步页面
         foreach ($pages as $page) {
             $objPage = WeixinPage::where('page_id', $page->page_id)->first();
             if (!$objPage) {
                 $objPage = new WeixinPage();
                 $objPage->guid = Uuid::v4(false);
                 $objPage->title = $page->title;
                 $objPage->description = $page->description;
                 $objPage->icon_url = $page->icon_url;
                 $objPage->url = $page->page_url;
                 $objPage->comment = $page->comment;
                 $objPage->page_id = $page->page_id;
                 $objPage->wx_mp_id = $mp_id;
                 $objPage->save();
                 $countPage++;
             }
             //生产缓存数组
             if (!array_key_exists($page->page_id, $cacheArrayPage)) {
                 $cacheArrayPage[$page->page_id] = $objPage->id;
             }
         }
     }
     unset($ret);
     $countDevice = 0;
     $bid = 0;
     while (True) {
         $ret = $this->syncDevice($appid, $appsecret, $bid);
         $devices = $ret->devices;
         $bid = $bid + count($devices);
         if (!$devices) {
             break;
         }
         //开始同步设备
         foreach ($devices as $device) {
             $objWxDevice = WeixinDevice::where('device_id', $device->device_id)->first();
             if (!$objWxDevice) {
                 $objWxDevice = new WeixinDevice();
                 $objWxDevice->uuid = $device->uuid;
                 $objWxDevice->major = $device->major;
                 $objWxDevice->minor = $device->minor;
                 $objWxDevice->comment = $device->comment;
                 $objWxDevice->poi_id = $device->poi_id;
                 $objWxDevice->wx_mp_id = $mp_id;
                 $objWxDevice->device_id = $device->device_id;
                 $objWxDevice->apply_id = $device->device_id;
                 $countDevice++;
             }
             $objWxDevice->status = $device->status;
             $objWxDevice->save();
             //处理页面-设备关系
             if (!empty($device->page_ids)) {
                 $arrPageIds = explode(',', $device->page_ids);
                 foreach ($arrPageIds as $pageId) {
                     $devicePage = DevicePage::where('wx_device_id', $objWxDevice->id)->where('wx_page_id', $cacheArrayPage[$pageId])->first();
                     if (!$devicePage) {
                         $devicePage = new DevicePage();
                         $devicePage->wx_device_id = $objWxDevice->id;
                         $devicePage->wx_page_id = $cacheArrayPage[$pageId];
                         $devicePage->save();
                     }
                 }
             }
         }
     }
     return ['count_page' => $countPage, 'count_device' => $countDevice];
 }
Beispiel #13
0
Datei: User.php Projekt: bktz/cup
<?php

use Woodling\Woodling;
use J20\Uuid;
use Carbon\Carbon;
Woodling::seed('UserAdmin', array('class' => 'User', 'do' => function ($blueprint) {
    $blueprint->username = '******';
    $blueprint->email = '*****@*****.**';
    $blueprint->confirmation_code = Uuid\Uuid::v4(false);
    $blueprint->confirmed = 1;
    $blueprint->created = Carbon::now();
    $blueprint->updated = Carbon::now()->addMonths(2);
    $blueprint->role = function () {
        return Woodling::retrieve('RoleAdmin');
    };
}));
Woodling::seed('UserUser', array('class' => 'User', 'do' => function ($blueprint) {
    $blueprint->username = '******';
    $blueprint->email = '*****@*****.**';
    $blueprint->confirmation_code = Uuid\Uuid::v4(false);
    $blueprint->confirmed = 1;
    $blueprint->created = Carbon::now();
    $blueprint->updated = Carbon::now()->addMonths(2);
    $blueprint->role = function () {
        return Woodling::retrieve('RoleComment');
    };
}));