微信公众号第三方平台全网发布问题(公众号登录授权)

ZuoLingZuoTa 2015-03-17 11:17:00
有没有做过微信公众号第三方平台开发的?

还在公测阶段,在开发平台的时候遇到了一个问题,在此向各位请教一下:

在平台开发完成后需要全网接入检测,检测的时候微信平台会发送一个XML过来,然后开发的平台需要以指定的格式回应,具体文档如下:
1、模拟粉丝触发专用测试公众号的事件,并推送事件消息到专用测试公众号,第三方平台方开发者需要提取推送XML信息中的event_type值,并在5秒内立即返回按照下述要求组装的文本消息给粉丝。

1)微信推送给第三方平台方: 事件XML内容(与普通公众号接收到的信息是一样的)

2)服务方开发者在5秒内回应文本消息并最终触达到粉丝:文本消息的XML中Content字段的内容必须组装为为:event_type + “from_callback”(假定event_type为5,则Content为: 5from_callback)


在发布的时候,微信后台推送过来的XML如下:
<xml><ToUserName><![CDATA[gh_3c884a361561]]></ToUserName> <FromUserName><![CDATA[ozy4qt1eDxSxzCr0aNT0mXCWfrDE]]></FromUserName> <CreateTime>1426561271</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[LOCATION]]></Event> <Latitude>111.000000</Latitude> <Longitude>222.000000</Longitude> <Precision>333.000000</Precision> </xml>

我回复的XML如下:
<xml><ToUserName><![CDATA[ozy4qt1eDxSxzCr0aNT0mXCWfrDE]]></ToUserName><FromUserName><![CDATA[gh_3c884a361561]]></FromUserName><CreateTime>1426561271</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[LOCATIONfrom_callback]]></Content><FuncFlag>0</FuncFlag></xml>

但是一直提示失败:

不明白到底是哪里错了,求帮助。
...全文
43645 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
mingdong88 2017-11-02
  • 打赏
  • 举报
回复
有无源码啊,哪位大神给提供下
大海008 2016-12-09
  • 打赏
  • 举报
回复
引用 24 楼 cs_993 的回复:
各位问题解决了吗? 请问我授权事件填写了正确的url,这个url直接echo 'success'; 为什么全网发布还是说ticket失败呢?
你ticket是怎么成功的,我也收不到数据
「已注销」 2016-11-01
  • 打赏
  • 举报
回复
ZuoLingZuoTa 2016-06-03
  • 打赏
  • 举报
回复
不好意思,去年发的帖子,开始没人回复,后来问题解决了忘了回来看了。 解决方法是我没改代码,因为代码没问题,我跟给腾讯发了邮件说明了这个问题,后来就莫名其妙好了,不知道是不是他们修改了接口。
superjackson 2016-04-07
  • 打赏
  • 举报
回复


很多人都QQ问我上述问题, 现在做统一答复, 由于微信文档阐述确实存在一些误导, 其实自始至终都是用客服API接口回复消息,现详细答复上述问题解决思路如下:(如有错误欢迎指正)

1. 10min钟后 请缓存腾讯每10mins发送的ticket
2. ticket componentAppid和componentAppsecret都是已知的 就能获取 componentAccessToken
3. 全网发布测试步骤中, 有一步会腾讯测试案例将测试公共号授权给你的第三方, (腾讯要求你给一个全网发布的授权URL, 就是此处用的),这样你的授权逻辑就会被腾讯测试案例调用(大致流程:获取componentAccessToken--> preCode—>code—>authurizationInfo(其中包含AccessToken、refreshAccessToken 和公众号权限信息等))
4. 有了公众号appid(authorizerAppid, 以下简称appid)和AccessToken 就可以在收到普通消息和事件时,可以根据 appid + 缓存的AccessToken(如果失效根据refreshAccessToken等信息获取最新的AccessToken) 调用客服接口异步回复消息和事件

PS:
1.客户API是https, 不需要你额外加密
2.报文格式请查阅微信第三方平台文档
3. 注意区分componentAccessToken 和AccessToken componentAppid和authorizerAppid的含义
qiufeng2983 2016-02-02
  • 打赏
  • 举报
