微信端php 开发技术要求,微信第三方平台开发详解——PHP版
申请第三方平台,这个很简单直接按照提示填写,下面的授权事件接收URL中获取的component_verify_ticket是会过期的,所以不要只获取一次,缓存起来每10分钟会发送一次,每1小时会更新一次。
附上我的获取component_verify_ticket的代码:我是缓存和数据库都保存了
微信有提供wxBizMsgCrypt.php加解密核心代码
/**
* 授权事件接收URL
* @access public
*
*/
public function sysMessage()
{
$wxComponentTicketModel = new \app\diuber\model\WxComponentTicket();
$encodingAesKey = $this->encodingAesKey;
$token = $this->token;
$appId = $this->appId;
$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', 'r');
libxml_disable_entity_loader(true);
$result = json_decode(json_encode(simplexml_load_string($encryptMsg, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
if(config('redis_set')['use_status']){
$redis = $wxComponentTicketModel->initializeRedis();
$redis->set('wx_component_verify_ticket_xml',$encryptMsg);
}
$pc = new \WXBizMsgCrypt($token, $encodingAesKey, $appId);
$xml_tree = new \DOMDocument();
$xml_tree->loadXML($encryptMsg);
$array_e = $xml_tree->getElementsByTagName('Encrypt');
$encrypt = $array_e->item(0)->nodeValue;
$format = "";
$from_xml = sprintf($format, $encrypt);
// 第三方收到公众号平台发送的消息
$msg = '';
$errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg);
if ($errCode == 0) {
//print("解密后: " . $msg . "\n");
$xml = new \DOMDocument();
$xml->loadXML($msg);
$array_e = $xml->getElementsByTagName('ComponentVerifyTicket');
$component_verify_ticket = $array_e->item(0)->nodeValue;
//logResult('解密后的component_verify_ticket是:'.$component_verify_ticket);
$dateline = time();
$data = array(
'app_id' => $result['AppId'],
'encrypt' => $result['Encrypt'],
'create_time' => $dateline + 600,
//'info_type' => $result['AppId'],
'component_verify_ticket' => $component_verify_ticket,
'time' => date('Y-m-d H:i:s')
);
if(config('redis_set')['use_status']){
$redis = $wxComponentTicketModel->initializeRedis();
$redis->set('wx_component_verify_ticket',json_encode($data));
}
$existComponentTicke = $wxComponentTicketModel->get(array('component_verify_ticket'=>$component_verify_ticket));
if(!$existComponentTicke){
$wx = $wxComponentTicketModel->create($data);
if($wx){
echo 'success';
exit;
}else{
echo 'fail';
exit;
}
}else{
echo 'success';
exit;
}
}else{
echo 'fail';
exit;
}
}
地址:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419318479&token=bc7c35421376903886e43747e4bf165c9be36663&lang=zh_CN
公众号消息与事件接收URL,直接上代码:
这个方法处理3中不同的事件推送,
1.MsgType为text类型,并且Content信息为‘QUERY_AUTH_CODE:xxxxxxxxx’:需要通过接口’https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=xxx ’POST回复过去。
2.MsgType为text类型,并且Content信息为‘TESTCOMPONENT_MSG_TYPE_TEXT’:需要把Content信息改为‘TESTCOMPONENT_MSG_TYPE_TEXT_callback’然后加密return
3.MsgType为event类型:需要注意的是当MsgType为event类型时是没有Content信息的会增加一个Event的字段,这里只要获取到Event然后在后面加上‘from_callback’保存为Content字段信息,统一加密return。
具体逻辑看代码
/**
* 公众号消息与事件接收URL
* @access public
*
*/
public function callback()
{
$wxComponentTicketModel = new \app\diuber\model\WxComponentTicket();
$wxCallbackModel = new \app\diuber\model\WxCallback();
$wxAccessTokenModel = new \app\diuber\model\WxAccessToken();
$encodingAesKey = $this->encodingAesKey;
$token = $this->token;
$appId = $this->appId;
$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($token, $encodingAesKey, $appId);
$xml_tree = new \DOMDocument();
$xml_tree->loadXML($encryptMsg);
$array_e = $xml_tree->getElementsByTagName('Encrypt');
$encrypt = $array_e->item(0)->nodeValue;
$format = "";
$from_xml = sprintf($format, $encrypt);
// 第三方收到公众号平台发送的消息
$msg = '';
$errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg);
if ($errCode == 0) {
$xml = new \DOMDocument();
$xml->loadXML($msg);
$array_e2 = $xml->getElementsByTagName('ToUserName');
$ToUserName = $array_e2->item(0)->nodeValue;
$array_e3 = $xml->getElementsByTagName('FromUserName');
$FromUserName = $array_e3->item(0)->nodeValue;
$array_e5 = $xml->getElementsByTagName('MsgType');
$MsgType = $array_e5->item(0)->nodeValue;
$nowTime = date('Y-m-d H:i:s');
$contentx = '';
if($MsgType=="text") {
$array_e = $xml->getElementsByTagName('Content');
$content = $array_e->item(0)->nodeValue;
$needle ='QUERY_AUTH_CODE:';
$tmparray = explode($needle,$content);
if(count($tmparray) > 1){
//3、模拟粉丝发送文本消息给专用测试公众号,第三方平台方需在5秒内返回空串
//表明暂时不回复,然后再立即使用客服消息接口发送消息回复粉丝
$contentx = str_replace ($needle,'',$content);
$info = $wxAccessTokenModel->getMiniAppInfo($contentx);
$test_token = $info['info']['authorizer_access_token'];
$content_re = $contentx."_from_api";
echo '';
$data = '{
"touser":"'.$FromUserName.'",
"msgtype":"text",
"text":
{
"content":"'.$content_re.'"
}
}';
$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$test_token;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_exec($ch);
curl_close($ch);
}else{
//2、模拟粉丝发送文本消息给专用测试公众号
$contentx = "TESTCOMPONENT_MSG_TYPE_TEXT_callback";
}
}elseif($MsgType == "event"){ //1、模拟粉丝触发专用测试公众号的事件
$array_e4 = $xml->getElementsByTagName('Event');
$event = $array_e4->item(0)->nodeValue;
$contentx = $event.'from_callback';
}
$text = "
$nowTime
";
//加密消息
$encryptMsg = '';
$errCode = $pc->encryptMsg($text, $timeStamp, $nonce, $encryptMsg);
$wxCallbackModel->create(array('from_user_name'=>$FromUserName,'to_user_name'=>$ToUserName,'msg_type'=>$MsgType,'content'=>$contentx,'create_time'=>$timeStamp));
echo $encryptMsg;
exit();
} else {
if(config('redis_set')['use_status']){
$redis = $wxComponentTicketModel->initializeRedis();
$redis->set('wx_call_back_err',$errCode);
}
exit();
}
}
到这里已经全部完成了全网发布的准备了。可以直接点击全网发布监测,通过以后一般会在2-3之内通过审核。
微信端php 开发技术要求,微信第三方平台开发详解——PHP版相关推荐
- 百度小程序第三方平台开发,一整套流程
百度智能小程序第三方平台开发着力于解决百度生态体系内的小程序管理问题,一套模板,随处部署.能尽可能地减少系统服务商的开发成本,系统服务商只用开发一套小程序代码作为模板就可以快速批量的孵化出大量的商家小 ...
- 微信开放平台 公众号第三方平台开发 教程一 平台介绍
教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 ...
- 微信开放平台公众号第三方平台开发 教程一 平台介绍
微信现在火,火的如火如荼,给我们这些第三方的开发者带来了不少机会,相信现在有不少人在基于微信的公众平台在做二次开发,接下来会一系列的文章来介绍微信的另一种开发模式- 基于微信开发平台的公众号第 ...
- 微信端自动授权登陆实现 - 无第三方库版
2019独角兽企业重金招聘Python工程师标准>>> 鉴于美国国防部网站 http://sxsxssx.com 是用yii开发的,自然的我新建了一个wechat模块,域名 http ...
- 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台
更多微信技术交流,请加QQ群:289709451.287090836 公众号第三方平台的开放,是为了让公众号运营者,在面向垂直行业需求时,可以一键登录授权给第三方的公众号运营平台,通过第三方开 ...
- 微信开放平台-第三方平台开发配置及常见的问题
目录 概述 参考文档 开源项目&工具 第三方平台设置 问题及解决方法 概述 本实例:第三方平台+微信公众号(服务号) 微信开放平台-第三方平台,为广大公众号和小程序提供运营服务和行业解决方案. ...
- 微信开放平台之第三方平台开发,模板小程序如何提交?
大家好,我是悟空码字 12月25日,天气晴朗,阳光普照,今天是圣诞节.因为疫情影响,小羊人的增多,街上放眼望去,人烟稀少.楼下除了几个十一二岁的小男孩在玩耍,也没有像往日老人悠闲打牌.小孩嬉戏那般热闹 ...
- 微信第三方平台开发错误码集合,各种 code
微信第三方平台开发错误码集合 PHP static $codes = array("-1" => "系统繁忙","0" => & ...
- 微信第三方平台开发流程和总结
微信第三方平台开发流程和总结 创建第三方平台 1).在微信开放平台-管理中心-第三方平台中创建第三方平台账号.创建第三方平台 2).选择"平台型服务商类型"创建第三方平台.填写第三 ...
- 微信公众号第三方平台开发PYTHON教程 PART 2
github地址:cppfun@wechat-open-third-party-dev 微信公众号第三方平台开发python教程 Part 1 这一节肯定是在第一节的基础上,如果你没有看过第一节,可能 ...
最新文章
- 香港中文大学(深圳)吴保元教授课题组招收全奖PhD、实习/访问学生
- gulp es5语法转换及js/css/html压缩过程
- 乐观锁与悲观锁深入学习
- Nginx教程-日志配置
- 引用管理器没有程序集_如何使用Zotero插入引用文献
- opencv中很有趣的仿射变换(Affine Transformation)
- 运行 ROS-Academy-for-Beginners
- 基本数据类型-集合(set)_上周内容回顾(字符串_数字_列表_元组_字典_集合)
- eclipse——配置maven插件
- java和python有什么区别_Python与Java、C、Ruby、PHP等编程语言有什么区别?
- 【C语言数据结构】数组
- 翻译记忆软件-塔多思TRADOS经典教程_1
- RRR-RR五边形平面并联机构分析:Kinematics of a five-bar RRR-RR mechanism
- linux pppd源码下载_Linux中的pppd
- 各种css hack - 兼容性探测
- 什么是市盈率,它和股票价格有什么关系?
- BCG 各控件使用说明
- 不知道从哪里找数据?这一篇,都解决(持续更新)
- Python基础-----列表生成式、偏函数、高阶函数、闭包、装饰器
- 计算机网络技术数字地球,“数字地球”是指把整个地球信息进行数字化后,由计算机网络来管理的技...
热门文章
- mysql workbench中文设置_使用Workbench完成流体压力渗透分析
- c语言学籍管理系统小程序,学籍业务办理系统(开源 v2.0发布 优化代码,增加小程序端)...
- alarm项目bug
- 培智学校计算机课教案,培智数学教案
- 电脑怎么结束进程_深刻了解windows系统的任务管理器,电脑高手的成长之路
- 华为鸿蒙发布2.0,华为做到了!鸿蒙2.0正式发布,苹果安卓有危机?
- 【转】%~dp0是什么意思
- 【转】01Teams的前世今生
- 【转】刨根究底字符编码之十一——UTF-8编码方式与字节序标记BOM
- 详解Bootstrap glyphicons-halflings-regular.woff2 Not found