微信后台----公众号业务封装----WxMpService

微信公众号API的Service.用来请求微信服务器。
interface: WxMpService。
实现类:BaseWxMpServiceImpl

1.对应请求地址url-------主动请求

 /**
   *1. 获取access_token.
   */
  String GET_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s";
  /**
   *2. 获得各种类型的ticket.
   */
  String GET_TICKET_URL = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=";
  /**
   *3. 长链接转短链接接口.
   */
  String SHORTURL_API_URL = "https://api.weixin.qq.com/cgi-bin/shorturl";
  /**
   *4. 语义查询接口.
   */
  String SEMANTIC_SEMPROXY_SEARCH_URL = "https://api.weixin.qq.com/semantic/semproxy/search";
  /**
   *5. 用code换取oauth2的access token.
   */
  String OAUTH2_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code";
  /**
   *6. 刷新oauth2的access token.
   */
  String OAUTH2_REFRESH_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=%s&grant_type=refresh_token&refresh_token=%s";
  /**
   *7. 用oauth2获取用户信息.
   */
  String OAUTH2_USERINFO_URL = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=%s";
  /**
   *8. 验证oauth2的access token是否有效.
   */
  String OAUTH2_VALIDATE_TOKEN_URL = "https://api.weixin.qq.com/sns/auth?access_token=%s&openid=%s";
  /**
   *9. 获取微信服务器IP地址.
   */
  String GET_CALLBACK_IP_URL = "https://api.weixin.qq.com/cgi-bin/getcallbackip";
  /**
   *10. 第三方使用网站应用授权登录的url.
   */
  String QRCONNECT_URL = "https://open.weixin.qq.com/connect/qrconnect?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s#wechat_redirect";
  /**
   *11. oauth2授权的url连接.
   */
  String CONNECT_OAUTH2_AUTHORIZE_URL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s&connect_redirect=1#wechat_redirect";

  /**
   *12. 获取公众号的自动回复规则.
   */
  String GET_CURRENT_AUTOREPLY_INFO_URL = "https://api.weixin.qq.com/cgi-bin/get_current_autoreply_info";

  /**
   * 13.公众号调用或第三方平台帮公众号调用对公众号的所有api调用(包括第三方帮其调用)次数进行清零.
   */
  String CLEAR_QUOTA_URL = "https://api.weixin.qq.com/cgi-bin/clear_quota";

2. 服务端提供验证  -------  验证消息的确来自微信服务器

  • 主动向微信发起请求的,用httpclient4包装生成。
  • 作为服务端接收微信请求的,用springmvc-contorller包装生成。

3.针对该接口中的方法梳理和分析

3.1 微信验证签名信息---GET

开发者校验signature(下面有校验方式,确认此次GET请求来自微信服务器)。若,请原样返回echostr参数内容,则接入生效,成为开发者成功(返回微信服务器echostr),否则接入失败。加密/校验流程如下:1)将token、timestamp、nonce三个参数进行字典序排序 2)将三个参数字符串拼接成一个字符串进行sha1加密 3)开发者获得加密后的字符串可与signature对比。

参数 描述
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串
//验证消息的确来自微信服务器.
boolean checkSignature(String timestamp, String nonce, String signature);

3.2 获取access_token---GET

   access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。

https请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET


//强制刷新从微信服务器获取,false则从内存中获取
String getAccessToken(boolean forceRefresh) throws WxErrorException;

3.3 获取微信服务器IP地址---GET

    如果公众号基于安全等考虑,需要获知微信服务器的IP地址列表,以便进行相关限制,可以通过该接口获得微信服务器IP地址列表或者IP网段信息。

http请求方式: GET
https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=ACCESS_TOKEN
  
String[] getCallbackIP() throws WxErrorException;

4.微信网页授权

  用户在微信客户端中访问第三方网页,授权获取用户基本信息。

  scope=snsapi_base   获取进入页面的用户的openid的。静默授权。

  scope=snsapi_userinfo  是用来获取用户的基本信息的。用户手动同意。

   具体而言,网页授权流程分为四步:

     1、引导用户进入授权页面同意授权,获取code 
       //一般挂载到菜单按钮上
        String CONNECT_OAUTH2_AUTHORIZE_URL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s&connect_redirect=1#wechat_redirect";

     2、通过code换取网页授权access_token(与基础支持中的access_token不同) 
       
        String OAUTH2_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code";

     3、如果需要,开发者可以刷新网页授权access_token,避免过期 

     4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制) 
  
        String OAUTH2_USERINFO_URL = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=%s";

授权方法作为wxService的接口方法

//构造oauth2授权的url连接
//一般挂载到菜单按钮上,用户进行点击确定,设置回调页面 ip:应用/greet
String oauth2buildAuthorizationUrl(String redirectURI, String scope, String state);

//用code换取oauth2的access token.
WxMpOAuth2AccessToken oauth2getAccessToken(String code) throws WxErrorException;

//刷新oauth2的access token.
WxMpOAuth2AccessToken oauth2refreshAccessToken(String refreshToken) throws WxErrorException;

//用oauth2获取用户信息, 当前面引导授权时的scope是snsapi_userinfo的时候才可以.
  WxMpUser oauth2getUserInfo(WxMpOAuth2AccessToken oAuth2AccessToken, String lang) throws WxErrorException;

//验证oauth2的access token是否有效.
boolean oauth2validateAccessToken(WxMpOAuth2AccessToken oAuth2AccessToken);

5.微信客服

5.1普通微信用户向公众号发消息时,微信服务器会先将消息POST到开发者填写的url上, 如果希望将消息转发到客服系统,开发者在响应包中返回MsgType为transfer_customer_service的消息,微信服务器收到响应后会把当次发送的消息转发至客服系统。

//当用户输入关键词如“你好”,“客服”等,并且有客服在线时,把消息转发给在线客服

    if (StringUtils.startsWithAny(wxMessage.getContent(), "你好", "客服")
                && weixinService.getKefuService().kfOnlineList()
                .getKfOnlineList().size() > 0) {
                return WxMpXmlOutMessage.TRANSFER_CUSTOMER_SERVICE()
                    .fromUser(wxMessage.getToUser())
                    .toUser(wxMessage.getFromUser()).build();
     }


//获取在线客服接待信息
WxMpKfOnlineList kfOnlineList() throws WxErrorException;

//接口:
String GET_ONLINE_KF_LIST = "https://api.weixin.qq.com/cgi-bin/customservice/getonlinekflist"

5.2用户被客服接入以后,客服关闭会话以前,处于会话过程中时,用户发送的消息均会被直接转发至客服系统。当会话超过30分钟客服没有关闭时,微信服务器会自动停止转发至客服,而将消息恢复发送至开发者填写的url上。

5.3用户在等待队列中时,用户发送的消息仍然会被推送至开发者填写的url上。

 

 


 

你可能感兴趣的:(微信后台)