微信开放平台开发-授权、全网发布(PHP)

article/2025/11/1 12:31:14
这两天做了微信开发平台的开发,梳理下。。。

先看看授权的流程:


第一步:接收component_verify_ticket:
1、微信服务器每隔10分钟会向第三方的消息接收地址推送一次component_verify_ticket,拿到后需要在本地做好存储;
2、微信第三方平台的消息是加密的(下图),需要进行解密才能获取需要的信息;
3、接收并解密消息,代码如下:
$timeStamp = empty ( $_GET ['timestamp'] ) ? '' : trim ( $_GET ['timestamp'] );
$nonce = empty ( $_GET ['nonce'] ) ? '' : trim ( $_GET ['nonce'] );
$msg_sign = empty ( $_GET ['msg_signature'] ) ? "" : trim ( $_GET ['msg_signature'] );
$encryptMsg = file_get_contents ( 'php://input' );
$pc = new WXBizMsgCrypt ( OPEN_MSG_VERIFY_TOKEN, OPEN_ENCRYPT_KEY, OPEN_APPID );
$postArr = ArrayUtil::xml2array ( $encryptMsg ); // xml对象解析
$format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>";
$from_xml = sprintf ( $format, $postArr ['Encrypt'] );
// 第三方收到公众号平台发送的消息
$msg = '';
$errCode = $pc->decryptMsg ( $msg_sign, $timeStamp, $nonce, $from_xml, $msg ); // 解密
if ($errCode == 0) {$param = ArrayUtil::xml2array ( $msg );switch ($param ['InfoType']) {case 'component_verify_ticket' : // 授权凭证$component_verify_ticket = $param ['ComponentVerifyTicket'];$ret ['component_verify_ticket'] = $component_verify_ticket;file_put_contents ( OPEN_COMPONENT_VERIFY_TICKET_PATH, $component_verify_ticket ); // 缓存break;case 'unauthorized' : // 取消授权$status = 2;break;case 'authorized' : // 授权$status = 1;break;case 'updateauthorized' : // 更新授权break;}
}
第二步:获取component_access_token:
每个令牌是存在有效期(2小时)的,且令牌的调用不是无限制的,请第三方平台做好令牌的管理,在令牌快过期时(比如1小时50分)再进行刷新。所以要对component_access_token做好本地缓存,代码如下:
$nowTime = time ();
$getCache = false; // 是否从缓存获取
if (is_file ( OPEN_COMPONENT_ACCESS_TOKEN_PATH )) {$cacheJson = file_get_contents ( OPEN_COMPONENT_ACCESS_TOKEN_PATH );if (json_decode ( $cacheJson )) {$cacheArr = json_decode ( $cacheJson, true );if (! empty ( $cacheArr ['component_access_token'] ) && $cacheArr ['expires_in'] > $nowTime + 120) {$ret ['errCode'] = 0;$ret ['component_access_token'] = $cacheArr ['component_access_token'];$getCache = true;}}
}
// 若本地缓存不存在或已失效,则从微信服务器重新获取
if (! $getCache) {$url = WeixinApiLang::$url ['component_token'];$ticket = file_get_contents ( OPEN_COMPONENT_VERIFY_TICKET_PATH );$data = '{"component_appid":"' . OPEN_APPID . '","component_appsecret":"' . OPEN_APPSECRET . '","component_verify_ticket":"' . $ticket . '"}';$ret = self::requestWeixinAPI ( $url, $data );// 缓存到本地if (isset ( $ret ['component_access_token'] )) {$cacheArr = array ();$cacheArr ['component_access_token'] = $ret ['component_access_token'];$ret ['expires_in'] += $nowTime;$cacheArr ['expires_in'] = $ret ['expires_in'];file_put_contents ( OPEN_COMPONENT_ACCESS_TOKEN_PATH, json_encode ( $cacheArr ) );}
}
第三步:获取pre_auth_code(注意这是预授权码,不是授权码):
$url = 'https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=' . $accessToken;
$data = '{"component_appid":"' . OPEN_APPID . '"
}';
$ret = self::requestWeixinAPI ( $url, $data );
第四步:使用授权码换取公众号的接口调用凭据和授权信息:
授权码authorization_code是用户“确认授权”后,微信回调时返回的。代码如下:
$url = 'https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token=' . $accessToken;
$data = '{"component_appid":"' . OPEN_APPID . '","authorization_code": "' . $authorization_code . '"
}';
$ret = self::requestWeixinAPI ( $url, $data );
到此,授权流程就走完了。。。

接着看看全网发布的测试用例怎么做:

