频道栏目
首页 > 资讯 > 微信公众平台开发 > 正文

微信第三方平台开发经验总结(七):发送客服消息

17-08-24        来源:[db:作者]  
收藏   我要投稿

微信第三方平台开发经验总结(七):发送客服消息。

当用户和公众号产生特定动作的交互时(具体动作列表请见下方说明),微信将会把消息数据推送给开发者,开发者可以在一段时间内(目前修改为48小时)调用客服接口,通过POST一个JSON数据包来发送消息给普通用户。

客服接口-发消息

接口调用请求说明

http请求方式: POST
https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN

各消息类型所需的JSON数据包如下:

发送文本消息

{

"touser":"OPENID",

"msgtype":"text",

"text":

{

"content":"HelloWorld"

}

}

发送客服文本消息

@Override

public String sendServiceMsg(String authorizerAppid, String touser, String content) {

JSONObject text = new JSONObject();

text.accumulate("content",content);

JSONObject json = new JSONObject();

json.accumulate("touser",touser);

json.accumulate("msgtype","text");

json.accumulate("text",text);

String url = ThirdPartyConfig.CUSTOM_SEND_URL.replace("{authorizer_access_token}",thirdPartyService.getAuthorizerToken(authorizerAppid));

String retStr = HttpsUtil.postHtpps(url,json.toString());

logger.info("ThirdPartyServiceImpl:sendText:retStr={}",retStr);

return retStr;

}
 

thirdPartyService.getAuthorizerToken(authorizerAppid)

因为authorizer_access_token是有时限的,所以每次调用的时候都有可能需要重新到微信请求

这个时候就需要用到authorizer_appid

5、获取(刷新)授权公众号或小程序的接口调用凭据(令牌)

该API用于在授权方令牌(authorizer_access_token)失效时,可用刷新令牌(authorizer_refresh_token)获取新的令牌。请注意,此处token是2小时刷新一次,开发者需要自行进行token的缓存,避免token的获取次数达到每日的限定额度。缓存方法可以参考:http://mp.weixin.qq.com/wiki/2/88b2bf1265a707c031e51f26ca5e6512.html

接口调用请求说明

http请求方式: POST(请使用https协议)
https:// api.weixin.qq.com /cgi-bin/component/api_authorizer_token?component_access_token=xxxxx

POST数据示例:

{
"component_appid":"appid_value",
"authorizer_appid":"auth_appid_value",
"authorizer_refresh_token":"refresh_token_value",
}

请求参数说明
参数 说明
component_appid 第三方平台appid
authorizer_appid 授权方appid
authorizer_refresh_token 授权方的刷新令牌,刷新令牌主要用于第三方平台获取和刷新已授权用户的access_token,只会在授权时刻提供,请妥善保存。一旦丢失,只能让用户重新授权,才能再次拿到新的刷新令牌
返回结果示例

{
"authorizer_access_token": "aaUl5s6kAByLwgV0BhXNuIFFUqfrR8vTATsoSHukcIGqJgrc4KmMJ-JlKoC_-NKCLBvuU1cWPv4vDcLN8Z0pn5I45mpATruU0b51hzeT1f8",
"expires_in": 7200,
"authorizer_refresh_token": "BstnRqgTJBXb9N2aJq6L5hzfJwP406tpfahQeLNxX0w"
}

结果参数说明
参数 说明
authorizer_access_token 授权方令牌
expires_in 有效期,为2小时
authorizer_refresh_token 刷新令牌
 

@Override

public String getAuthorizerToken(String appid) {

/**如果令牌未过期,直接返回*/

if (authorizerDBService.existsAccessToken(appid)){

return authorizerDBService.getAccessToken(appid);

}

String componentAccessToken = getComponentAccessToken();

logger.info("ThirdPartyServiceImpl:getAuthorizerToken:componentAccessToken={}",componentAccessToken);

/**替换Url中的{component_access_token}*/

String url = ThirdPartyConfig.REFRESH_AUTHORIZER_TOKEN_URL.replace("{component_access_token}",componentAccessToken);

logger.info("ThirdPartyServiceImpl:getAuthorizerToken:url={}",url);

JSONObject json = new JSONObject();

json.accumulate("component_appid",ThirdPartyConfig.APP_ID);

json.accumulate("authorizer_appid",appid);

json.accumulate("authorizer_refresh_token",authorizerDBService.getRefreshToken(appid));

/**发送Https请求到微信*/

String retStr = HttpsUtil.postHtpps(url,json.toString());

logger.info("ThirdPartyServiceImpl:getPreAuthCode:retStr={}",retStr);

JSONObject resultJson = JSONObject.fromObject(retStr);

/**在返回结果中获取信息*/

String authorizerAccessToken = resultJson.getString("authorizer_access_token");

logger.info("queryAuth:authorizer_access_token={}",authorizerAccessToken);

/**保存到redis中*/

authorizerDBService.setexAccessToken(appid, authorizerAccessToken,ThirdPartyConfig.TWO_HOUR);

return authorizerAccessToken;

相关TAG标签
上一篇:网易考拉发布生活进化白皮书
下一篇:亚马逊要帮初创公司把产品卖到全球去
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站