首页 > 其他分享 >扫码获取微信公众号用户的openid,向某个用户推送消息

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

时间:2024-09-07 17:02:30浏览次数:12  
标签:openid 扫码 code url res 用户 appid curl

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();//初始化curl
        curl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页
        curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
        curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($res));
        $re = curl_exec($ch);//运行curl
        curl_close($ch);
        return $re;
    }    

下面配上我的模版的截图

 

标签:openid,扫码,code,url,res,用户,appid,curl
From: https://www.cnblogs.com/weijiaying/p/18401911

相关文章

  • SAP B1 基础实操 - 用户定义字段 (UDF)
    目录一、功能介绍1. 使用场景2.操作逻辑3.常用定义部分3.1主数据3.2营销单据4.字段设置表单4.1字段基础信息4.2不同类详细设置4.3默认值/必填二、案例1 要求2操作步骤一、功能介绍1. 使用场景在实施过程中,经常会碰见用户需要的信息字段在标准单......
  • [HarmonyOS Next示例代码]用户认证登录
    HarmonyOS next示例代码全集UserAuth:本示例主要使用人脸和指纹认证用户身份、使用密码保险箱实现密码自动填充以及涉及口令输入的应用界面防截屏或录屏等功能的实现方式。用户认证登录介绍本示例主要使用人脸和指纹认证用户身份、使用密码保险箱实现密码自动填充以及涉......
  • 基于用户个性化的音乐播放管理系统-计算机毕业设计源码+LW文档
    摘要在当今社会,文娱活动在人们的生活中占据了越来越重要的地位。音乐作为一种能够放松身心、陶冶情操的艺术形式,受到了广大观众的喜爱。随着各行各业的飞速发展,音乐行业的竞争也日益激烈。为了在竞争中脱颖而出,音乐公司需要运用大数据分析技术来洞察市场趋势,探索音乐的未来发展方......
  • 忘记PbootCMS后台用户账号密码时进行重置resetpw.php
    <?php/***@copyright(C)2016-2099HnaoyunInc.*@licenseThisisnotafreeware,useissubjecttolicenseterms*@authorXingMeng*@[email protected]*@date2018年11月17日*重置PbootCMS用户密码*///设置字符集编码、IE文档模式header('Co......
  • Linux基础1-权限1(用户,权限是什么?)
    一.Linux用户    Linux有两种用户。普通用户和root用户root用户(超级管理员)    普通用户(受权限约束的用户)1.1 普通用户如何切换到root用户?su+用户名即可(root用户名就是root),然后输入相应的密码就能切换su        切换到其他用户的当前目录su-......
  • Linux用户创建命令
    创建一个新用户useradd新用户名如果不设定它属于哪个组,它会默认在创建它的用户的组里设置密码passwd新用户名查看所有组的简单信息moregroup设置新的组groupadd新的组名创建新用户并把它放在新的组里,不在默认的组useradd新用户名-g新的用户组把旧用户改......
  • 【转】[C#] NVelocity 用户手册 英文原版
    转自:https://velocity.apache.org/engine/devel/user-guide.htmlUserGuide-Contents¶UserGuide-ContentsAboutthisGuideWhatisVelocity?WhatcanVelocitydoforme?TheMudStoreExampleVelocityTemplateLanguage(VTL):AnIntroductionHello......
  • API 网关 OpenID Connect 实战:单点登录(SSO)如此简单
    作者:戴靖泽,阿里云API网关研发,Higress开源社区Member前言随着企业的发展,所使用的系统数量逐渐增多,用户在使用不同系统时需要频繁登录,导致用户体验较差。单点登录(SingleSign-On,简称SSO)正是为了解决这一问题。当用户登录一次后,即可获取所有系统的访问权限,不需要对每个单一系统逐......
  • API 网关 OpenID Connect 实战:单点登录(SSO)如此简单
    作者:戴靖泽,阿里云API网关研发,Higress开源社区Member前言随着企业的发展,所使用的系统数量逐渐增多,用户在使用不同系统时需要频繁登录,导致用户体验较差。单点登录(SingleSign-On,简称SSO)正是为了解决这一问题。当用户登录一次后,即可获取所有系统的访问权限,不需要对每个单一系......
  • sqlserver 用户权限设计
    一个用户拥有多个权限,下面是如何确保一个用户所有相关的权限都能被正确显示,并且每种type都会显示在查询结果中。例如,假设你有以下数据:USERS表: RolePermission表: checkItems表: 在这个示例中,userID=1对应的roleID是101,这使得查询会联......