1、模拟粉丝触发专用测试公众号的事件,并推送事件消息到专用测试公众号,第三方平台方开发者需要提取推送XML信息中的event值,并在5秒内立即返回按照下述要求组装的文本消息给粉丝;
2、模拟粉丝发送文本消息给专用测试公众号,第三方平台方需根据文本消息的内容进行相应的响应;
3、模拟粉丝发送文本消息给专用测试公众号,第三方平台方需在5秒内返回空串表明暂时不回复,然后再立即使用客服消息接口发送消息回复粉丝。
代码如下:
$xmlTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content></xml>";
$keyword = isset ( $param ['Content'] ) ? trim ( $param ['Content'] ) : '';
if(isset($param ['Event']) && $param ['ToUserName'] == 'gh_3c884a361561'){ // 案例1$contentStr = $param ['Event'] . 'from_callback';
}elseif ($keyword == "TESTCOMPONENT_MSG_TYPE_TEXT") { // 案例2$contentStr = "TESTCOMPONENT_MSG_TYPE_TEXT_callback";
} elseif (strpos ( $keyword, "QUERY_AUTH_CODE:" ) !== false) { // 案例3$ticket = str_replace ( "QUERY_AUTH_CODE:", "", $keyword );$contentStr = $ticket . "_from_api";$tokenInfo = WechatOpenApiLogic::getAuthorizerAccessTokenByAuthCode ( $ticket );$param ['authorizerAccessToken'] = $tokenInfo ['authorization_info'] ['authorizer_access_token'];self::sendServiceMsg ( $param ['FromUserName'], $param ['ToUserName'], 1, $contentStr ); // 客服消息接口return 1;
}
$result = '';
if (! empty ( $contentStr )) {$result = sprintf ( $xmlTpl, $param ['FromUserName'], $param ['ToUserName'], time (), $contentStr );if (isset ( $_GET ['encrypt_type'] ) && $_GET ['encrypt_type'] == 'aes') { // 密文传输$msgCryptObj = new WXBizMsgCrypt ( OPEN_MSG_VERIFY_TOKEN, OPEN_ENCRYPT_KEY, OPEN_APPID );$encryptMsg = '';$msgCryptObj->encryptMsg ( $result, $_GET ['timestamp'], $_GET ['nonce'], $encryptMsg );$result = $encryptMsg;}
}
全网发布接入检测:

写的不是很详细,有疑问留言。。。


http://chatgpt.dhexx.cn/article/pBw3KH05.shtml

相关文章

微信开放平台开发——网页微信扫码登录(OAuth2.0)

转自 http://www.cnblogs.com/0201zcr/p/5133062.html 1、OAuth2.0 OAuth&#xff08;开放授权&#xff09;是一个开放标准&#xff0c;允许用户让第三方应用访问该用户在某一网站上存储的私密的资源&#xff08;如照片&#xff0c;视频&#xff0c;联系人列表&#xff09;&am…

微信开放平台-第三方平台开发配置及常见的问题

目录 概述 参考文档 开源项目&工具 第三方平台设置 问题及解决方法 概述 本实例&#xff1a;第三方平台微信公众号&#xff08;服务号&#xff09; 微信开放平台-第三方平台&#xff0c;为广大公众号和小程序提供运营服务和行业解决方案。分两种类型&#xff0c;定制…

微信第三方平台开发(一)

个人感觉微信在第三方平台开发者这块的开发文档写的很不友好&#xff0c;很隐晦&#xff0c;我在开发的过程总结的一些东西&#xff0c;写出来给大家分享一下。恩&#xff0c;就这样吧。 一、注册第三方平台账号 打开https://open.weixin.qq.com/cgi-bin/index?thome/index&…

微信开放平台开发第三方授权登陆(三):Android客户端

微信开放平台开发系列文章&#xff1a; 微信开放平台开发第三方授权登陆&#xff08;一&#xff09;&#xff1a;开发前期准备 微信开放平台开发第三方授权登陆&#xff08;二&#xff09;&#xff1a;PC网页端 微信开放平台开发第三方授权登陆&#xff08;三&#xff09;&a…

微信开放平台开发第三方授权登陆(二):PC网页端

微信开放平台开发系列文章&#xff1a; 微信开放平台开发第三方授权登陆&#xff08;一&#xff09;&#xff1a;开发前期准备 微信开放平台开发第三方授权登陆&#xff08;二&#xff09;&#xff1a;PC网页端 微信开放平台开发第三方授权登陆&#xff08;三&#xff09;&a…

.md文件用什么软件打开

记事本-------体验感差 效果&#xff1a; Notepad 毫无疑问的完胜记事本 官网下载地址&#xff1a;https://notepad-plus.en.softonic.com/download &#xff08;下载速度比较慢&#xff09; 这是百度网盘&#xff1a;&#xff08;会快一点点&#xff09; 链接&#xff1a;ht…

md文件打开方式推荐

MD文件介绍 以下介绍来自于百度&#xff1a; md文件是Markdown语法编写的文件&#xff0c;Markdown是一款轻量级的标记语言&#xff0c;可以使用语法来代替排版&#xff0c;插入公式和图片等都非常的容易&#xff0c;目前很多博客都可以使用该语法去编辑。使用Markdown的好处…

md文件如何打开?

阅读md文件时 常常会手足无措 今天教大家如何打开md文件 当在阅览md文件时&#xff0c;一般系统默认是记事本&#xff1a; 阅览效果极其不佳且编辑体验极差&#xff01; 今天推荐一款软件&#xff1a;Typora 直接上链接&#xff1a;下载地址&#xff08;官网&#xff09; …

Windows下右键新建.md文件教程(转)

Windows下右键新建.md文件教程 转载自Keavnn’Blog&#xff0c;并有些许修正 原本创建.md文件需要首先打开markdown文本编辑器&#xff0c;如Typora&#xff0c;或者新建.txt文件然后修改后缀名&#xff0c;本文介绍了如何在Windows操作系统中添加右键创建.md文件的方法。 环…

md文件使用

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

如何编写md格式的文档、vscode中写.md文件的插件推荐

目录 1. 标题 2. 字体 3. 引用 4. 分割线 5. 图片 6. 超链接 7. 无序列表 8. 有序列表 9. 列表嵌套 10. 表格 11.代码 12. vscode中写.md文件的插件推荐 .md格式的文章可以用编辑器Markdown打开&#xff0c;Markdown是一种纯文本格式的标记语言。通过简单的标记语法…

md文件转换成word文档

md文件转成word文档 Typora导出word文件时需要先下载pandoc Typora导出word文件时因为文档里面有表格&#xff0c;导出失败&#xff0c;所以先使用使用pandoc命令导出无边框表格的word 1.在xxx.md所在文件夹打开命令提示符 2.在命令提示符输入&#xff1a;pandoc -s xxxx.md …

.md文件以及markdown语法书写md文档

.md文件以及markdown语法书写md文档 1. .md文件如何打开2. markdown是什么&#xff1f;2.1 markdown用来干嘛&#xff1f;2.2 怎样书写和读取markdown&#xff1f; 3. markdown语法3.1 基本符号3.2 标题&#xff08;从大到小取决于#号的数量&#xff09;3.3 正文3.4 段落3.5 字…

md文档的阅读查看

前言&#xff1a; md文档可以用vscode看&#xff0c;也可以直接拖入浏览器看&#xff0c;但看起来不太好看&#xff0c;效果如下&#xff1a; 改进方法&#xff1a; 方法1、假如你的电脑安装了node.js &#xff08;1&#xff09;判断是否安装&#xff1a;WindowsR&#xff0…

如何将md文件完美转化为 PDF?

今天在网上搜kali相关教程时&#xff0c;无意中找到一本很好的教程&#xff0c;但是它是以*.md的文件形式放在github上&#xff0c;我试了将原文件zip下载到本地&#xff0c;但怎么能将.md文件转成PDF文件呢&#xff1f;&#xff08;如果你用Visual Studio code, 那么安装Markd…

如何编写.md格式文件?

文章目录 如何编写.md格式文件&#xff1f;1.标题2.字体3.插入图片操作4.不带快捷键Markdown书写操作5.Markdown拓展功能6.主题替换 如何编写.md格式文件&#xff1f; md即markdown&#xff0c;百度的解释&#xff1a;Markdown是一种可以使用普通文本编辑器编写的标记语言&…

加载.md文件

webpack是不能直接加载.md文件的&#xff0c;但是一些博客或者文章指导类的内容通过markdown进行编辑管理是比较常见的&#xff0c;这就需要我们进行一些配置&#xff0c;使webpack能够加载.md文件&#xff0c;并将文件内容展示到网页上。 1、先写一个md加载器 在这之前&…

.md文件的打开

今天终于知道.md文件是markdown格式的了&#xff0c; windows下可以安装markdownpad来打开md文件&#xff1a; http://blog.csdn.net/github_35160620/article/details/52158604 ubuntu下则可安装retext&#xff0c;查看时 retext xxx.md即可 例子&#xff1a; ubuntu下&…

pdf文件转为md文件

针对Windows 方法一&#x1f4a1; 下载Pandoc 由于Pandoc不支持PDF直接转为md形式&#xff0c;先将PDF文档转换为Word形式&#xff0c;再使用Typora将你的Word文件导入。 途径 1 &#xff1a; \textcolor{green}{途径1&#xff1a;} 途径1&#xff1a;&#x1f528; 官网下载…

md文件的相关使用

天已雪&#xff0c;一杯否&#xff1f; —— 南风落尽 前言 因为天冷&#xff0c;已经很久没有更新博客了&#xff0c;想了想&#xff0c;还是决定写一篇水文&#xff0c;一是促使自己记得写文章&#xff0c;二是记录自己平时学到的杂七杂八的东西&#xff0c;免得忘了又到处…