微信第三方全网发布接入检测(PHP)
官方文档 https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419318292&token=&lang=zh_CN
function getTicket(){
$data = input('param.');
trace($data,'data');
$msg_sign = input('msg_signature');
$timeStamp = input('timestamp');
$nonce = input('nonce');
$encryptMsg = file_get_contents ( 'php://input' );
trace($encryptMsg,'getTicket');
//因为数据格式,先加密再解密
$pc = new WXBizMsgCrypt($this->token, $this->encodingAesKey, $this->appid);
$xml_tree = new \DOMDocument();
$xml_tree->loadXML($encryptMsg);
$array_e = $xml_tree->getElementsByTagName('Encrypt');
$encrypt = $array_e->item(0)->nodeValue;
echo 'success';
$format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>";
$from_xml = sprintf($format, $encrypt);
// 第三方收到公众号平台发送的消息
$msg = '';
$errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg);
trace($msg,"msg: " );
if ($errCode == 0) {
//print("解密后: " . $msg . "\n");
$xml = new \DOMDocument();
$xml->loadXML($msg);
$array_e = $xml->getElementsByTagName('ComponentVerifyTicket');
//保存下来
$this->component_verify_ticket = $array_e->item(0)->nodeValue;
//获取保存accessToken
$this->component_access_token = $this->component->getComponentToken($this->component_verify_ticket);
} else {
print($errCode . "\n");
}
}
//全网发布响应
function callback(){
$appid = input('appid');
$msg_sign = input('msg_signature');
$timeStamp = input('timestamp');
$nonce = input('nonce');
$encryptMsg = file_get_contents ( 'php://input' );
trace($encryptMsg,'php://inpu');
//解密
$pc = new WXBizMsgCrypt($this->token, $this->encodingAesKey, $this->appid);
$msg = '';
$errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $encryptMsg, $msg);
trace($msg,"3解密后: " );
$response = json_decode(json_encode(simplexml_load_string($msg, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
//生成返回公众号的消息
$res_msg = $textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
//判断事件
//2模拟粉丝发送文本消息给专用测试公众号
if ($response['MsgType']=="text") {
$needle ='QUERY_AUTH_CODE:';
$tmparray = explode($needle,$response['Content']);
if(count($tmparray)>1){
trace($response,"解密后: " );
//3、模拟粉丝发送文本消息给专用测试公众号,第三方平台方需在5秒内返回空串
//表明暂时不回复,然后再立即使用客服消息接口发送消息回复粉丝
$contentx = str_replace ($needle,'',$response['Content']);//将$query_auth_code$的值赋值给API所需的参数authorization_code
$this->authorization_code = $contentx;//authorization_code
trace($contentx,'authorization_code');
//使用授权码换取公众号或小程序的接口调用凭据和授权信息
$postdata = array(
"component_appid"=>$this->appid,
"authorization_code"=>$this->authorization_code,
);
$this->component_access_token = $this->component->getAccessToken();
trace($this->component_access_token,'access_token');
$component_return = send_post($this->authorizer_access_token_url.$this->component_access_token,$postdata);
$component_return = json_decode($component_return,true);
trace($component_return,'$component_return');
$this->authorizer_access_token = $test_token = $component_return['authorization_info']['authorizer_access_token'];
$content_re = $contentx."_from_api";
echo '';
//調用客服接口
$data = array(
"touser"=>$response['FromUserName'],
"msgtype"=>"text",
"text" => array(
"content" =>$content_re
)
);
$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$test_token;
$ret = send_post($url, $data);
trace($ret,'客服消息');
} else{
//2、模拟粉丝发送文本消息给专用测试公众号
$contentx = "TESTCOMPONENT_MSG_TYPE_TEXT_callback";
trace($response,"2模拟粉丝发送文本消息给专用测试公众号: " );
$responseText = sprintf( $textTpl, $response[ 'FromUserName' ], $response[ 'ToUserName' ], $response[ 'CreateTime' ], $contentx );
// echo $responseText;
$echo_msg='';
$errCode = $pc->encryptMsg($responseText, $timeStamp, $nonce, $echo_msg);
trace($responseText,"2222转数组: " );
echo $echo_msg;
}
}
//1、模拟粉丝触发专用测试公众号的事件
if ($response['MsgType'] == 'event'){
$content = $response['Event']."from_callback";
trace($response,"111转数组: " );
$responseText = sprintf( $textTpl, $response[ 'FromUserName' ], $response[ 'ToUserName' ], $response[ 'CreateTime' ], $content );
trace($responseText,"111: " );
// echo $responseText;
$errCode = $pc->encryptMsg($responseText, $timeStamp, $nonce, $echo_msg);
echo $echo_msg;
}
}
微信第三方全网发布接入检测(PHP)的更多相关文章
- 微信开放平台开发-授权、全网发布(PHP)
这两天做了微信开发平台的开发,梳理下... 浙江百牛信息技术bainiu.ltd整理发布于博客园 先看看授权的流程: 第一步:接收component_verify_ticket: 1.微信服务器每隔1 ...
- 微信支付v2开发(10) 全网发布
关键字:微信公众平台 微信支付 全网发布 作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/p/wxpay-publish.html 在这篇微信公众平台开发教程中, ...
- 微信开放平台全网发布时,检测失败 —— C#
主要就是三个:返回API文本消息,返回普通文本消息,发送事件消息 --会出现失败的情况 (后续补充说明:出现检测出错,不一定是代码出现了问题,也有可能是1.微信方面检测时出现服务器请求失败,2.我 ...
- 微信公众账号第三方平台全网发布源码(java)- 实战测试通过
第一部分:微信第三方平台配置
- 海洋cms自带资源发布api插件和第三方资源站接入办法说明
海洋cms自带资源发布api插件和第三方资源站接入办法说明 时间:2016-07-15 13:46 来源:CMS模版网 作者:大宇 阅读:7095次 ===海洋cms自带API资源发布插件说明===* ...
- iOS微信第三方登录实现
iOS微信第三方登录实现 一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统.在进行微信OAuth2.0授权登录接入之前,在微信开 ...
- laravel5实现微信第三方登录功能
背景 最近手头一个项目需要实现用户在网站的第三方登录(微信和微博),后端框架laravel5.4. 实现过程以微信网页版第三方登录,其他于此类似,在此不做重复. 准备工作 网站应用微信登录是基于OAu ...
- Android Learning:微信第三方登录
这两天,解决了微信第三方授权登录的问题,作为一个新手,想想也是一把辛酸泪.我想着,就把我的遇到的坑给大家分享一下,避免新手遇到我这样的问题能够顺利避开. 步骤一 微信开发者平台 我开始的解决思路是,去 ...
- 如何让微信小程序快速接入七牛云
如果你确定用七牛运行小程序的话,给大家分享一个九折优惠码:61d1fd4d1 月 9 日 微信小程序正式发布,小程序终于揭开了它神秘的面纱,开发者对小程序的追捧更是热度不减.从小程序的热门应用场景来看 ...
随机推荐
- git忽略文件
.gitignore文件配置 ###################### # Project Specific ###################### /src/main/webapp/dis ...
- 从源码角度简单看StringBuilder和StringBuffer的异同
概述 StringBuilder和StringBuffer是两个容易混淆的概念,本文从源码入手,简单看二者的异同. 容易知道的是,这两者有一个是线程安全的,而且线程安全的那个效率低. java doc ...
- lua中怎么替换掉字符串中的$^特殊字符?
Lua 常规替换字符串如何替换 s = string.gsub("Lua is good", "good", "bad") print(s) ...
- SQL Server 修改AlwaysOn共享网络位置
标签:MSSQL/故障转移 概述 很多人一开始搭建Alwayson的时候对于共享网络位置的选择不是很重视, 导致后面需要去修改这个路径.但是怎样修改这个路径呢?貌似没有给出具体的修改选项,但是还是有地 ...
- 如何高效撤销Git管理的文件在各种状态下的更改
一.背景 企业中我们一般采用分布式版本管理工具git来进行版本管理,在团队协作的过程中,我们难免会遇到误操作,需要撤销更改的情况,那么我们怎么高效的进行撤销修改呢?对于还未提交到暂存区的代码怎么高效撤 ...
- C语言应用程序的内存图
1.综述 c语言应用程序加载到内存,这时它所占据的内存分为四个区,分别为栈Stack,堆Heap,静态存储区Static Area,代码存储区Code Area,这四个区分别放置应用程序的不同部分,从 ...
- SpringMVC 中配置 Swagger 插件.
一.简介 Swagger的目标是为REST API定义一个与语言无关的标准接口,允许用户发现和理解计算机服务的功能,而无需访问源代码.当通过Swagger正确定义时,用户可以用最少量的实现逻辑理解远程 ...
- android的ADK下载地址
把下面所有的包下载到temp目录下进行安装. 用代理http://ppdaili.com/https://dl-ssl.google.com/android/repository/repository ...
- Java 向下转型
1.Java 中父类直接向子类转型的不合法的,可以编译但运行时报错. Java中子类直接向父类转型 是合法的,但转型后,可以执行的方法仅限存在于父类中的,在执行时,先看子类的是否有定义,有就执行,没有 ...
- 从一个word文件中读取所有的表格和标题(2)
上一篇文章主要讲了从word底层xml中获取表格和标题的方法,但是存在一个问题:word文件必须是docx格式的.如果为doc格式的,可以有两种解决方案: 一.把doc文件转换成docx格式文件,用上 ...