EasyWeChat、微信公众平台实现带参数二维码、微信事件处理以及微信详细用户信息获取

微信小程序请求网络API 400错误的解决方法 在v0.14.140900版本的wechat小程序开发工具中做网络请求,直接使用微信的网络请求代码debug过程中发生了400 (Bad request)错误。wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: { x: '' , y: '' }, header: { 'content-type': 阅读详情

一、生成带参数的二维码

为了满足用户渠道推广分析和用户帐号绑定等场景的需要,公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。

目前有2种类型的二维码:

1、临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量。临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景
2、永久二维码,是无过期时间的,但数量较少(目前为最多10万个)。永久二维码主要用于适用于帐号绑定、用户来源统计等场景。

用户扫描带场景值二维码时,可能推送以下两种事件:

如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。

如果用户已经关注公众号,在用户扫描后会自动进入会话,微信也会将带场景值扫描事件推送给开发者。

获取带参数的二维码的过程包括两步,首先创建二维码ticket,然后凭借ticket到指定URL换取二维码。

创建二维码ticket

每次创建二维码ticket需要提供一个开发者自行设定的参数(scene_id),分别介绍临时二维码和永久二维码的创建二维码ticket过程。

临时二维码请求说明

http请求方式: POST
URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKENPOST数据格式:json
POST数据例子:{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}


或者也可以使用以下POST数据创建字符串形式的二维码参数:
{"expire_seconds": 604800, "action_name": "QR_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}

永久二维码请求说明

http请求方式: POST
URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKENPOST数据格式:json
POST数据例子:{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}}

或者也可以使用以下POST数据创建字符串形式的二维码参数:
{"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}

参数说明

参数 说明
expire_seconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。
action_name 二维码类型,QR_SCENE为临时的整型参数值,QR_STR_SCENE为临时的字符串参数值,QR_LIMIT_SCENE为永久的整型参数值,QR_LIMIT_STR_SCENE为永久的字符串参数值
action_info 二维码详细信息
scene_id 场景值ID,临时二维码时为32位非0整型,永久二维码时最大值为100000(目前参数只支持1--100000)
scene_str 场景值ID(字符串形式的ID),字符串类型,长度限制为1到64  


返回说明

正确的Json返回结果:

{"ticket":"gQH47joAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL2taZ2Z3TVRtNzJXV1Brb3ZhYmJJAAIEZ23sUwMEmm

3sUw==","expire_seconds":60,"url":"http:\/\/weixin.qq.com\/q\/kZgfwMTm72WWPkovabbI"}


参数 说明
ticket 获取的二维码ticket,凭借此ticket可以在有效时间内换取二维码。
expire_seconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天)。
url 二维码图片解析后的地址,开发者可根据该地址自行生成需要的二维码图片

通过ticket换取二维码

获取二维码ticket后,开发者可用ticket换取二维码图片。请注意,本接口无须登录态即可调用。

请求说明

HTTP GET请求(请使用https协议)https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET提醒:TICKET记得进行UrlEncode

返回说明

ticket正确情况下,http 返回码是200,是一张图片,可以直接展示或者下载。

HTTP头(示例)如下:
Accept-Ranges:bytes
Cache-control:max-age=604800
Connection:keep-alive
Content-Length:28026
Content-Type:image/jpg
Date:Wed, 16 Oct 2013 06:37:10 GMT
Expires:Wed, 23 Oct 2013 14:37:10 +0800
Server:nginx/1.4.1

错误情况下(如ticket非法)返回HTTP错误码404

二、获取微信用户详细信息

用户信息的获取是微信开发中比较常用的一个功能了,以下所有的用户信息的获取与更新,都是基于微信的 openid的,并且是已关注当前账号的,其它情况可能无法正常使用。

获取实例

     
<?php
use EasyWeChat\ Foundation\ Application;
// ...
$app = new Application($options);
$userService = $app->user;

API 列表

获取用户信息

     
$userService->get($openId);
$userService->batchGet($openIds);

获取单个:

     
$user = $userService->get($openId);
echo $user->nickname; // or $user['nickname']

获取多个:

     
$users = $userService->batchGet([$openId1, $openId2, ...]);

获取用户列表

     
$userService->lists($nextOpenId = null); // $nextOpenId 可选

example:

     
$users = $userService->lists();
// result
{
"total": 2,
"count": 2,
"data": {
"openid": [
"",
"OPENID1",
"OPENID2"
]
},
"next_openid": "NEXT_OPENID"
}
$users->total; // 2

修改用户备注

     
$userService->remark($openId, $remark); // 成功返回boolean

example:

     
$userService->remark($openId, "僵尸粉");

获取用户所属用户组ID

     
$userService->group($openId);

example:

     
$userGroupId = $userService->group($openId);

获取公众号的黑名单列表

     
$userService->blacklist($beginOpenId = null);

example:

     
$blacklist = $userService->blacklist();

拉黑用户

     
$userService->batchBlock( array $openidList);

example:

     
$userService->batchBlock([ 'openid1', 'openid2', 'openid3', '...']);

取消拉黑用户

     
$userService->batchUnblock( array $openidList);

example:

     
$userService->batchUnblock([ 'openid1', 'openid2', 'openid3', '...']);

其它


三、微信事件处理

我们在入门小教程一节以服务端为例讲解了一个基本的消息的处理,这里就不再讲服务器验证的流程了,请直接参考前面的入门实例即可。

服务端的作用呢,在整个微信开发中主要是负责 接收用户发送过来的消息,还有 用户触发的一系列事件。

首先我们得厘清一下消息与事件的回复,当你收到用户消息后(消息由微信服务器推送到你的服务器),在你对消息进行一些处理后,不管是选择回复一个消息还是什么不都回给用户,你也应该给微信服务器一个 “答复”,如果是选择回复一条消息,就直接返回一个消息xml就好,如果选择不作任何回复,你也得回复一个空字符串或者字符串 SUCCESS(不然用户就会看到 该公众号暂时无法提供服务)。

基本使用

在 SDK 中呢,使用 setMessageHandler(callable $callback) 来设置消息处理函数:

     
<?php
use EasyWeChat\ Foundation\ Application;
// ...
$app = new Application($options);
// 从项目实例中得到服务端应用实例。
$server = $app->server;
$server->setMessageHandler( function ($message) {
// $message->FromUserName // 用户的 openid
// $message->MsgType // 消息类型:event, text....
return "您好!欢迎关注我!";
});
$response = $server->serve();
$response->send(); // Laravel 里请使用:return $response;

这里我们使用 setMessageHandler 传入了一个 闭包(Closure),该闭包接收一个参数 $message 为消息对象(Collection),这里需要注意的时,与 2.0 不同,2.0 当中我们对消息与事件做了区分,还对消息进行了分类(按 MsgType)。在 3.0 后,所有的消息包括事件都会使用 setMessageHandler 来处理,也就是说你可能需要在里面进行一些判断,例如:

     
$server->setMessageHandler( function ($message) {
switch ($message->MsgType) {
case 'event':
return '收到事件消息';
break;
case 'text':
return '收到文字消息';
break;
case 'image':
return '收到图片消息';
break;
case 'voice':
return '收到语音消息';
break;
case 'video':
return '收到视频消息';
break;
case 'location':
return '收到坐标消息';
break;
case 'link':
return '收到链接消息';
break;
// ... 其它消息
default:
return '收到其它消息';
break;
}
// ...
});

当然,因为这里 setMessageHandler 接收一个 callable 的参数,所以你不一定要传入一个 Closure 闭包,你可以选择传入一个函数名,一个 [$class, $method] 或者 Foo::bar 这样的类型。

 注意,默认没有验证是否为微信的请求,部署上线建议关掉 debug 模式。

某些情况,我们需要直接使用 $message 参数,那么怎么在 setMessageHandler 闭包外调用呢?

     
$message = $server->getMessage();

注意:$message 是一个数组类型的数据,使用的时候这样使用:$message['ToUserName']

请求消息的属性

当你接收到用户发来的消息时,可能会提取消息中的相关属性,那么请参考:

请求消息基本属性(以下所有消息都有的基本属性):

$message->ToUserName    接收方帐号(该公众号 ID)
$message->FromUserName  发送方帐号(OpenID, 代表用户的唯一标识)
$message->CreateTime    消息创建时间(时间戳)
$message->MsgId         消息 ID(64位整型)

文本:

$message->MsgType  text
$message->Content  文本消息内容

图片:

$message->MsgType  image
$message->PicUrl   图片链接

语音:

$message->MsgType        voice
$message->MediaId        语音消息媒体id,可以调用多媒体文件下载接口拉取数据。
$message->Format         语音格式,如 amr,speex 等
$message->Recognition * 开通语音识别后才有

> 请注意,开通语音识别后,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个 `Recongnition` 字段

视频:

$message->MsgType       video
$message->MediaId       视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
$message->ThumbMediaId  视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。

小视频:

$message->MsgType     shortvideo
$message->MediaId     视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
$message->ThumbMediaId    视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。

事件:

$message->MsgType     event
$message->Event       事件类型 (如:subscribe(订阅)、unsubscribe(取消订阅) ..., CLICK 等)

# 扫描带参数二维码事件
$message->EventKey    事件KEY值,比如:qrscene_123123,qrscene_为前缀,后面为二维码的参数值
$message->Ticket      二维码的 ticket,可用来换取二维码图片

# 上报地理位置事件
$message->Latitude    23.137466   地理位置纬度
$message->Longitude   113.352425  地理位置经度
$message->Precision   119.385040  地理位置精度

# 自定义菜单事件
$message->EventKey    事件KEY值,与自定义菜单接口中KEY值对应,如:CUSTOM_KEY_001, www.qq.com

地理位置:

$message->MsgType     location
$message->Location_X  地理位置纬度
$message->Location_Y  地理位置经度
$message->Scale       地图缩放大小
$message->Label       地理位置信息

链接:

$message->MsgType      link
$message->Title        消息标题
$message->Description  消息描述
$message->Url          消息链接

回复消息

回复的消息可以为 null,此时 SDK 会返回给微信一个 “SUCCESS”,你也可以回复一个普通字符串,比如:欢迎关注 overtrue.,此时 SDK 会对它进行一个封装,产生一个 EasyWeChat\Message\Text 类型的消息并在最后的 $server->serve(); 时生成对应的消息 XML 格式。

如果你想返回一个自己手动拼的原生 XML 格式消息,请返回一个 EasyWeChat\Message\Raw 实例即可。

MPU6050模块DIY翻车实录:ID能读但数据全为零?原来是这个10uF电容惹的祸 本文详细记录了MPU6050模块调试过程中遇到的ID能读但数据全为零的问题排查过程。通过对比不同参考设计,发现CPOUT引脚10uF电容选择不当是导致数据异常的根源,更换为官方推荐的2.2nF电容后问题解决。文章为硬件开发者提供了宝贵的电路设计经验。 阅读详情

相关推荐

单细胞分析进阶:sctransform标准化在Seurat中的实战解析

本文深入解析了sctransform标准化方法在Seurat单细胞分析中的实战应用。通过对比传统对数标准化,sctransform能更有效地建模并剔除技术噪音,提升数据质量。文章提供了从环境配置、数据准备、核心参数解析到完整流程整合的详细指南,并针对常见问题给出解决方案,帮助研究者获得更清晰的细胞分群和更可靠的差异表达结果。

weixin_29248313的博客 150

使用easywechat给关注公众号用户发消息

使用easywechat给关注公众号用户发消息 //获取昵称 private function getnickname($openid='') { $nickname=DB::name('member')->where(['openid'=>$openid])->value('member_nickname'); return $nickname; } //获取评论人昵称 $nickname=$this->getnickna

weixin_47164415的博客 2449

无人机避障——Mid360+Fast-lio感知建图+Ego-planner运动规划(胎教级教程)

本工作将 Mid360 激光雷达、Fastlio-SLAM 和 Ego-Planner 集成,实现无人机的环境感知、定位建图和运动规划(仿真过程)—— 胎教级教程。

weixin_45390670的博客 1万+

微信公众号开发(三)事件推送及关键字回复

这里的回复实际上分成了两种类型:1.关注时马上回复 2.根据关键字来回复 在上一次我们完成的效果是用户发送什么内容就直接回复相同的内容, 所以关键字的话只需要根据用户发送的内容来做相关的判断即可。 关键字回复 代码: /** * 微信消息处理 */ @RequestMapping(value="/intoWechat",method=RequestMethod.POST,...

royal1235的博客 2075

【FLINK+Kerberos+kafka】在华为云上 bootstrap.server使用IP的GSS initiate failed 问题处理

目前互联网上所有的资料显示都是说没有正确设置KDC之类的,但本博主实际通过java代码低版本 如使用kafka-client 0.11.0 ,2.4.0等版本手动创建kafkaconfig 或者使用华为云的LoginUtils类 都能够正常链接,所以应该是高版本添加了相关配置,或者flink在subtask 创建kafkaAdminClient时 丢弃或使用了默认的一些配置行为,导致了客户端和kdc验证之间出现了principal 不一致导致验证失败。client.dns.lookup配置项作用。

honghanyue1791的博客 574

【Linux】常见指令的使用

Linux常用指令

qq_74897518的博客 1479

laravel easywechat 验证是否关注并发送模板消息

<?php namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use DB; /** * * @author wangmeng * 定时器接口 * */ class DemoController extends Controller { //条数 const PAGESIZE = 500; // ...

qq_32421489的博客 1019

第一章:基础知识 - 概念与基础,理解什么是功耗

电源管理与功耗调优:实战项目经验分享

坚韧与专注 884

公众号客服回复消息php代码,使用EasyWeChat写客服消息回复的接口

使用EasyWeChat写客服消息回复的接口thinkphp 使用easywechat 写客服回复的接口引入EasyWechat 到框架中使用composer 安装$ composer require overtrue/wechat:~4.0 -vvv微信公众号或小程序的appid 和 secretuse EasyWeChat\Factory;$config = ['app_id' => '...

weixin_32187037的博客 1521

YOLOv5算法改进(21)— 添加CA注意力机制 + 更换Neck网络之BiFPN + 更换损失函数之EIoU

本节课作者就结合论文对YOLOv5进行组合改进(添加CA注意力机制+更改Neck网络之BiFPN+更换损失函数之EIoU),小白必学!

小哥谈 2820

《备考系统架构设计师》 - 专栏介绍和目录

本专栏包括所有历年真题及详解、章节知识核心总结、精选高分论文、补充知识、专题总结等。欢迎订阅专栏。

数据知道的博客 4万+

怎么设置微信公众号自动回复内容显示用户昵称

对于微信公众号自动回复内容显示用户昵称,第三方平台微号帮提供了粉丝对话定时推送功能实现,支持公众号设置自动回复消息显示用户昵称,除了可以显示对应用户的昵称,还可以显示用户的头像、openID;用户向公众号发消息后触发功能,支持设置延迟自动回复时间,支持设置触发频率和免打扰时段,避免功能打扰用户。 微信公众号延迟自动回复内容,可以给公众号对话用户自动推送消息,可以设置文字、图片、图文、视频、语音、直播、在线课程、微商城、团购、培训资料、文档文件、文章、问卷表单、美妆信息、美食信息、产品信息、在线刷题等,帮助

dyhgztj的博客 1472

cefsharp139-H264-X86升级测试(MP4)-支持PDF预览-chromium7258定制浏览器

CEFSharp 139.x版本升级测试已完成,该版本支持64位系统(需选择x86架构)及WinForms.NETCore(.NET8)。升级内容包括H264文件编译支持Mp4播放,并覆盖WPF、WinForms等平台。文中提供了版本替换方法及不同系统的版本建议(如Win10/11推荐111/133/134/139版)。此外,文章还列举了CEFSharp的多种应用场景,包括浏览器开发、B/S系统封装、资源抓取等,同时指出当前版本均需自行编译以支持MP4播放。详细图文说明及旧版链接已附在正文中。

无线智能模块 可视DIY智能专家 1295

easywechat php例子,thinkphp6使用easywechat笔记!

公众号端基本配置image.png公众号端设置image.png域名要备案,文件下载上传至tp6的public目录下image.pngcomposer require overtrue/wechat -vvv微信相关路由配置//微信Route::group('wechat', function () use($version){Route::get('',"{$version}.Wechat/in...

weixin_36125719的博客 2085

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【EasyWechat】自动回复

author:咔咔 wecaht:fangkangfk 首先我们先打开他的库地址,这个里边就是使用EasyWechat开发公众号的文档 https://www.easywechat.com/docs/master/official-account/tutorial 然后在打开一个地址,是laravel框架使用Easywechat的一个入门 https://github.com/overt...

咔咔博客 7318

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

EasyWeChat4.X用户手动调用微信接口

EasyWeChat4.X用户手动调用微信接口,免去维护Access Token

qq_40088333的博客 734

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

easywechat6 含参数二维码

easywechat6 含参数二维码

qq_36296358的博客 1236

EasyWeChat生成带参数的小程序码

EasyWeChat生成带参数的小程序码

qq_40088333的博客 1512

EasyWeChat 授权获取用户信息 问题记录 10003

测试账号地址:https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index public function token() { $config = [ 'token'=>'reiz',//填写token ...

weixin_30624825的博客 5089

easywechat6获取微信用户信息(基于公众号)

easywechat6获取微信用户信息

quweiie的专栏 1734

easywechat公众号生成参数二维码报错errcode“:40001原因方法

最近发现可能是laravel中的storage/logs目录的权限导致的。chmod -R 777 logs/原因:可能是授权了多个平台,或者使用了key和密钥,其他平台里面也生成了access_token导致了这边失效。

webnoties的专栏 1683

easywechat 扫码事件_基于thinkphp5.1和easyWeChat实现第三方平台扫码授权

1

weixin_39556064的博客 1081

thinkphp6使用EasyWeChat5.x之公众号开发(一)

EasyWeChat是一个基于微信公众号和小程序的PHP SDK,它提供了简单易用的API接口,方便开发者快速开发和集成微信公众号和小程序的功能。2.封装好的业务逻辑有点麻烦,如果要改动会很不利,对于刚开始使用EasyWeChat的人来说增加了学习成本(要开发者对整体微信开发流程有个大致了解,起码要能看得懂微信文档,但微信文档有多费劲相信看到这篇文章的你心中已有自己的判断了...)由于笔者是宝塔面板安装,所以只遇到了fileinfo扩展没安装(宝塔点击安装即可);接着安装thinkphp6的视图。

MrWangisgoodboy的博客 1365

微信网页授权获取并获取用户信息

网页授权和获取用户信息是基本所有开发微信都需要明白的东西,包括easywechat,thinkPHP等 这个系统http://github.crmeb.net/u/long可以帮大家系统了解PHP商城开发 一、网页授权 重定向 //用户授权获取code public function getCode(){ $redirect_uri = urlencode('ht...

不二青春 2162

PHP生成带参数的微信小程序二维码

服务端使用easywechat库来操作微信接口,版本要求4.1.15或更高。 相关文档 微信小程序码:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/qr-code.html easywechat生成小程序码:https://www.easywechat.com/docs/master/mini-pro...

March 1万+

EasyWechat 使用

公众号素材上传,公众号的模板消息,小程序二维码生成,小程序订阅消息

weixin_42581036的博客 1198
上一篇: Android项目中使用echarts
下一篇: 一种改进的自适应快速AF-DBSCAN聚类算法
dwf_学海无涯
博客等级 码龄10年 42粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值