Java实现微信公众号客服功能

微信公众平台设置

  1. 生产环境 公众号 设置
    【开发】–> 【基本配置】–> 【服务器配置】

    注:
    a、服务器地址(URL) 是开发者用来接收微信消息和事件的接口URL。
    b、令牌(Token) 是自定义的。

  2. 测试环境 公众号 设置 (用于本地环境测试)
    【开发】 -->【开发者工具】–> 【公众平台测试账号】


    登录之后,在【接口配置信息】处配置URL

    注: 生产环境公众号的服务器地址就是测试账号 接口配置信息 的URL。

Java 代码

注: 用户发送消息给微信公众号时,微信会Get请求上面设置的服务器地址,并传递四个参数:signaturetimestampnonceechostr
这几个参数是用来验证请求是否来源于微信。

代码如下:

  1. interface类
public interface WechatServiceI {/*** token验证* @param signature* @param timestamp* @param nonce* @return*/boolean checkSignature(String signature,String timestamp,String nonce);}
  1. 实现类
@Service("wechatService")
public class WechatServiceImpl implements WechatServiceI {@Overridepublic boolean checkSignature(String signature,String timestamp,String nonce) {return WechatUtil.checkSignature(signature,timestamp,nonce);}}
  1. WechatUtil类
public class WechatUtil {private static final String TOKEN = "自定义";public static boolean checkSignature(String signature, String timestamp, String nonce){String [] arr = new String[]{TOKEN,timestamp,nonce};// 将token、timestamp、nonce三个参数进行字典序排序Arrays.sort(arr);StringBuilder content = new StringBuilder();for (int i = 0; i < arr.length; i++){content.append(arr[i]);}MessageDigest digest = null;String tempStr = null;try {digest = MessageDigest.getInstance("SHA-1");// 将三个参数字符串拼接成一个字符串进行sha1加密byte [] str = digest.digest(content.toString().getBytes());tempStr = byteToHex(str);}catch (NoSuchAlgorithmException e){e.printStackTrace();}// 将sha1加密后的字符串可与signature对比,标识该请求来源于微信return tempStr != null ? tempStr.equals(signature) : false;}private static String byteToHex(final byte[] hash){Formatter formatter = new Formatter();for (byte b : hash){formatter.format("%02x",b);}String result = formatter.toString();formatter.close();return result;}}
  1. Controller
@Controller
@RequestMapping("/wechatService")
public class WechatController extends BaseController {private static final Logger logger = Logger.getLogger(WechatController.class);@Autowiredprivate WechatServiceI wechatService;@RequestMapping(value = "/checkToken",method = RequestMethod.GET)public void checkToken(HttpServletRequest request, HttpServletResponse response){boolean isGet = request.getMethod().toLowerCase().equals("get");if(isGet){//微信加密签名String signature = request.getParameter("signature");// 时间戳String timestamp = request.getParameter("timestamp");// 随机数String nonce = request.getParameter("nonce");// 随机字符串String echostr = request.getParameter("echostr");// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败if(null != signature && wechatService.checkSignature(signature,timestamp,nonce)){try {PrintWriter printWriter = response.getWriter();printWriter.write(echostr);printWriter.flush();}catch (Exception e){logger.error("微信消息接收和token验证异常", e);}}}}}

将本地项目地址映射到公网

这里我建议大家使用natapp,免费的。

  1. 注册账号
  2. 下载
  3. 登录,申请免费隧道

  4. 在 【我的隧道】 配置

  5. 双击 natapp.exe

    执行命令:natapp -authtoken authtoken码
    authtoken码在【我的隧道】复制出来就好了。
    这样表示映射到公网了:

将整个路径配置到微信公众平台

我这里的全路径是:http://ffhrug.natappfree.cc/wechatService/checkToken.do

你们按照自己的路径配置就好。最最最重要的一点,这个地址必须是免登录的,不能被框架拦截跳转去登录页面,在springmvc拦截器配置一下。

测试

【点击提交】

成功进入断点

实现用户消息转发给客服

流程:
a、用户发送消息给微信公众号
b、微信公众号接收消息,并通过Post方式请求【服务器配置】中配置的URL,并将参数通过服务器方式传递过去
c、将消息分配给在线的客服,msgType 设置为 “transfer_customer_service” 时,微信会自动帮你推送给在线客服,在线客服在客服平台接入之后,即可回复用户。
代码:
Controller

实体类:@XStreamCDATA注解是自定义的
接收用户消息类
回复用户消息类

注解类

创建XStreamFactory类,用于将对象转为 xml字符串,或者将xml字符串转为对象。

Util类

效果:

Java实现微信公众号客服功能和本地联调相关推荐

  1. 微信公众号客服功能如何开通?

    微信公众号客服功能如何使用,很多人想要通过公众号推广自己的产品,但是不知道该如何使用客服功能,其实很简单,在公众号后台就可以设置 首先登陆微信公众号进入公众号后台 然后点击"添加功能插件&q ...

