签约-小程序
更新时间:2024.11.26使用限制:
仅限已开通该接口权限的小程序调用,且调用方小程序的 AppID 必须与申请权限时提供的 AppID 一致。
微信 OpenSDK 没有默认集成本接口,商户小程序需要额外安装 NPM 依赖:
iOS 及 Android 微信客户端版本 8.0.51 开始支持。如客户端不支持,微信会向用户展示提示页面,并触发商户小程序失败回调。
接口说明
支持商户:【平台商户】
支持的调用端:【小程序】
接口名称:WeChatPayIndividualContracts.requestSign
|
字段说明
请求参数
mchid 必填 string(32)
【商户号】 平台商户号
appid 必填 string(32)
【小程序 AppID】 调用方小程序的 AppID,必须与申请权限时提供的 AppID 一致
package 必填 string(256)
【权限申请扩展字符串】需拼接用户标志 openid
、权限类型 permissionType
参数格式:openid=oZMw85eFXXGIa9IZwGdH9TF_lTPw&permissionType=INDIVIDUAL_PAYEE
,目前 permissionType 仅支持 INDIVIDUAL_PAYEE
timeStamp 必填 string(32)
【签名时间戳】 签名时的系统时间戳,自格林威治时间 1970-01-01 00:00:00(北京时间 1970-01-01 08:00:00)至现在的总秒数。
注意: 部分系统取到的值为毫秒级,需要转换成秒(10位数字)。
nonceStr 必填 string(32)
【随机字符串】 签名使用的随机字符串,不超过 32 字节
signType 必填 string(32)
【签名类型】默认为 RSA
,仅支持 RSA
certSerialNo 必填 string(64)
【证书序列号】签名使用的商户 API 证书序列号
signature 必填 string(512)
【签名值】使用字段 appid
timeStamp
nonceStr
package
计算得出的签名值,具体算法见下文签名步骤。
签名所使用的 appid
为申请个人签约小程序时的 appid
,微信支付会校验当前小程序与申请的 AppID 是否一致。
小程序调起签约示例
返回参数
success 成功回调的参数
individualAuthId 必填 string(64)
【授权id】表示一个【微信支付用户账号id】与一个【商户】的授权关系
authState 必填 string(64)
【授权状态】授权的结果状态, 值为AUTHORIZED
已授权 或 UNAUTHORIZED
未授权
operationTime 必填 string(64)
【操作时间】遵循rfc3339标准格式,格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE,yyyy-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss表示时分秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC8小时,即北京时间)。例如:2015-05-20T13:29:35+08:00表示,北京时间2015年5月20日13点29分35秒。
成功回调的参数示例
fail 失败回调的参数
code 必填 string(32)
【错误码】详见错误码部分
message 必填 string(1024)
【失败原因】不建议展示给用户,仅用于商户的开发人员定位失败原因
失败回调的参数示例
complete 完成回调的参数
没有参数。
无论成功、失败都会触发 complete
回调。
错误码
错误码 | 描述 | 解决方案 |
---|---|---|
PARAM_ERROR | 参数错误 | 请根据失败原因检查传入参数 |
INVALID_REQUEST | 请求失败 | 因业务原因失败,参数符合参数格式,但不符合业务规则,请查看失败原因 |
SIGN_ERROR | 签名验证不通过 | 请参阅 签名常见问题 |
NO_AUTH | 无接口权限 | 请商户申请此接口的权限 |
RATELIMIT_EXCEEDED | 频率超限 | 请降低请求接口频率 |
USER_ERROR | 用户原因失败 | 客户端不受支持、账号异常或用户主动取消,请服务端等待回调或主动查询确认详情 |
ALREADY_EXISTS | 资源已存在 | 尝试创建的资源已存在, 比如已签约 |
SYSTEM_ERROR | 系统异常,请稍后再试 | 请稍后再试 |
NETWORK_ERROR | 网络异常,请稍后再试 | 网络异常,请稍后再试 |
PLATFORM_NOT_SUPPORTED | 平台不支持 | 平台不支持, 比如操作系统不支持; 操作系统、微信、小程序基础库版本过低的场景 |
签名步骤
构造待签名串
待签名串共有四行,每行为一个参数值,并以 \n
(换行符,ASCII 编码值为 0x0A
)结尾,最后一行也需要以 \n
结尾。
如果参数值以 \n
结束,也需要额外附加一个 \n
。
待签名串的结构:
待签名串的内容示例:
计算签名值
使用商户私钥对 待签名串 进行 SHA256 with RSA
签名,并对签名结果进行 Base64 编码,得到签名值 signature
。
以命令行为例:
输出结果示例:
在以上计算签名值的过程中,没有使用到 signType
参数,但调用接口时仍需要传递默认值 RSA
。