回复
嗯 我的搞好了 困扰几天了终于搞好了 问题是这样解决的 发现有点坑爹 他这两个接口要求的code取值不一样 第三方平台方拿到$query_auth_code$的值后,通过接口文档页中的“使用授权码换取公众号的授权信息”API,将$query_auth_code$的值赋值给API所需的参数authorization_code。 上面这段话的接口 要使用xml解析出来的 我是这样做的 PHP code $AuthorizationCode = $xml->getElementsByTagName('AuthorizationCode')->item(0)->nodeValue; 把这个获取到的code传到API接口上 然后,调用发送客服消息api回复文本消息给粉丝,其中文本消息的content字段设为:$query_auth_code$_from_api(其中$query_auth_code$需要替换成推送过来的query_auth_code) 然后这个客服的code呢 就使用他 说的这个方法去截取 PHP code trim(str_replace("QUERY_AUTH_CODE:","",$rec_words)) 我是php代码写的 大家参考下 如果还是不明白 可以加我微信 qiufeng2983
qiufeng2983 2016-01-31
  • 打赏
  • 举报
回复
我是按照接口的方法来 赋值 code的 但是一直提示说code无效啊 {"errcode":61009,"errmsg":"code is invalid hint: [Bgh07a0370vr19]"}
qiufeng2983 2016-01-31
  • 打赏
  • 举报
回复
我是用PHP写的 获取code和赋值code也是按照接口来写的 code也有值 不知道为什么 一直提示code无效啊 {"errcode":61009,"errmsg":"code is invalid hint: [Bgh07a0370vr19]"}
bfmfvgadw112 2016-01-30
  • 打赏
  • 举报
回复
有大神知道这是怎么回事么{"errcode":61009,"errmsg":"code is invalid hint: [xIoCVA0808vr21]"} ,都不知道为什么了
lyfsiit1 2016-01-13
  • 打赏
  • 举报
回复
我全网审核成功 欢迎交流 qq 244146981
superjackson 2016-01-12
  • 打赏
  • 举报
回复
针对楼主的问题请看第一点,其他开放平台 公众平台问题欢迎加我QQ 304807481, 本人主张开源, 分享,免费交流。 【微信开发平台---全网发布文档地址】 https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419318611&token=&lang=zh_CN NODE实现(java同理) 1.【事件】模拟粉丝触发专用测试公众号的事件,并推送事件消息到专用测试公众号,第三方平台方开发者需要提取推送XML信息中的event值,并在5秒内立即返回按照下述要求组装的文本消息给粉丝。 全部处理代码: console.log("wechat event query:", req.query); logger.debug("wechat event: ", message); var text = message.Event + "from_callback"; logger.log("reply event:", text); //res.reply(""); 全网发布的时候,关键注意不要回复空串(这个比较挫, 跟正常开发时不一样, 相当于接受到事件不通过response回复, 通过api回复文本消息) var wechatApi = WechatAPIFactory.getWechatApi(appid); wechatApi.sendText(message.FromUserName, text, function (err, data) { if(err) { logger.error("事件消息发送失败! text: ", text, " err: ", err); } logger.debug("事件消息发送成功! data:", data); }); 2. 【立即回复普通文本消息】 模拟粉丝发送文本消息给专用测试公众号,第三方平台方需根据文本消息的内容进行相应的响应: 全部处理代码: console.log("wechat text query: ", req.query); logger.debug("wechat text: ", message); if (message.Content === "TESTCOMPONENT_MSG_TYPE_TEXT") { logger.debug("message.Content", message.Content); //本人封装根据授权方appid获取WechatAPI实例。底层实际调用的是开源项目 https://github.com/node-webot/wechat-api var wechatApi = WechatAPIFactory.getWechatApi(appid); var text = "TESTCOMPONENT_MSG_TYPE_TEXT_callback"; wechatApi.sendText(message.FromUserName, text, function (err, data) {//github上的开源项目wechat-api if(err) { logger.error("文本消息发送失败! text: ", text, " err: ", err); } logger.debug("文本消息发送成功! data:", data); }); //sendText 发出去的文本消息报文如下: //var url = this.prefix + 'message/custom/send?access_token=' + this.token.accessToken; //var data = { // "touser": openid, // "msgtype": "text", // "text": { // "content": text // } // }; } 3. 【异步回复普通文本消息】模拟粉丝发送文本消息给专用测试公众号,第三方平台方需在5秒内返回空串表明暂时不回复,然后再立即使用客服消息接口发送消息回复粉丝 全部处理代码: //1. 先直接回复空串 res.reply(""); //2.异步回复 //2.1文本消息中截取query_auth_code var authCode = message.Content.slice(message.Content.indexOf(":") + 1); if (authCode) { logger.debug("authCode: " + authCode); //2.2. 根据query_auth_code换取公众号授权信息 var queryAuth = Q.nbind(openApi.queryAuth, openApi); queryAuth(authCode).then(function (data) { logger.debug("queryAuth callback data:", data); //转换成驼峰的参数名 var authorizationInfo = util.convertToStandardJSON(data[0].authorization_info); logger.debug("authorization info :", authorizationInfo); //2.3. 将token存储到全局,跨进程、跨机器级别的全局,比如写到数据库、redis等 var accessToken = authorizationInfo.authorizerAccessToken; var expiresIn = authorizationInfo.expiresIn; openApi.saveAuthorizerToken(authorizationInfo.authorizerAppid, accessToken, expiresIn, function (err, data) { if (err) { logger.error("access token 保存redis失败!"); } logger.info("access token 保存redis成功!"); //2.4. 通过客户Api消息借口发送文本消息给粉丝 var wechatApi = WechatAPIFactory.getWechatApi(appid); var text = authCode + "_from_api"; wechatApi.sendText(message.FromUserName, text, function (err, data) { if(err) { logger.error("文本消息发送失败! text: ", text, " err: ", err); } logger.debug("文本消息发送成功! data:", data); }); }); //2.5. 保存refresh_token至redis redis.setValue... }).catch(function (err) { logger.error("使用授权码换取公众号的授权信息失败 err:" + err); return; }); } 3. 【接受component_verify_ticket】模拟推送component_verify_ticket给开发者,开发者需按要求回复(接收到后必须直接返回字符串success)。 全部处理代码: //1.保存COMPONENT_VERIFY_TICKET redis.setValue... //2.回复success res.reply(""); PS: reply不是response自带的方法是WechatApi自定义的。 底层实现如下: res.reply = function (content) { res.writeHead(200); // 响应success,用于响应慢的情况,避免微信重试 if (!content) { return res.end('success'); } };
qq_24683223 2016-01-11
  • 打赏
  • 举报
