用户授权/开通车主服务

更新时间:2024.11.14

应用场景

在停车场、高速、加油等场景下,商户需在用户授权后,使用车主服务进行扣费。当用户未授权、未开通时,商户可引导用户到此接口进行授权或开通车主服务。

目前车主服务只支持蓝牌、绿牌,商户侧引导用户添加车牌时需明确告知用户黄牌车牌号请不要添加到车主平台

流程介绍

  1. 调用用户状态查询api获取当前用户车主状态,如果当前用户车主状态异常(如有欠费(OVERDUE),未授权(UNAUTHORIZED),校验授权关系失败(VEHICLE_AUTH_ERROR)),
    接口同步返回跳转路径(path字段)商户侧需根据步骤2引导用户进入车主服务进行相关操作;如果当前用户车主状态正常,不会返回path字段,不需要再引导用户进入车主服务

  2. – 小程序,APP跳转,通过跳转路径(path)调用 ‘用户授权/开通接口api’ 进入车主小程序的对应页面,用户进行授权/开通的操作
    – H5跳转,通过跳转路径(path)调用 ‘用户授权/开通接口api’ 进入车主H5对应的页面,用户进行授权/开通操作

  3. 返回商户小程序,APP或H5页面后再次调用用户状态查询api确认用户最新车主状态及车牌信息

1.小程序跳转接口调用请求说明

接口

wx.navigateToMiniProgram(OBJECT)接口

说明

iOS 微信客户端 6.5.9 版本开始支持,Android 客户端即将在 6.5.10 版本开始支持

 

OBJECT参数说明:

字段含义

变量名

必填

类型

示例值

描述

微信车主小程序appid

appId

String

wxbcad394b3d99dac9

固定值
wxbcad394b3d99dac9

场景信息传递给小程序的数据

extraData

object

{ "appid": "wx426a3015555a46be", "mch_id": "10000098", "sub_mch_id": "10000096", "nonce_str": "FF1A406564EE70106445", "sign_type": "HMAC-SHA256", "sign":"EE088059BBC9141264F8D14293AD6C4BB94CEA8C08AA98FBF93E262D445F8FF5", "trade_scene": "PARKING", "openid": "oUpF8uMEb4qRXf22hE3X68TekukE" }

签约的请求参数,详情见extraData字段详细说明

场景信息传递给小程序的数据

打开小程序的页面路径

path

string

pages/route/index

打开小程序的页面路径,取值为‘用户状态查询接口’返回的跳转路径(path字段,如查询接口没返回该字段,说明不需要再调用‘用户授权/开通接口’)

接口调用成功的回调函数

success

Function

-

-

接口调用失败的回调函数

fail

Function

-

-

接口调用结束的回调函数

complete

Function

-

调用成功、失败都会执行

 

示例:

1wx.navigateToMiniProgram({
2    appId: 'wxbcad394b3d99dac9',
3    path: 'pages/route/index',
4    extraData: {
5        appid: 'wx426a3015555a46be',
6        sub_appid: 'wxcbda96de0b165485',
7        mch_id: '10000098',
8        sub_mch_id: '10000096',
9        nonce_str: 'FF1A406564EE70106445',
10        sign_type: 'HMAC-SHA256',
11        sign:'EE088059BBC9141264F8D14293AD6C4BB94CEA8C08AA98FBF93E262D445F8FF5',
12        trade_scene: 'PARKING',
13        plate_number: '粤B888888',
14        openid: 'oUpF8uMEb4qRXf22hE3X68TekukE'
15},
16    success(res) {
17    },
18    fail(res) {
19// 未成功跳转到车主小程序
20    }
21})

 

用户授权完成之后,会跳转回商户小程序。可通过onShow(OBJECT)所携带的参数判断返回结果,OBJECT返回参数请查看小程序开发文档onShow参数说明

当用户放弃操作时,referrerInfo或referrerInfo. extraData为null(或undefined),当车主平台小程序成功或失败返回商户小程序时,referrerInfo.extraData字段说明如下

字段名

变量名

必填

示例值

说明

用户openid

openid

oUpF8uMEb4qRXf22hE3X68TekukE

用户openid

授权结果

auth

true

用户授权结果:
true:已授权
false:授权失败

示例:

1App({
2    onShow(res) {
3        if (res.scene === 1038) { // 场景值1038:从被打开的小程序返回
4            const { appId, extraData } = res.referrerInfo
5            if (appId == 'wxbcad394b3d99dac9') { // appId为wxbcad394b3d99dac9:从车主小程序跳转回来
6                if (typeof extraData == 'undefined'){
7                    // TODO
8                    // 客户端小程序不确定授权结果,需要发起‘用户状态查询接口’确认授权结果
9                    return;
10                }
11                if(extraData.auth == 'true'){
12                    // TODO
13                    // 客户端小程序授权成功
14                    return;
15                } else {
16                    // TODO
17                    // 授权失败
18                    return;
19                }
20            }
21        }
22    }
23})

2.H5跳转接口调用请求说明

注意:

参数之后需要拼接#wechat_redirect

在用户状态查询接口返回的path参数通过GET请求的方式拼接以下参数:

字段含义

变量名

必填

类型

示例值

描述

公众账号id

appid

String(32)

wxcbda96de0b165486

服务商商户号绑定的APPID

子商户公众账号id

sub_appid

String(32)

wxcbda96de0b165489

子商户号绑定的服务号,小程序,APP的appid(需要在服务商的商户平台为子商户绑定)

商户号

mch_id

String(32)

10000098

服务商商户号

子商户号

sub_mch_id

String(32)

1900000109

微信支付分配的子商户号

随机字符串

nonce_str

String(32)

5K8264ILTKCH16CQ2502SI8ZNMTM67VS

