扫码获取微信公众号用户的openid,向某个用户推送消息

news/2024/9/20 14:37:58

1. 生成二维码:

生成二维码比较简单的方法是直接使用phpqrcode程序包(可在网上下载得到)。

若想获得ThinkPHP支持,需将程序包放在ThinkPHP/Extend/Vendor目录下,让后在程序中引用,代码如下:

vendor("phpqrcode.phpqrcode");

//要生成二维码的数据

$text="扫码后要跳转的页面的url";      

//纠错级别, 纠错级别越高,生成图片会越大
//L水平 7%的字码可被修正
//M水平 15%的字码可被修正
//Q水平 25%的字码可被修正
//H水平 30%的字码可被修正

$level = "L";

//图片每个黑点的像素。
$size = "10";
//生成图片 第二个参数:是否保存成文件 如需要保存文件,第二个参数改为文件名即可,如:'qrcode.png'
QRcode::png($text,false,$level,$size);

 

2. 网页授权:

要获取用户的openid,需要进行网页授权。

首先要到公众平台官网的开发者中心页配置授权回调域名。

将二维码url设置为:

$text="https://open.weixin.qq.com/connect/oauth2/authorize?

  appid=公众appid&

  redirect_uri=扫码后要跳转的页面url&
  response_type=code&
  scope=snsapi_base&
  state=1#wechat_redirect";

注意:有时候$text内部换行会导致一个错误,就是用户扫码的时候会出现“AppID参数错误”,还有一个问题就是安卓手机扫描页面跳转正常,但是用苹果手机扫描的时候还是会出现“AppID参数错误”,所以应该将$text表示如下:

$appid = 'wx65ab2a8f07b7621c';
$callback = 'http://a.ewm.net.cn/qiduoyun/jingxiaoshan/index.php/Admin/Signature/getsign';
$text="https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $appid . "&redirect_uri=" . urlencode($callback) . "&response_type=code&scope=snsapi_base&state=1#wechat_redirect";

这样就不会出错了,而且支持安卓手机和苹果手机正常扫码。

其中appid是公众号appid,redirect_uri是扫码后要跳转的页面url,response_type指定为code,用于换取access_token(获取用户基本信息的凭据),scope这里指定为snsapi_base,因为只需要获取用户的openid,state可用户传递其他开发者需要的参数,若无可随便填写,#wechat_redirect表示直接在微信中打开页面。

这样用户扫二维码后就会跳转到指定的url,并且传递了参数过来。然后就可以在跳转的页面中获取code,换取access_token,由于获取access_token的同时也获取到了openid,所以如果只需获取用户id,到这一步就已经实现了,代码如下:

$appid = "公众号appid";
$secret = "公众号appsecret";
$code = $_GET["code"];

$get_token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code';

$res=file_get_contents($get_token_url);
$json_obj = json_decode($res,true);

$openid = $json_obj['openid'];

$openid即为扫码用户的openid。

获取openid后推送消息,代码如下

public function send_wechat()    {//模版中的参数,以模版为准$openid = $_REQUEST["openid"];$name=$_REQUEST["name"];$area=$_REQUEST["area"];$code=$_REQUEST["code"];$lockid=$_REQUEST["lockid"];$time=$current_time = date('Y-m-d H:i:s');$appid = "微信appid";$secret = "微信secret";$template_id='模版id';$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$secret";$dx = $this->get_http($url);$data = json_decode($dx,TRUE);$url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$data['access_token'];$furl='';$res['touser'] = $openid;$res['template_id'] = $template_id;$res['url'] = $furl;//下面是模版中所用到的变量,以模版为准$res['data']['thing13']['value'] = $name;$res['data']['thing3']['value'] = $area;$res['data']['number1']['value'] = $code;$res['data']['character_string14']['value'] = $lockid;$res['data']['time11']['value'] = $time;$ch = curl_init();//初始化curlcurl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页curl_setopt($ch, CURLOPT_HEADER, 0);//设置headercurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上curl_setopt($ch, CURLOPT_POST, 1);//post提交方式curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($res));$re = curl_exec($ch);//运行curlcurl_close($ch);return $re;}    

下面配上我的模版的截图

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/57702.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Kafka原理剖析之「Topic创建」

一、前言 Kafka提供了高性能的读写,而这些读写操作均是操作在Topic上的,Topic的创建就尤为关键,其中涉及分区分配策略、状态流转等,而Topic的新建语句非常简单 bash kafka-topics.sh \ --bootstrap-server localhost:9092 \ // 需要写入endpoints --create --topic topicA …

京东h5st参数js逆向

扣代码的环节挺简单的就不讲了 直接到重点 发现许多包都会有一个h5st的加密参数 那么我们就要看这个参数是怎么生成的我们可以根据请求堆栈 找到h5st的入口 当然还有一种更简单的方法 就是直接全局搜索h5st 这里采用后者这里sign函数就是h5st生成的地方 但是这是个promise异步函…

GenRec论文阅读笔记

GenRec: Large Language Model for Generative Recommendation论文阅读笔记 Abstract ​ 本文提出了一种使用大型语言模型(LLM)的创新推荐系统方法,该方法纯粹基于原始文本数据,即使用项目名称或标题作为项目 ID,而不是创建精心设计的用户或项目 ID。更具体地说,我们提出…

XGBoost模型 0基础小白也能懂(附代码)

XGBoost 是 eXtreme Gradient Boosting 的缩写称呼,它是一个非常强大的 Boosting 算法工具包,优秀的性能(效果与速度)让其在很长一段时间内霸屏数据科学比赛解决方案榜首,现在很多大厂的机器学习方案依旧会首选这个模型。XGBoost模型 0基础小白也能懂(附代码) 原文链接 …

ubuntu安装

一、系统安装 1、ubuntu 22.04 下载地址 官方 清华源 阿里源2、开机启动并设置安装ubuntu3、语言选择4、镜像是否需要更新后才继续安装5、设置键盘6、选择安装类型7、设置网络8、设置系统代理9、设置包的源地址10、硬盘分区11、格式化提示12、设置账号,不能是root13、安装 SSH…

编程技术开发105本经典书籍推荐分享

最近整理了好多的技术书籍,对于提高自己能力来说还是很有用的,当然要有选择的看,不然估计退休了都不一定看得完,分享给需要的同学。 编程技术开发105本经典书籍推荐:https://zhangfeidezhu.com/?p=753 分享截图本文来自博客园,作者:张飞的猪,转载请注明原文链接:http…

ArcMap批量附色操作,并保存mxd

ArcMap批量附色操作,并保存mxd 1、对单文件操作 1、保存当前ArcMap中打开的shp文件为mxd文件 打开label_shp_root中的任意一个shp文件夹保存成mxd文件2、对当前在arcmap中打开的shp文件应用color配色 color配色是手动设置好一个shp文件夹的配色方案并保存成mxd文件应用color.m…

Linux 忘记密码

最近需要搞几台虚拟机,之前的vm密码进不去 找了几个方法 不是很贴切, Centos7 重启页面 e--> grub ,在linux16 行 修改ro 为rw,最后加上 init=/bin/sh F10 或Ctrl+x进入这里的 rw代替 进os之后 mount -o remount,rw /passwd touch /.autorelabel exec /sbin/init