首页 > 编程语言 >PHP 网页扫码登录 , 推送模板消息

PHP 网页扫码登录 , 推送模板消息

时间:2023-09-08 17:23:24浏览次数:38  
标签:扫码 推送 微信 json access token curl PHP 模板

缘由: 因为老板要做个PC端的微信扫码绑定登录,关注公众号,推送模板消息的功能

框架: ThinkPHP 5

功能: 实现 扫码微信公众号授权登录绑定,推送模板消息

1.正式配置

  准备: 微信公众号(必须申请了服务号) Appid , AppSecret

  配置: 微信公众平台修改:  授权回调地址域名 , JS 接口安全域名 修改为自己的域名

2.测试配置

  在没有申请服务号的公众号的情况下,微信提供了测试账号进行配置测试

  步骤:

    1. 公众平台申请测试账号

    

 

    2. 获取到测试号的 Appid , AppSecret

    

 

    3. 配置 JS 接口安全域名 , 授权回调域名

    

 

 

    4. 关注测试公众号

 

    5. 添加测试模板,获取模板id

    

 

注意: 测试的模板消息内容固定为添加模板时的内容,转到正式环境中后需要根据选择的模板信息配置

 

 

微信网页扫码授权登录:

  微信文档地址:  https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

/**
     * 网页授权
     * 
     */
    public function weChatAuthorization()
    {
        // 要绑定的用户id
        $admin_id = 'id';

        // Appid
        $APPID = '微信公众平台获取的appid';

        // 网页授权回调地址
        $callback_url = '网页授权回调接口'; // 网页授权回调接口
        $redirect = urlencode($callback_url); // 编码

        // 调起微信授权地址
        $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$APPID."&redirect_uri=".$redirect."&response_type=code&scope=snsapi_userinfo&state=".$admin_id."#wechat_redirect";

        // 跳转授权页面
        header('location:'.$url);exit;
    }

    /**
     * 网页授权的回调
     */
    public function callback()
    {
        $APPID = '微信公众平台获取的appid';
        $APPSECRET = '微信公众平台获取的appsecret';

        // 获取当前url的参数部分
        $params = $_SERVER["QUERY_STRING"];    // s=/index/Wxopera/callback&code=code&state=STATE
        // 拆分成数组 得到code
        $arr = explode('&',$params);
        $code = explode('=',$arr[1]);
        $code = $code[1];

        // 得到要绑定的管理员id
        $admin = explode('=',$arr[2]);
        $admin_id = $admin[1];// 通过code获取网页授权access_token
        $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$APPID&secret=$APPSECRET&code=$code&grant_type=authorization_code";
        $res = $this->http_curl($url);

        // 获取用户信息
        $url2 = "https://api.weixin.qq.com/sns/userinfo?access_token=".$res['access_token']."&openid=".$res['openid']."&lang=zh_CN";
        $userinfo = $this->http_curl($url2);

     // 到此 $userinfo 获取到用户信息
     // 获取到的具体用户信息 请移步微信文档 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html
     // 下面可以进行自己的逻辑处理
 var_dump($userinfo);exit; } /** * curl请求 */ public function http_curl($url, $type = 'get', $res = 'json', $arr = '') { $cl = curl_init(); curl_setopt($cl, CURLOPT_URL, $url); curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($cl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($cl, CURLOPT_SSL_VERIFYHOST, false); if($type == 'post'){ curl_setopt($cl, CURLOPT_POST, 1); curl_setopt($cl, CURLOPT_POSTFIELDS, $arr); } $output = curl_exec($cl); curl_close($cl); return json_decode($output, true); }

微信访问  weChatAuthorization 接口的接口连接

或者将  weChatAuthorization 接口的接口连接 生成二维码   微信扫码访问

 

发送模板消息

微信文档:  https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html#%E5%8F%91%E9%80%81%E6%A8%A1%E6%9D%BF%E6%B6%88%E6%81%AF

   /**
     * 推送模板消息
     * @param  string $openid  接收人的微信openid
     * @param  array $data  模板消息内容     
   * @return mixed */ public function do_send($openid) { // 获取 微信接口调用凭证 access_token $access_token = Cache::get('accessToken'); if(!$access_token){ $access_token = $this->accessToken(); } //模板消息 格式化 $json_template = $this->json_tempalte($openid); // 推送消息 $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" . $access_token; $res = $this->curl_post($url, urldecode($json_template)); return json_decode($res, true); } /** * 获取 access_token * 由于是循环多次进行推送 * 所以需要暂存一下 access_token */ public function accessToken() { $appid = Db::name('config')->where('name','Appid')->value('value'); $appsecret = Db::name('config')->where('name','AppSecret')->value('value'); // 获取 access_token $access_token_url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret; $json_token = $this->curl_post($access_token_url); $json_token = json_decode($json_token, true); if(!empty($json_token['errcode'])){ $this->error('推送失败,获取微信 access_token 失败'); } // 存入缓存 1小时 Cache::set('accessToken',$json_token['access_token'],3600); return $json_token['access_token']; } /** * 将模板消息json格式化 * @return false|string */ public function json_tempalte($openid) { //模板消息 $template = [ 'touser' => $openid, //接收者openid 'template_id' => "模板id", //模板消息的模板id 'data' =>[ // 数据
          'character_string11' => ['value' => '22'],
          'thing4' => ['value' => '模板名'],
          'time14' => ['value' => date('Y年m月d日 H:i',time())],
         ];
        ];
        return json_encode($template);
    }

    /**
     * curl请求
     * @param $url
     * @param $data
     * @return bool|string
     */
    public function curl_post($url, $data = array())
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        if (!empty($data)) {
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }

 

