<?php /* * This file is part of the overtrue/wechat. * * (c) overtrue <i@overtrue.me> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ /** * QRCode.php. * * @author overtrue <i@overtrue.me> * @copyright 2015 overtrue <i@overtrue.me> * * @see https://github.com/overtrue * @see http://overtrue.me */ namespace EasyWeChat\QRCode; use EasyWeChat\Core\AbstractAPI; /** * Class QRCode. */ class QRCode extends AbstractAPI { const DAY = 86400; const SCENE_MAX_VALUE = 100000; const SCENE_QR_CARD = 'QR_CARD'; const SCENE_QR_TEMPORARY = 'QR_SCENE'; const SCENE_QR_TEMPORARY_STR = 'QR_STR_SCENE'; const SCENE_QR_FOREVER = 'QR_LIMIT_SCENE'; const SCENE_QR_FOREVER_STR = 'QR_LIMIT_STR_SCENE'; const API_CREATE = 'https://api.weixin.qq.com/cgi-bin/qrcode/create'; const API_SHOW = 'https://mp.weixin.qq.com/cgi-bin/showqrcode'; /** * Create forever. * * @param int $sceneValue * * @return \EasyWeChat\Support\Collection */ public function forever($sceneValue) { if (is_int($sceneValue) && $sceneValue > 0 && $sceneValue < self::SCENE_MAX_VALUE) { $type = self::SCENE_QR_FOREVER; $sceneKey = 'scene_id'; } else { $type = self::SCENE_QR_FOREVER_STR; $sceneKey = 'scene_str'; } $scene = [$sceneKey => $sceneValue]; return $this->create($type, $scene, false); } /** * Create temporary. * * @param string $sceneValue * @param null $expireSeconds * * @return \EasyWeChat\Support\Collection */ public function temporary($sceneValue, $expireSeconds = null) { if (is_int($sceneValue) && $sceneValue > 0) { $type = self::SCENE_QR_TEMPORARY; $sceneKey = 'scene_id'; } else { $type = self::SCENE_QR_TEMPORARY_STR; $sceneKey = 'scene_str'; } $scene = [$sceneKey => $sceneValue]; return $this->create($type, $scene, true, $expireSeconds); } /** * Create QRCode for card. * * @param array $card * * { * "card_id": "pFS7Fjg8kV1IdDz01r4SQwMkuCKc", * "code": "198374613512", * "openid": "oFS7Fjl0WsZ9AMZqrI80nbIq8xrA", * "expire_seconds": "1800", * "is_unique_code": false , "outer_id" : 1 * } * * @return \EasyWeChat\Support\Collection */ public function card($card) { return $this->create(self::SCENE_QR_CARD, ['card' => $card]); } /** * Return url for ticket. * * @param string $ticket * * @return string */ public function url($ticket) { return self::API_SHOW."?ticket={$ticket}"; } /** * Create a QRCode. * * @param string $actionName * @param array $actionInfo * @param bool $temporary * @param int $expireSeconds * * @return \EasyWeChat\Support\Collection */ protected function create($actionName, $actionInfo, $temporary = true, $expireSeconds = null) { null !== $expireSeconds || $expireSeconds = 7 * self::DAY; $params = [ 'action_name' => $actionName, 'action_info' => ['scene' => $actionInfo], ]; if ($temporary) { $params['expire_seconds'] = min($expireSeconds, 30 * self::DAY); } return $this->parseJSON('json', [self::API_CREATE, $params]); } }