随机字符串,不长于32位。

签名类型

sign_type

String(32)

 

HMAC-SHA256

签名类型,默认为HMAC-SHA256

签名

sign

String(64)

EE088059BBC9141264F8D14293AD6C4BB94CEA8C08AA98FBF93E262D445F8FF5

签名,详见签名生成算法

交易场景

trade_scene

String(16)

PARKING

委托代扣的交易场景值,目前支持 : 1. PARKING:车场停车场景 ;2. PARKING SPACE 车位停车场景;3. GAS 加油场景;4. HIGHWAY 高速场景;该值会向微信用户进行展示

用户标识

openid

String(32)

oUpF8uMuAJO_M2pxb1Q9zNjWeS6o

此参数必传,用户在商户appid下的唯一标识。openid和sub_openid可以选传其中之一,如果选择传sub_openid,则必须传sub_appid

用户子标识

sub_openid

String(32)

oUpF8uMuAJO_M2pxb1Q9zNjWeS6o

此参数必传,用户在子商户appid下的唯一标识。openid和sub_openid可以选传其中之一,如果选择传sub_openid,则必须传sub_appid

车牌号

plate_number

String(32)

粤B888888

车牌号。仅包括省份+车牌,不包括特殊字符。

通道类型

channel_type

String(32)

ETC

高速通道类型,目前可选:ETC、MTC。用户车牌必须具有通道标识时,才允许扣费。当场景值为 HIGHWAY 高速场景时必传

 

举例如下:

注意:

生成跳转链接的时候,对所有参数urlconde再生成跳转链接

1path?appid=wxcbda96de0b165486&mch_id=10000098&sub_appid=wxcbda96de0b165486&sub_mch_id=10000096&openid=oUpF8uMEb4qRXf22hE3X68TekukE&plate_number=%E7%B2%B888888&sign=EE088059BBC9141264F8D14293AD6C4BB94CEA8C08AA98FBF93E262D445F8FF5&sign_type=HMAC-SHA256&nonce_str=5K8264ILTKCH16CQ2502SI8ZNMTM67VS&trade_scene=PARKING#wechat_redirect

 

用户授权/开通有可能出现失败的情况,回跳到商户侧报备的回跳地址后商户需主动发起一次用户状态查询,获取最新的用户车主状态展示给用户

3.APP跳转接口调用请求说明

字段含义

变量名

必填

类型

示例值

描述

公众账号id

appid

String(32)

wxcbda96de0b165486

微信支付分配的公众账号id

商户号

mch_id

String(32)

10000098

微信支付分配的商户号

子商户公众账号id

sub_appid

String(32)

wxcbda96de0b165489

子商户号绑定的服务号,小程序,APP的appid(需要在服务商的商户平台为子商户绑定)

子商户号

sub_mch_id

String(32)

1900000109

微信支付分配的子商户号

随机字符串

nonce_str

String(32)

5K8264ILTKCH16CQ2502SI8ZNMTM67VS

随机字符串,不长于32位。

签名类型

sign_type

String(32)

HMAC-SHA256

签名类型,默认为HMAC-SHA256

签名

sign

String(64)

EE088059BBC9141264F8D14293AD6C4BB94CEA8C08AA98FBF93E262D445F8FF5

签名,详见签名生成算法

交易场景

trade_scene

String(16)

PARKING

委托代扣的交易场景值,目前支持 : 1. PARKING:车场停车场景 ;2. PARKING SPACE 车位停车场景;3. GAS 加油场景;4. HIGHWAY 高速场景;该值会向微信用户进行展示

用户标识

openid

String(32)

oUpF8uMuAJO_M2pxb1Q9zNjWeS6o

此参数必传,用户在商户appid下的唯一标识。openid和sub_openid可以选传其中之一,如果选择传sub_openid,则必须传sub_appid

用户子标识

sub_openid

String(32)

oUpF8uMuAJO_M2pxb1Q9zNjWeS6o

此参数必传,用户在子商户appid下的唯一标识。openid和sub_openid可以选传其中之一,如果选择传sub_openid,则必须传sub_appid

车牌号

plate_number

String(32)

粤B888888

车牌号。仅包括省份+车牌,不包括特殊字符。

通道类型

channel_type

String(32)

ETC

高速通道类型,目前可选:ETC、MTC。用户车牌必须具有通道标识时,才允许扣费。当场景值为 HIGHWAY 高速场景时必传

 

安卓举例如下(APP调起小程序详细说明):

1String appId = "wxcdbdf056ad5fc1fb"; // 填应用AppId
2IWXAPI api = WXAPIFactory.createWXAPI(context, appId);
3WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req();
4req.userName = "gh_518c42c65952"; // 填车主小程序原始id,取固定值gh_518c42c65952
5req.path = "/pages/route/index?extraData={\"appid\":\"wxcbda96de0b165486 \",\"mch_id\":\"10000098\", \"sub_appid\":\"wxcbda96de0b165486 \",\"sub_mch_id\":\"10000096\",\"nonce_str\":\"5K8264ILTKCH16CQ2502SI8ZNMTM67VS \",\"sign_type\":\"HMAC-SHA256\", \"trade_scene\":\"HIGHWAY\",\"sub_openid\":\"oUpF8uMEb4qRXf22hE3X68TekukE\",\"plate_number\":\"粤Z88888A \", \"sign\":\"C99D665499D169E97D6278868C06FB91E5DD87BCDA758FA4869669F12C27FEFC\"}";//拉起小程序页面的可带参路径,不填默认拉起小程序首页
6req.miniprogramType = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE;
7api.sendReq(req);

 

用户开通/授权完成之后,会跳转回到商户的APP,暂时不返回参数。商户侧APP接收到客户端回调后再次调用用户状态查询接口获取用户的最新车主状态