  2. 在微信公众号里的web商城嵌入客服_微信公众号客服功能如何在手机上使用?

    微信公众号官方提供了免费的多客服功能,但是由于官方的客服功能只有PC版,并且没有实时的客服消息通知,这就导致下班后无法提供客服服务,给客户不好的体验. 另外,还有些小企业,由于没有专职的客服人员,没办 ...

  3. 接入微信公众号客服功能

    公众号客服包括PC版客服系统和手机版客服系统 一.PC版 1.登录公众号-->新的功能-->广告与服务-->客服,选择开通.我已经开通过了,所以在广告与服务里直接就有客服了 选择添加 ...

  4. 自助微信公众号客服提醒功能开发的实现

    本周我公司的技术人员做了一个有技术含量的一个新功能:客服功能.此功能主要用于微信公众号客服提醒,比如客户的商家认证审核通过,用户购买商品成功等功能提醒,可以有效减少网站项目开发所必要的资金节约. 1. ...

  5. 最全的java对接微信小程序客服功能实现(包含自动回复文本消息、图片消息,进入人工客服)

    java对接微信小程序客服功能实现(包含自动回复文本消息.图片消息,进入人工客服) 第一步:请求校验(确认请求来自微信服务器) 代码如下: @ApiOperation(value = " 微 ...

  6. h5 修改title 微信_微信公众号客服消息不限次数推送如何设置?

    在公众平台发送客服消息,只能通过消息管理功能实现,仅支持一个个粉丝单独发送文本信息,如果想要实现更多功能效果,可以使用微号帮平台的48小时信息推送功能实现,或者通过公众号平台的接口编程开发实现功能,都 ...

  7. 微信公众号客服系统怎么生成能追踪效果的二维码?

    想要做好微信公众号的运营,专业的技能少不了,但是也要具有善于使用工具的能力,正所谓"工欲善其事必先利其器",一款好的客服系统,不但可以方便我们进行客户接待,还能帮助我们生分析公众号 ...

  8. 微信公众号客服系统怎么实现消息提醒,快速回复粉丝留言?

    很多做微信公众号运营的小编,都会有这样的工作经验吧,一上班就开始刷新微信公众号后台,看看有没有粉丝留言,然后这一天就开始了时不时打开后台页面看一下,即使这样还是免不了粉丝留言晚回或者漏回的情况发生,追 ...

  9. php 公众号指定人发消息,微信公众号客服接口给指定用户openid发送消息

    微信公众号客服接口给指定用户openid发送消息 2018-09-23 微信开发文档: 客服接口-发消息 接口调用请求说明 http请求方式: POSThttps://api.weixin.qq.co ...

最新文章

  1. 互联网流量太贵!新零售成创业新风口
  2. Android四大基本组件和生命周期的介绍
  3. java中InputStream和OutputStream的使用场景
  4. 中欧光伏“双反”案:何以平地起波澜?
  5. 8天学通MongoDB——第四天 索引操作
  6. Struts2框架学习之七:避免表单重复提交
  7. C++ 是一门难学易用的语言!
  8. 获取国内国外flink的mailing list技术支持
  9. jquery css事件编程 尺寸设置
  10. Java并发——线程中断学习
  11. php闭包查询作用,ThinkPHP5 闭包查询问题的探讨
  12. python编程教学软件-【掌控】mPython编程与教学软件平台汇总
  13. 安装sphinx的心得和错误处理
  14. 欢迎给吾博客评分:如果遇见且有帮助,请帮忙打分
  15. CoreData的用法
  16. BA无标度网络(三):网络生成
  17. 文曲星猜数字游戏java代码_Python版的文曲星猜数字游戏代码
  18. TopBase_Knowledge_Graph
  19. 《Speech and Language Processing》读书笔记——语法规则及其解析
  20. 北京大学计算机硕博连读5年,关于2018年北京大学硕博连读研究生选拔工作的通知-更新...

热门文章

  1. 关于蓝墨云班课,视频不能拖动,但想快速搞完的解决方法
  2. Git —— 4、团队协作机制及GitHub操作
  3. Kali安装谷歌拼音
  4. Nide.js安装配置
  5. ArcGIS面矢量挖洞
  6. RSTP快速生成树简介、RSTP与STP的区别、RSTP BPDU字段信息、RSTP角色与端口状态介绍、RSTP工作过程之P/A机制详细分解)
  7. 百度、快手、商汤、旷视等重磅嘉宾确认出席AI ProCon 2019,你还剩1天早鸟票特权!...
  8. python 估值模型_【中金固收·固收+】隐藏价值的角落:限售股AAP估值及Python实现方法(上)...
  9. ArcEngine符号化——文本符号
  10. Linux学习16 软件包和启动项管理