首先说一下我做到哪一步了:
1. 我在微信公众平台(小程序)那已启用消息推送,推送的格式就是xml,且消息服务器已通过。
2. 我自己试验,在小程序端客服会话中发言,在消息服务器上打印Log,是有POST请求过来的。
3. 响应“success”,是有效的。
好的,接下来,问题来了:
我在响应包中返回 MsgType 为 transfer_customer_service 的消息时,却显示“该小程序暂时无法提供服务,请稍后再试”,很明显,微信服务器不认我这个响应包。我查了一下LOG,请求是这样的:
<xml>
<ToUserName><![CDATA[ob9Z65TybSpWrCSdd8PQl_FwOMQ8]]></ToUserName>
<FromUserName><![CDATA[wxcf79daa9a7024018]]></FromUserName>
<CreateTime>1527747481</CreateTime>
<MsgType><![CDATA[transfer_customer_service]]></MsgType>
</xml>
我自己的分析是这样的:
- 响应“success”
的时候是没问题的,也就是说微信端跟我的消息服务器之间的通信是OK的。
- 在响应包中返回 MsgType 为 transfer_customer_service 的消息时报错,表示微信那边不认这个响应的结果。聊天窗口显示‘该小程序客服暂时无法提供服务,请稍后再试’。
这到底是什么情况呢?
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[transfer_customer_service]]></MsgType>
</xml>";$textTpl = sprintf ( $textTpl, $FromUserName_i->item(0)->nodeValue, $ToUserName_i->item(0)->nodeValue, time() );
$return_errCode = $pc->encryptMsg($textTpl, $timestamp, $nonce, $encryptMsg_now);
nonce和timestamp都是微信get过来的数据,加密结果$return_errCode返回的也是0.但是就是不成功