回复
哪个大神~大仙~帮我处理一下这个授权的问题啊~我一点也不懂~
qq_24683223 2016-01-11
  • 打赏
  • 举报
回复
哪个大神~大仙~帮我处理一下这个授权的问题啊~我一点也不懂~qq1184918800
xufeiyunwindows 2015-11-24
  • 打赏
  • 举报
回复
php接收ticket的返回数据问题解决。 困扰一周的问题终【[组件ticket正确接收] 失败】于解决掉了。 另外,每隔10分钟推送的ticket数据接收后的逻辑处理 与 全网发布接入检测说明中的#4模拟推送ticket数据接收后的逻辑处理 是一致的;都是要正确的返回success文本数据。 如果是用php代码,则返回success的方式,可以参考以下代码: (参考功能:http://php.net/manual/en/ref.outcontrol.php) 不要直接使用: echo("success"); die(); exit(); 而是参考使用以下方法: 【 if (ob_get_level() == 0) ob_start(); ob_implicit_flush(true); ob_clean(); header("Content-type: text/plain"); #log_msg(headers_list()); echo("success"); ob_flush(); flush(); ob_end_flush(); die(); exit(); 】
xufeiyunwindows 2015-11-20
  • 打赏
  • 举报
回复
@ qq_32518571 你的问题解决了没有啊?没有的话,发消息给我,我们这边解决了这个问题的。
qq_32518571 2015-11-12
  • 打赏
  • 举报
回复
各位问题都解决了吗??这边求解答,,新手菜鸟
qq_30511497 2015-10-29
  • 打赏
  • 举报
回复

各位大神,这个问题怎么解决,都好几天了,正常接收的都可以,就全网发布的时候不行。救命啊
cs_993 2015-10-26
  • 打赏
  • 举报
回复
各位问题解决了吗? 请问我授权事件填写了正确的url,这个url直接echo 'success'; 为什么全网发布还是说ticket失败呢?
phooker001 2015-10-23
  • 打赏
  • 举报
回复
phooker001 2015-10-23
  • 打赏
  • 举报
回复
全网发布通过不了一般集中在 返回API文本消息,返回普通文本消息,和发送事件消息上,若其他测试点报错,那你就还差很远,需要继续调整你的接口, 总结上面三个不通过的原因,1.回复的消息需要加密,2,主动(客服)发送消息和被动发送消息没搞清,3 返回API文本消息 这个需要调用授权公众号的授权信息这个接口,获取授权后的token后再做后面的操作, 最后说一下,这个微信测试是可以断点调试的。 如有不明白的可以发我邮箱咨询:qq53933112
加载更多回复(20)

7,765

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