内容简介:项目中对于微信的接入是常见的,本次对微信进行了简单集成。1.代码如下二:git地址如下
项目中对于微信的接入是常见的,本次对微信进行了简单集成。
1.代码如下
一:实体类如下 <?php class WeCharAuthorize { /** * @var string */ private $code; /** * @var string */ private $AccessToken; /** * @var string */ private $AuthorizationRoute; /** * @var string */ private $state; /** * @var string */ private $openId; /** * @return string */ public function getOpenId() { return $this->openId; } /** * @param string $openId */ public function setOpenId($openId) { $this->openId = $openId; } /** * @return string */ public function getCode() { return $this->code; } /** * @param string $code */ public function setCode($code) { $this->code = $code; } /** * @return string */ public function getAccessToken() { return $this->AccessToken; } /** * @param string $AccessToken */ public function setAccessToken($AccessToken) { $this->AccessToken = $AccessToken; } /** * @return string */ public function getAuthorizationRoute() { return $this->AuthorizationRoute; } /** * @param string $AuthorizationRoute */ public function setAuthorizationRoute($AuthorizationRoute) { $this->AuthorizationRoute = $AuthorizationRoute; } /** * @return string */ public function getState() { return $this->state; } /** * @param string $state */ public function setState($state) { $this->state = $state; } } <?php class WeCharUserInfo { /** * @var string */ private $openid; /** * @var string */ private $nickname; /** * @var string */ private $sex; /** * @var string */ private $language; /** * @var string */ private $city; /** * @var string */ private $province; /** * @var string */ private $country; /** * @var string */ private $headimgurl; /** * @var array */ private $privilege; /** * @var string */ private $unionid; /** * @return string */ public function getUnionid() { return $this->unionid; } /** * @param string $unionid */ public function setUnionid($unionid) { $this->unionid = $unionid; } /** * @return string */ public function getOpenid() { return $this->openid; } /** * @param string $openid */ public function setOpenid($openid) { $this->openid = $openid; } /** * @return string */ public function getNickname() { return $this->nickname; } /** * @param string $nickname */ public function setNickname($nickname) { $this->nickname = $nickname; } /** * @return string */ public function getSex() { return $this->sex; } /** * @param string $sex */ public function setSex($sex) { $this->sex = $sex; } /** * @return string */ public function getLanguage() { return $this->language; } /** * @param string $language */ public function setLanguage($language) { $this->language = $language; } /** * @return string */ public function getCity() { return $this->city; } /** * @param string $city */ public function setCity($city) { $this->city = $city; } /** * @return string */ public function getProvince() { return $this->province; } /** * @param string $province */ public function setProvince($province) { $this->province = $province; } /** * @return string */ public function getCountry() { return $this->country; } /** * @param string $country */ public function setCountry($country) { $this->country = $country; } /** * @return string */ public function getHeadimgurl() { return $this->headimgurl; } /** * @param string $headimgurl */ public function setHeadimgurl($headimgurl) { $this->headimgurl = $headimgurl; } /** * @return array */ public function getPrivilege() { return $this->privilege; } /** * @param array $privilege */ public function setPrivilege($privilege) { $this->privilege = $privilege; } } </pre> <pre>二:工具类 <?php class PublicPlatformAuthorize extends ThirdPartyAuthorizeController implements PublicPlatformInterface { /** * @var string */ private $code_not_exit = "未获取到code"; /** * @var string */ private $state_not_exit = "未获取到state"; /** * @var string */ private $access_token_not_exit = "未获取到access_token"; /** * @var string */ private $open_id_not_exit = "未获取到open_id"; /** * @var string */ private $user_info_not_exit = "未获取到用户信息"; /** * @var string */ private $success = "操作成功"; /** * @var string */ private $access_token_return_empty_error = "accessToken获取时返回空"; /** * @var Config 配置 */ protected static $config = null; /** * @var WeCharAuthorize 微信授权对象 */ private $weCharAuthorize = null; /** * @var WeCharUserInfo 微信用户信息对象 */ private $weCharUserInfo = null; function __construct(ContainerInterface $container) { parent::__construct($container); if(self::$config == null){ self::$config = Config::getSDKConfig($container); } $this->weCharAuthorize = new WeCharAuthorize(); $this->weCharUserInfo = new WeCharUserInfo(); } /** * 设置授权对象 code与state * * @return array */ public function setWeCharAuthorizeCodeAndState() { if(!isset($_GET['state'])){ return ['message' => ['message'=>$this->state_not_exit], 'errorCode'=>1]; } if (!isset($_GET['code'])) { return ['message' => ['message'=>$this->state_not_exit], 'errorCode'=>1]; } //设置授权对象 $this->weCharAuthorize->setCode($_GET['code']); $this->weCharAuthorize->setState($_GET['state']); return ['message' => ['message'=>$this->success], 'errorCode' => 0]; } /** * 设置授权对象 access_token与open_id * * @param $code * @return array */ public function setWeCharAuthorizeAccessTokenAndOpenId($code) { //获取配置参数 $app_id = self::$config->public_platform_app_id; $secret = self::$config->public_platform_app_secret; $grant_type = self::$config->public_platform_grant_type; //判断code if(empty($code)){ return ['message' => ['message'=>$this->code_not_exit], 'errorCode' => 1]; } //请求微信 $return = json_decode(file_get_contents("https://api.weixin.qq.com/sns/oauth2/access_token?appid=$app_id&secret=$secret&code=$code&grant_type=$grant_type"), true); //检查返回值 if(!is_array($return) || empty($return)){ return ['message' => ['message'=>$this->access_token_return_empty_error],'errorCode' => 1]; } //设置授权对象 $this->weCharAuthorize->setAccessToken($return['access_token']); $this->weCharAuthorize->setOpenId($return['openid']); return ['message' => ['message'=>$this->success], 'errorCode' => 0]; } /** * 授权地址获取 * * @param $redirect_url * @param int $scope_type * @param string $state * @return string */ public function getAuthorizationRoute($redirect_url, $scope_type = 1, $state = '') { //确定应用授权作用域 if($scope_type == 1){ $scope = 'snsapi_base'; }else{ $scope = 'snsapi_userinfo'; } //授权后重定向的回调链接地址 $redirect_url = urlencode($redirect_url); //设置第三方授权接口参数 $appid = self::$config->public_platform_app_id; $response_type = 'code'; //throw new Exception("https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_url&response_type=$response_type&scope=$scope&state=$state#wechat_redirect"); //拼接url,跳转到授权页面 return "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_url&response_type=$response_type&scope=$scope&state=$state#wechat_redirect"; } /** * 设置微信用户对象 * * @param $openid * @param $access_token * @return array */ public function setUserInfo($openid, $access_token) { //数据判断 if(empty($access_token)){ return ['message' => ['message'=>$this->access_token_not_exit], 'errorCode' => 1]; } if(empty($openid)){ return ['message' => ['message'=>$this->open_id_not_exit], 'errorCode' => 1]; } //请求微信 $url_info = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid"; //链接平台 得到用户的基本信息 $user_info = json_decode(file_get_contents($url_info), true); //数据判断 if(!is_array($user_info) || empty($user_info)){ return ['message' => ['message'=>$this->user_info_not_exit], 'errorCode' => 1]; } //对象封装 $weCharUserInfoTool = new WeCharUserInfoTool(); $this->weCharUserInfo = $weCharUserInfoTool->weCharInfoArr2weCharUserInfoObj($user_info); return ['message' => ['message'=>$this->success], 'errorCode' => 0]; } public function getWeCharUserInfo() { return $this->weCharUserInfo; } /** * @return WeCharAuthorize */ public function getWeCharAuthorize() { return $this->weCharAuthorize; } /** * 授权 * * @param $redirect_url * @param int $scope_type 为2时方可获取用户信息 * @param string $state * @return array|WeCharAuthorize */ public function publicPlatformAuthorize($redirect_url, $scope_type = 1, $state = '') { //设置code与state $code_res = $this->setWeCharAuthorizeCodeAndState(); if($code_res['errorCode'] != 0) { $url = $this->getAuthorizationRoute($redirect_url, $scope_type, $state); Header("Location:{$url}");exit; } //设置access_token与openId $code = $this->weCharAuthorize->getCode(); $res = $this->setWeCharAuthorizeAccessTokenAndOpenId($code); if($res['errorCode'] != 0){ return $res; } //$scope_type为2则获取用户信息 if($scope_type != 1){ $open_id = $this->weCharAuthorize->getOpenId(); $access_token = $this->weCharAuthorize->getAccessToken(); $res = $this->setUserInfo($open_id, $access_token); if($res['errorCode'] != 0){ return $res; } } return ['message' => ['message'=>$this->success], 'errorCode' => 0]; } //TODO function returnRewrite($result) { // TODO: Implement returnRewrite() method. } }
二:git地址如下
git@gitee.com:redunicorn/ThirdPartyAuthorizeBundle.git
转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/24702.html
微信打赏
支付宝打赏
感谢您对作者Alex的打赏,我们会更加努力! 如果您想成为作者,请点我
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 关于持续集成工具对比
- 送你 21 个好用的持续集成工具
- 持续集成和持续交付工具-jenkins
- TeamCity 2017.1.2 发布,持续集成工具
- TeamCity 2019.2.4 发布,持续集成工具
- TeamCity 2020.1.1 发布,持续集成工具
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Vue.js前端开发
陈陆扬 / 人民邮电出版社 / 2017-2-1 / CNY 45.00
本书分为10章,包括简介、基础特性、指令、过滤器、过渡、组件、状态管理、常用插件、工程实例和Weex打包。本书从简单的单个实例和基础语法,到工程实例,将系统地讲述Vue.js在项目中的适用场景和具体操作。本书的特点在于案例详实,使读者体会到框架的优点和便捷之处,提升开发效率,最后能将Vue.js运用到实际项目中,避免纸上谈兵的尴尬。一起来看看 《Vue.js前端开发》 这本书的介绍吧!