微信小程序客服后台开发,无法收到微信后台发来的消息?

时间:2024-04-01 15:24:46

前言

最近做了一个微信客服的后台(基于Springboot),需要自动回复用户的消息,但是,其中遇到有些坑,这里稍微讲一下(前提你已经在小程序的后台配置了相关的参数,如图1)

微信小程序客服后台开发,无法收到微信后台发来的消息?

                                                                       图1

后台接口

1.获取access_token

根据微信后台文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/getAccessToken.html

文档里说,不能经常获取,否则就要出错,因此,这里设置定时任务,每一个小时去获取一次。在Springboot中可以使用@Scheduled(fixedDelay = 60 * 60 * 1000)这个注解来实现定时任务,这里代码就略过了

2.接口

这里其实配置两个接口来和微信进行通信,1,验证你的服务器地址URL,就是需要在图1,请求方式是GET,具体的可以看微信的文档;2,接收用户发来的消息,其实地址也是图1中的URL是一样的,只是这个请求方式是POST,见代码

/**
 * @author helang
 */
@RestController
public class WxTestController {

    /**
     * 接收微信后台发来的用户消息
     * @return
     */
    @RequestMapping(value = "wx/message", method = RequestMethod.POST)
    @ResponseBody
    public String receiveMessage(@RequestBody Map<String, Object> msg) {
        //token
        sendMsToCustomer("token",msg.get("FromUserName").toString());
        return "success";
    }

    /**
     * 微信校验后台服务器
     * 需要做一些sha1等判断后,如果相同的话,直接返回echostr,
     * 这里代码略过,直接返回echostr
     * @return
     */
    @RequestMapping(value = "wx/message", method = RequestMethod.GET)
    @ResponseBody
    public String checkValid(String signature, long timestamp, String nonce, String echostr) {

        return echostr;
    }

    /**
     * 发送消息给用户
     * @param fromUserName 用户的openId
     */
    private void sendMsToCustomer(String access_token, String fromUserName) {

        RestTemplate restTemplate = new RestTemplate();
        String messageJson = "";//
        //access_token
        String result = restTemplate.postForEntity("https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=xxxxxx",
                messageJson, String.class).getBody();
    }
}

 

问题

如上图的接收消息的接口receiveMessage(),当我使用@RequestBody  Bean的时候,始终无法接收到消息,微信后台配置的是JSON格式的交互啊,难道我哪里错了?由于配置的是线上服务器,我这边抓包是很困难的,一直无法查清楚微信给发来的http请求的内容是什么,导致困扰了一两天。功夫不负有心人,我多方尝试,那个参数类型,将它从Bean改为map后,终于可以收到微信发来的消息内容了

总结

这个微信后台开发,只要按照微信官方文档来做,其实是很简单的。遇到这个参数问题,能够抓包看,就抓包,当不能抓包的时候,多多尝试其他方法