微信开发模式-真Token方案

优质
小牛编辑
137浏览
2023-12-01

1. 方案说明

1.1 方案简介

1)由于微信只允许一个中转服务和微信进行数据交互,所以,在此基础上,小能是无法直接和微信进行数据交互的。
而想在此场景下,企业公众微信接入小能在线客服系统,只能由中转服务和小能进行交互。
所有数据由中转服务在中间连接微信和小能,进行数据中转。小能定义此对接模式为复杂开发模式。

2)开发工作量:
上行消息,消息推送给小能方
下行消息,需集成方开发1个Token接口,小能访问此接口,中转服务返回与微信交互的真实Token 
Token URL

1.2 运行原理

上行消息:用户 ---- 微信 ---- 中转服务 ---- 小能

下行消息:小能 ---- 微信 ---- 用户

1.3 方案流程

如上图所示,流程如下:

1)用户在微信聊窗中发起咨询,消息发给微信

2)微信把消息POST发送出去,将消息中转至中转服务

3)中转服务将消息转发送给小能服务器;小能自行处理连接到客服,显示到客户端上

4)客服在客户端中回复消息,小能服务器把消息回复给微信

5)微信将消息主动推送给微信用户

2. 名词解释

1)中转服务:和微信对接交互的服务。以配置到微信公众平台开发模式下的服务器url和token为主。一般配置此选项的对象为两个,一个是第三方,如:微盟、丁香 园、微信海。另一个是企业自行对接微信,开发的管理后台。小能把第三方和自行开发的管理后台,统称为中转服务。

2)接口:双方交互数据的一种约定。根据微信开发文档的要求,所有数据交互均采用接口进行互动。当A方调用B方接口发起请求,传递数据,B方收到数据之后,要及时给A方返回响应。接口说明

3)XML与JSON:最新微信公众开发文档要求,微信往外给接收方发送消息采用XML格式发送消息。当接收方给微信推送消息服务,需采用json格式。

3. 各消息流运行流程细节

红色数字部分为开发任务

如上图所示,流程如下:(1-5为上行消息流程,6-12为下行消息流程)

1)用户发送文本消息给微信

2)微信将文本消息,以XML格式,发送至中转服务,微信发送的对象为:在微信公众后台 -- 开发模式基本信息项中,配置的服务器地址Url和Token的XML消息微信给出规范要求文档:接收普通消息规范文档

示例格式:

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>  //开发者微信号
<FromUserName><![CDATA[fromUser]]></FromUserName>  //发送方帐号(一个OpenID)
<CreateTime>1348831860</CreateTime>  //消息创建时间(整型)
<MsgType><![CDATA[text]]></MsgType>  //text
<Content><![CDATA[this is a test]]></Content>  //文本消息内容
<MsgId>1234567890123456</MsgId>  //消息id,64位整型
</xml>

3)当中转服务收到微信的xml消息,请及时返回给微信一个响应。避免微信在5秒内收不到响应,提醒用户,该公众号暂时无法提供服务。(此过程在没有对接小能就应该处理好,已经处理过的,可忽略) 详细解释说明文档参考:接收普通消息规范文档

4)中转服务,需在自己的后台,定义一个方法,把微信的XML,转发给小能。这个时候需要小能提供接收消息的接口:

小能服务器人工对话接口,正式地址URL:https://thirdparty.ntalker.com/wechat

注意事项:

A:http请求小能方式:POST

B:Content-type类型需指定为:text/xml

C:可参考小能提供的demo,开发接口文档(仅供参考,php和java语言)

5)小能收到中转服务的请求,解析xml数据,然后呈现到小能客户端,同时返回响应给中转服务。 (返回的响应是一个空)截止到第五步,上行消息全部通过。联调标准以小能客户端收到消息为主。

中转服务在上行消息和小能交互,只需做第4步开发(第3步属于中转服务和微信的交互)

6)小能请求Token接口

小能是把和小能交互的一方,当做微信,所以在小能的角度,把中转服务当做了微信。

根据微信的开发文档规范要求,请求一个接收消息接口,需加上access_token,而access_token是通过接口获取。

所以这里中转服务,需模拟微信开发一个Token接口,模拟小能获取微信token,用于数据交互。此Token用于文本、图片、语音的交互。Token接口规范文档

示例:

A:http请求方式: GET

B:正确举例(请勿加参数):

https://api.weixin.qq.com/cgi-bin/token

C:错误举例:

https://api.weixin.qq.com/cgi-bin/token?name=123

D:参数要求(小能访问token接口自动加的参数):

其中appid和secret,这里是模拟微信的要求,所以,此处的这两个值,是假值,并非真的appid和secret

参数是否必须说明
grant_type获取access_token填写client_credential
appid第三方用户唯一凭证
secret第三方用户唯一凭证密钥,即appsecret

7)小能请求中转服务模拟的Token接口,中转服务返回响应,返回格式要求:

{
    "access_token":"ACCESS_TOKEN",
    "expires_in":7200
}
参数说明
access_token获取到的凭证
expires_in凭证有效时间,单位:秒

由于Token接口,appid和secret都是模拟出来的假的,所以,返回的响应,也是按照微信的格式要求。

建议:

A:access_token为当前对应的微信号的真token(多个微信号可根据appid和secret来判断)

B:expires_in的值,并非固定的7200。凭证的有效时间可大可小,真token方案,建议低于7200,高于3600

8)小能取出access_token,发送消息给微信服务,微信会验证小能从中转服务的token接口,拿到的真token的合法性。(微信验证此token和微信自己库里面当前生效的token是否一致)

9)微信收到小能的文本消息,会返回响应给小能,返回信息格式如下:

{
     "errcode" : 0,
     "errmsg" : "ok",
}

10)微信把消息发送给用户

4. 客服端配置接口地址

4.1 选择"接入微信号"后,点击"开发模式"

4.2 填写:微信服务号名称、微信原始ID、微信APPID、AppSecret

4.3 填写接口地址URL

文本接收URL:https://api.weixin.qq.com/cgi-bin/message/custom/send

图片语音上传URL:https://api.weixin.qq.com/cgi-bin/media/upload

图片语音下载URL:https://api.weixin.qq.com/cgi-bin/media/get

Token URL:配置集成方开发的获取真实Token的URL地址

用户基本信息URL:https://api.weixin.qq.com/cgi-bin/user/info