/** * 申请页面 * @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]); }
/** * 获取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]); }
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; }
/** * 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); }
/** * 将上传地址带有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; }
/** * 所有中间处理逻辑,生产本地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); }
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', "修改成功"); }
public function createNewToken() { return Uuid::v4(false); }
/** * 根据微信的 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; }
/** * 编辑商品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', "修改成功"); }
/** * 修改页面 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', "操作成功"); }
/** * * @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]; }
<?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'); }; }));