发送模板消息传参如下

 

 具体传参请参考微信文档:  https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html#%E5%8F%91%E9%80%81%E6%A8%A1%E6%9D%BF%E6%B6%88%E6%81%AF

 

标签:扫码,推送,微信,json,access,token,curl,PHP,模板
From: https://www.cnblogs.com/xvyifan/p/17565866.html

相关文章

  • nginx + php procedures
    https://mkyong.com/nginx/nginx-php-on-windows/https://www.youtube.com/watch?v=loSNnt9ZzWI&ab_channel=javafrmhowtostopnginx?nginx-sstophowtostartnginx?startnginx......
  • php-PhpSpreadsheet设置生成的excel文件列宽度及字体大小
    usePhpOffice\PhpSpreadsheet\Spreadsheet;usePhpOffice\PhpSpreadsheet\Writer\Xlsx;//创建新的Excel实例$spreadsheet=newSpreadsheet();//获取当前工作表$worksheet=$spreadsheet->getActiveSheet();//设置列宽自动调整的范围$worksheet->getStyle('B1:C1'......
  • 仿悬赏猫thinkphp平台赚钱运营
      任务信息发布平台有很多,但是类似仿悬赏猫的悬赏平台,发布信息在功能上还是有区别于其他平台的。本文就以对仿悬赏猫平台进行讲解,在平台上如何实现赚钱的。  开发仿悬赏猫的任务平台选择的是ThinkPHP语言框架,采用ThinkPHP开发模式,高效,安全,易扩展,降低开发成本。软件界面设......
  • 用友U8 CRM客户关系管理系统 getemaildata.php 任意文件读取漏洞&任意文件上传漏洞
    漏洞简介用友U8CRM客户关系管理系统getemaildata.php存在任意文件读取漏洞,攻击者通过漏洞可以获取到服务器中的敏感文件。用友U8CRM客户关系管理系统getemaildata.php文件存在任意文件上传漏洞,攻击者通过漏洞可以获取到服务器权限,攻击服务器漏洞影响用友U8CRM客户关系......
  • docker下的php7.3容器安装gd库
    我的docker版本,24.0.5 我的php版本,php7.3.33题外话,之前我们单独安装php-fpm服务的时候,需要装扩展,是直接在服务器上操作的,那么现在php在docker里面了,我们应该怎么来执行安装操作呢1、进入php容器dockerexec-it1e36f97ab14c/bin/bash//1e36f97ab14c为我的php容器的ID......
  • ThinkPhp+Vue前后端分离框架
    项目介绍一款PHP语言基于ThinkPhp6、Vue、ElementUI等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本着简化开发、提升开发效率的初衷,目前框架已集成了完整的RBAC权限架构和常规基础模块,前端Vue端支持多主题切换,......
  • PHP环境配置
    1.服务器简单理解:服务器也是一台计算机,只是比平时用到的计算机在性能上更强大,开发中通常都需要将开发好的项目部署到服务器进行访问,例如:我们可以访问百度、淘宝、京东等,都是因为有服务器的存在,再例如:王者荣耀登录的时候需要选择不同的服务器【不同的区】,每个区都对应一个服务器如果......
  • 用yum方式安装php最新版
    PHP安装采用在线安装的方式,安装php8.0版本,可自由查看版本并安装相关版本。用第三方软件源remi安装,因为对此源对php有非常好的支持。1安装epel-release源和源管理工具yum-utils安装epel-release源和源管理工具yum-utilsyum-yinstallepel-releaseyum-utils2安装Remi......
  • 如何禁用 PHP 报告 SQL 错误?
    要禁用PHP报告SQL错误,可以使用以下两种方法之一:基于运行时设置:使用运行时设置通过更改PHP的错误报告级别来禁用SQL错误报告。可以在PHP脚本的开头或需要禁用SQL报告的地方添加以下代码:error_reporting(error_reporting()&~E_DEPRECATED&~E_NOTICE&~E_STRICT&~E_WARNING&~......
  • 以最短的方式将所有PHP类型转换为字符串
    将所有PHP类型转换为字符串的最短方式是使用serialize()函数和unserialize()函数。serialize()函数将任何PHP类型序列化为字符串。这意味着它将对象、数组和其他非字符串类型转换为一个字符串,以便在后续的存储或传输过程中使用。示例代码如下:$value=[1,2,3];//需要转换为字符......