- 需求的场景描述(希望解决的问题)
小程序客服消息推送,实现自动回复功能
POST xml数据到微信服务器后返回40003的错误
所以是我传的xml格式有问题,还是touser这个参数有问题,touser有问题的话,这个参数值要从哪里获取
- 希望提供的能力
以下是用户点击小程序按钮进入客服界面后,我的服务器收到的信息:
<xml><ToUserName><![CDATA[xxxxxxxxxxxxxxx]]></ToUserName>
<FromUserName><![CDATA[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]]></FromUserName>
<CreateTime>1548120142</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[user_enter_tempsession]]></Event>
<SessionFrom><![CDATA[来哩ho小程序]]></SessionFrom>
</xml>
以下是我服务器收到信息后作出的处理(部分代码):
$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" . $access_token;
用我服务器收到的FromUserName作为touser的参数值:
$fromUsername = $object->FromUserName; //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
$xmlData = "<xml><touser><![CDATA[".$fromUsername."]]></touser>
<msgtype><![CDATA[text]]></msgtype>
<content><![CDATA[halo u]]></content>
</xml>";
$header[] = "Content-type: text/xml";
$ch = curl_init ($url);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_HTTPHEADER,$header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, $xmlData);
$response = curl_exec($ch);
if(curl_errno($ch)){
printcurl_error($ch);
}
curl_close($ch);
以下是返回的错误:
{"errcode":40003,"errmsg":"invalid openid hint: [QuAtaA01434104]"}
官方的报错误导人 事实上需要在http请求明确发送的是字符串格式的json内容就可以了
一般都是错在这里
并不是用错了其他号的access_token 和 openid有误
我确实是access_token 搞错了,换过来就好了
可能是有两种问题:1. 用错了其他号的access_token 2. openid有误
这里要注意一个appid下的openid,在另一个appid里是无意义的。
如果还有问题,可以给出调用出错所用的access_token和openid,这边帮忙检查下。
这是调用了哪个接口?
看下是不是对应的openid的token使用错了
access_token是用小程序的appid和appSecret 生成的:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=xxxxx&&secret=xxxxxxxxxxxxxxx