# 目录
# 1. 业务流程
# 1.1 申请及获取二维码
# 1.2 用户扫描二维码
# 2. 接口
# 2.1 接口规则
# 2.2 申请二维码接口
# 2.3 查询二维码申请单接口
# 2.4 下载二维码包接口
# 2.5 激活二维码接口
# 2.6 查询二维码激活状态接口
# 2.7 CODE_TICKET换CODE接口
# 3.二维码包解密说明
# 3.1 解密说明
# 1. 业务流程
1.1申请及获取二维码
1.2用户扫描二维码
# 2. 接口
2.1接口规则
提交方式:采用POST方法提交。API调用凭证 accesstoken,参照说明:获取access_token。
数据格式:提交和返回数据JSON格式,数据格式如:
{
"field1":"data1",
"field2":"data2",
"int_field":123
}
字符编码:统一采用UTF-8字符编码。
2.2申请二维码接口
API:https://api.weixin.qq.com/intp/marketcode/applycode?access_token=ACCESSTOKEN
ACCESSTOKEN参见接口规则说明。
请求参数:
字段名 | 中文解释 | 类型 | 是否必填 | 备注 |
---|---|---|---|---|
code_count | 申请码的数量 | Uint64 | Y | ≥10000,≤20000000,10000的整数倍 |
isv_application_id | 外部单号 | String128 | Y | 相同isv_application_id视为同一申请单 |
返回参数:
字段名 | 中文解释 | 类型 | 是否必填 | 备注 |
---|---|---|---|---|
errcode | 返回状态码 | Int32 | Y | 0 |
errmsg | 错误提示 | String128 | N | 返回信息,如errcode不为0,则errmsg为错误信息 |
application_id | 申请单号 | Uint64 | Y | 无 |
入参示例:
{
"code_count":100000,
"isv_application_id":"testid124"
}
返回示例:
{
"errcode":0,
"errmsg":"ok",
"application_id":581865877
}
2.3 查询二维码申请单接口
API:https://api.weixin.qq.com/intp/marketcode/applycodequery?access_token=ACCESSTOKEN ACCESSTOKEN参见接口规则说明。请求参数:
字段名 | 中文解释 | 类型 | 是否必填 | 备注 |
---|---|---|---|---|
application_id | 申请单号 | Uint64 | Y | 无 |
isv_application_id | 外部单号 | String128 | Y | 相同isv_application_id视为同一申请单 |
返回参数:
字段名 | 中文解释 | 类型 | 是否必填 | 备注 |
---|---|---|---|---|
errcode | 返回状态码 | Int32 | Y | 0 |
errmsg | 错误提示 | String128 | N | 返回信息,如errcode不为0,则errmsg为错误信息 |
status | 申请单状态 | String128 | Y | INIT PROCESSING FINISH为可下载 |
isv_application_id | 外部单号 | String128 | Y | 无 |
application_id | 申请单号 | Uint64 | Y | 无 |
create_time | 创建时间 | Uint32 | Y | 无 |
update_time | 更新时间 | Uint32 | Y | 无 |
code_start | 开始位置 | Uint64 | Y | 包含,如0 |
code_end | 结束位置 | Uint64 | Y | 包含,如49999,上述0-49999为一个号码段 |
入参示例:
{
"application_id":"581865877"
}
返回示例:
{
"errcode": 0,
"errmsg": "ok",
"status": "FINISH",
"code_generate_list": [{
"code_start": 0,
"code_end": 49999
},{
"code_start": 50000,
"code_end": 99999
}]
}
2.4 下载二维码包接口
API:https://api.weixin.qq.com/intp/marketcode/applycodedownload?access_token=ACCESSTOKE ACCESSTOKEN参见接口规则说明。请求参数:
字段名 | 中文解释 | 类型 | 是否必填 | 备注 |
---|---|---|---|---|
application_id | 申请单号 | Uint64 | Y | 无 |
code_start | 开始位置 | Uint64 | Y | 来自查询二维码申请接口 |
code_end | 结束位置 | Uint64 | Y | 来自查询二维码申请接口 |
返回参数:
字段名 | 中文解释 | 类型 | 是否必填 | 备注 |
---|---|---|---|---|
errcode | 返回状态码 | Int32 | Y | 0 |
errmsg | 错误提示 | String128 | N | 返回信息,如errcode不为0,则errmsg为错误信息 |
buffer | 文件buffer | String128 | Y | 需要先base64 decode,再做解密操作(解密参见3.1) |
解密后的数据格式为:
a1 b1 c1 d1
a2 b2 c2 d2
即以 /n 换行,每行四个元素以 /t 分隔。
a为361字节的01点阵,用于支持生成19*19的微型码,0为白,1为黑,
b为原始码数据,最长9位,
c为该码在此次申请的索引位置,
d为28位字符,用于支持转为普通二维码。可生成码制2,纠错等级Q的二维码。
入参示例:
如下表示获取该申请单的0-49999这一段的码。
{
"application_id":581865877,
"code_start": 0,
"code_end": 49999
}
返回示例:
{
"errcode":0,
"errmsg":"ok",
"buffer": "ajfiwejfoiawjfijweofi"
}
2.5 激活二维码接口
API:https://api.weixin.qq.com/intp/marketcode/codeactive?access_token=ACCESSTOKEN请求参数:
字段名 | 中文解释 | 类型 | 是否必填 | 备注 |
---|---|---|---|---|
application_id | 申请单号 | Uint64 | Y | 无 |
activity_name | 活动名称 | String128 | Y | 数据分析活动区分依据,请规范命名 |
product_brand | 商品品牌 | String128 | Y | 数据分析品牌区分依据,请规范命名 |
product_title | 商品标题 | String128 | Y | 数据分析商品区分依据,请规范命名 |
product_code | 商品条码 | String128 | Y | EAN商品条码,请规范填写 |
wxa_appid | 小程序的appid | String128 | Y | 扫码跳转小程序的appid |
wxa_path | 小程序的path | String128 | Y | 扫码跳转小程序的path |
wxa_type | 小程序版本 | Int32 | N | 默认为0正式版,开发版为1,体验版为2 |
code_start | 激活码段的起始位 | Uint64 | Y | 如0(包含该值) |
code_end | 激活码段的结束位 | Uint64 | Y | 如9999(包含该值) |
返回参数:
字段名 | 中文解释 | 类型 | 是否必填 | 备注 |
---|---|---|---|---|
errcode | 返回状态码 | Int32 | Y | 0 |
errmsg | 错误提示 | String128 | N | 返回信息,如errcode不为0,则errmsg为错误信息 |
入参示例:
{
"application_id":581865877,
"code_start":0,
"code_end":200,
"activity_name":"test_name",
"product_brand":"test_brand",
"product_title":"test_title",
"product_code":"test_code",
"wxa_appid":"wx3sxjifjwojfsffef",
"wxa_path":"pages/index/index"
}
返回示例:
{"errcode":0,"errmsg":"ok"}
2.6 查询二维码激活状态接口
API:https://api.weixin.qq.com/intp/marketcode/codeactivequery?access_token=ACCESSTOKEN 这里提供两种查询方式:1)传入application_id和code_index;2)传入九位原始码code或28位普通码字符code_url。 返回原始码信息和激活状态,可以在小程序内扫码等场景使用。请求参数:
字段名 | 中文解释 | 类型 | 是否必填 | 备注 |
---|---|---|---|---|
application_id | 申请单号 | Uint64 | N | 无 |
code_index | 该码在批次中的偏移量 | Uint64 | N | 传入application_id时必填 |
code_url | 28位普通码字符 | String128 | N | code与code_url二选一 |
code | 九位的字符串原始码 | String16 | N | code与code_url二选一 |
返回参数:
字段名 | 中文解释 | 类型 | 是否必填 | 备注 |
---|---|---|---|---|
errcode | 返回状态码 | Int32 | Y | 0 |
errmsg | 错误提示 | String128 | N | 返回信息,如errcode不为0,则errmsg为错误信,,errcode为0时返回下列字段 |
code | 原始码 | String16 | Y | 返回原始码数据,并返回对应的激活信息 |
application_id | 申请单号 | Uint64 | Y | 无 |
isv_application_id | 外部单号 | String128 | Y | 无 |
activity_name | 活动名称 | String128 | Y | 无 |
product_brand | 商品品牌 | String128 | Y | 无 |
product_title | 商品标题 | String128 | Y | 无 |
wxa_appid | 小程序的appid | String128 | Y | 无 |
wxa_path | 小程序的path | String128 | Y | 无 |
wxa_type | 小程序版本 | Int32 | Y | 无 |
code_start | 激活码段的起始位 | Uint64 | Y | 如0(包含该值) |
code_end | 激活码段的结束位 | Uint64 | Y | 如9999(包含该值) |
入参示例:
{
"code_url":"P.URL.CN/0U.JYJXP3HJI2C98A9O"
}
返回示例:
{
"errcode": 0,
"errmsg": "ok",
"code": "8",
"code_start": 0,
"code_end": 200,
"activity_name": "test_name",
"product_brand": "test_brand",
"product_title": "test_title",
"product_code": "test_code",
"wxa_appid": "test_appid",
"wxa_path": "test_path"
"application_id":581865877,
"isv_application_id":"test_id"
}
2.7 code_ticket换code接口
API:https://api.weixin.qq.com/intp/marketcode/tickettocode?access_token=ACCESSTOKEN ACCESSTOKEN参见接口规则说明。请求参数:
字段名 | 中文解释 | 类型 | 是否必填 | 备注 |
---|---|---|---|---|
openid | 用户的openid | String | Y | 无 |
code_ticket | 跳转时带上的code_ticket参数 | String256 | Y | 无 |
返回参数:
字段名 | 中文解释 | 类型 | 是否必填 | 备注 |
---|---|---|---|---|
errcode | 返回状态码 | Int32 | Y | 0 |
errmsg | 错误提示 | String128 | N | 返回信息,如errcode不为0,则errmsg为错误信息 |
code | 原始码 | String16 | Y | 返回原始码数据,并返回对应的激活信息 |
application_id | 申请单号 | Uint64 | Y | 无 |
isv_application_id | 外部单号 | String128 | Y | 无 |
activity_name | 活动名称 | String128 | Y | 无 |
product_brand | 商品品牌 | String128 | Y | 无 |
product_title | 商品标题 | String128 | Y | 无 |
wxa_appid | 小程序的appid | String128 | Y | 无 |
wxa_path | 小程序的path | String128 | Y | 无 |
code_start | 激活码段的起始位 | Uint64 | Y | 如0(包含该值) |
code_end | 激活码段的结束位 | Uint64 | Y | 如9999(包含该值) |
入参示例:
{
"code_ticket":"6cb4bc95e1f1abc97034cbe8fd484989",
"openid":"oiV2luCau8Cx0TMOy9lvZSLqRcKc"
}
返回示例:
{
"errcode": 0,
"errmsg": "ok",
"code": "8",
"code_start": 0,
"code_end": 200,
"activity_name": "test_name",
"product_brand": "test_brand",
"product_title": "test_title",
"product_code": "test_code",
"wxa_appid":"wx3sxjifjwojfsffef",
"wxa_path":"pages/index/index",
"application_id":581865877,
"isv_application_id":"test_id"
}
# 3. 二维码包解密说明
3.1 解密说明
实名数据的加密方式使用AES的CBC模式,iv使用加解密钥,填充使用PKCS7Padding,最后使用base64进行编码。
解密时,先进行base64解码,然后使用密钥及AES/CBC/PKCS7Padding进行解密。 密钥在申请实名接口权限时,会提供到申请方。