微信小程序授权accessToken配置引导

说明

背景

完成AccessToken相关配置,才可以发送小程序订阅通知。该接口需要实现下述功能:

1、获取微信小程序的accessToken,入参设置了本次请求是否刷新token,请确保该token的可用性。

2、连通性测试,QA在配置后会进行一次连通性测试,不会传入wxAppId(微信小程序的AppId,详见接口文档),请返回正确即可(code为200、token为空即可)。

参数说明

参数名称

参数解释

备注

URL地址

填写客户侧获取微信token的地址

接口开发方提供该接口,需实现上述功能。

APP ID

验签使用的参数

请和接口开发方约定好APPID,在这里填写即可

AccessKey

验签使用的参数

请和接口开发方约定好AccessKey,在这里填写即可

SecretKey

验签使用的参数

请和接口开发方约定好SecretKey,在这里填写即可

一、接口文档

接口描述

查询微信小程序AccessToken

URL

${第三方填的地址}?appId=aaa&accessKey=xxx&timestamp=yyy

请求方式

POST

请求类型

application/json

返回类型

*/*

参数名

数据类型

参数类型

是否必填

说明

1.wxAppId

string

body

微信小程序appId

2.refresh

boolean

body

是否需要刷新token,默认false

状态码

描述

说明

200

OK

请求成功。

401

Unauthorized

请求未经授权。

403

Forbidden

请求被拒绝。

404

Not Found

请求的资源不存在。

返回属性名

类型

说明

1.code

string

请求状态码,200或OK表示成功。

2.message

string

错误信息

3.accessToken

string

微信小程序的accesToken

4.expireTime

DateTime

过期时间。格式

4.requestId

string

请求ID。

示例

请求参数

http://{获取token的Url}?appId=aaa&accessKey=xxx&timestamp=yyy

返回值

{"code":"200","requestId":"string","message":"string","accessToken":"xxxx","expireTime":"2024-09-10 00:00:00"}

二、验签说明

QA会根据下面方式生成签名,如果需要,请三方根据此方法验证签名

QA在请求的接口路径上会带上 appId, accessKey, timestamp(时间戳参数),并且需要在header中加入签名Authorization。

公共参数说明

参数

说明

位置

appId

开放平台的应用id

请求URI中的参数部分

accessKey

开放平台的应用的ak

请求URI中的参数部分

timestamp

当前时间戳(毫秒)

请求URI中的参数部分

Authorization

生成的签名

请求的header中

签名生成规则:

  • 使用请求参数构造规范化的请求字符串(Canonicalized Query String)

  • 按照参数名称的字典顺序对请求中所有的请求参数(包括文档中描述的“公共请求参数”和给定了的请求接口的自定义参数)进行排序。 注:当使用GET方法提交请求时,这些参数就是请求URI中的参数部分(即URI中"?"之后由"&"连接的部分)

  • 名称和值要使用UTF-8字符集进行URL编码。

代码示例

其中签名的生成逻辑如下 java代码示例:

String appId="tttt";
String accessKey = "xxxx";
String accessSecret ="yyyy";
String timeStamp = "1708235644862";

SortedMap<String, String> map = new TreeMap<>();
map.put("appId", appId);
map.put("accessKey", accessKey);
map.put("accessSecret",accessSecret );
map.put("timestamp", timeStamp);
//如果是get请求,还有其他的query参数,那么继续加

String aa = getCanonicalQueryString(map);
System.out.println(aa);
String authorization = org.apache.commons.codec.digest.DigestUtils.md5Hex(aa);
System.out.println(authorization);
public static String getCanonicalQueryString(SortedMap<String, String> paramsMap) {
        StringBuilder queryString = new StringBuilder();
        boolean isFirstParameter = true;

        for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
            String paramName = entry.getKey();
            String value = entry.getValue();

            if (!isFirstParameter) {
                queryString.append("&");
            } else {
                isFirstParameter = false;
            }
            queryString.append(paramName).append("=").append(value);
        }
        return queryString.toString();
}

示例如下:

curl --location -g --request POST 'http://{配置的获取token的Url}?appId=aaa&accessKey=xxx&timestamp=yyy' \
--header 'Authorization: demosign'

三、异常码说明

异常code

说明

ES05910010001

APP不存在

请确认在开放平台创建的APP是否存在

ES05910010002

签名不正确

请确认生成签名的方式是否正确

ES05910010003

时间戳校验不通过

生成的时间戳需要在3分钟内调用,否则校验不通过

ES05910010004

应用没有当前接口权限

应用需要订阅接口api才可以使用

ES05910010005

检查appId, accessKey, timestamp 传参是否正确

开放平台的接口,公共参数appId, accessKey, timestamp必须传,且按照平台的规范