APP调起签约-Android

更新时间:2026.04.24
||
提示:本功能目前处于灰度测试阶段、暂未开放使用,待全量开放后将通过文档门户公告同步,感谢您的理解。

简介

商户在完成预签约后,可在移动端应用APP中集成开放SDK调起微信,请求用户签约。

接入前注意事项

在接入前需详细阅读下方说明:

  • 该能力依赖微信Open SDK,需按照指引在微信开放平台申请开通移动应用的微信支付能力,以完成相关初始化配置

  • 该能力需要使用微信支付商户号,需配置 Api key 配置商户号证书等内容,详情可参考开发必要参数说明

  • 预签约成功后,首次调起微信有严格的时间限制:需在 2 分钟内调起微信(未来可能缩短至 20 秒)。因此,建议在确认用户有签约意愿后再发起预签约,且预签约一旦成功,需立即通过 SDK 调起微信,以确保流程顺利进行

接口说明

支持商户:【平台商户】

接口名称:WXOpenBusinessView

需要引用新的openSDK:

接口兼容:

Android兼容性表现:若微信版本>=8.0.51,开发者可以通过此openSDK接口调起用户确认收款页面;若微信版本< 8.0.51,开发者通过此openSDK接口不能跳转到微信,此时开发者应提示用户更新微信版本。

接口参数

Android对应对象:WXOpenBusinessView.Req

请求参数

 businessType  必填 string(128)

【业务类型】固定配置:liteAppC2CSignPay


 query   必填  string(2048)

【查询参数】使用URL的query string方式传递参数,格式为key=value&key2=value2,其中value、value2需要进行UrlEncode处理。

属性

调用示例

1int wxSdkVersion = api.getWXAppSupportAPI();
2if (wxSdkVersion >= Build.OPEN_BUSINESS_VIEW_SDK_iNT) {
3  WXOpenBusinessView.Req req = new WXOpenBusinessView.Req();
4  req.businessType = "liteAppC2CSignPay";
5  req.query = "mchid=111111&appid=222222&package=preEntrustwebId%3Dpre_entrustweb_id%26outContractCode%3Dout_contract_code%26permissionType%3DINDIVIDUAL_PAYEE&timeStamp=1750819431&nonceStr=444&signType=RSA&certSerialNo=5555&signature=666";
6  Boolean ret = api.sendReq(req);
7} else {
8  /*需提示用户升级微信版本*/
9}

返回参数

Android对应对象:WXOpenBusinessView.Resp

 businessType   必填  string(16)

【业务类型】打开的业务类型。


 extMsg   必填  string

【扩展信息】返回的业务数据,格式为JSON字符串,如 {"result":"success","code":"SUCCESS","authState":"AUTHORIZED","individualAuthId":"123","openid":"xxxxxxxxxxx","operationtime":"2015-05-20T13:29:35+08:00"}。具体内部字段如下

属性

返回示例

1// 展示成功的返回数据示例
2resp.businessType == "liteAppC2CSignPay"
3resp.extMsg == "{\"result\":\"success\",\"code\":\"SUCCESS\",\"authState\":\"AUTHORIZED\",\"individualAuthId\":\"123\",\"openid\":\"xxxxxxxxxxx\",\"operationtime\":\"2015-05-20T13:29:35+08:00\"}"

注意:

客户端返回结果不可信赖,具体状态应以服务端查询个人收款方授权结果根据业务申请单号查签约信息为准。

错误码

错误码

描述

解决方案

PARAM_ERROR

参数错误

请检查传入参数是否符合格式要求

INVALID_REQUEST

请求失败

参数格式正确,但不符合业务规则,请查看失败原因

SIGN_ERROR

签名验证不通过

请参阅 签名常见问题

NO_AUTH

无接口权限

没有调用此接口的权限,请查看失败原因

RATELIMIT_EXCEEDED

频率超限

请降低请求接口频率

USER_ERROR

用户原因失败

客户端不受支持、用户主动取消、网络异常等用户原因失败,通常无需处理

注意:网络异常时,可能用户已发出确认请求,最终收款状态请以服务端回调或主动查单为准

SYSTEM_ERROR

系统异常,请稍后再试

请稍后再试

签名步骤

构造待签名串

待签名串共有四行,每行为一个参数值,并以 \n(换行符,ASCII 编码值为 0x0A)结尾,最后一行也需要以 \n 结尾。

如果参数值以 \n 结束,也需要额外附加一个 \n

待签名串的结构:

1移动应用AppID
2签名时间戳
3随机字符串
4扩展字符串
5

待签名串的内容示例:

1wx8888888888888888
21414561699
35K8264ILTKCH16CQ2502SI8ZNMTM67VS
4preEntrustwebId=1236698745558870&outContractCode=out_contract_code&permissionType=INDIVIDUAL_PAYEE
5

计算签名值

使用商户私钥对 待签名串 进行 SHA256 with RSA 签名,并对签名结果进行 Base64 编码,得到签名值 signature

以命令行为例:

1echo -n -e \
2"wx8888888888888888\n1414561699\n5K8264ILTKCH16CQ2502SI8ZNMTM67VS\npreEntrustwebId=1236698745558870&outContractCode=out_contract_code&permissionType=INDIVIDUAL_PAYEE\n" \
3  | openssl dgst -sha256 -sign apiclient_key.pem \
4  | openssl base64 -A

输出结果示例:

1OAkJnA4oB3MNnYwBQxJanAOzUyFTbIcnUwhxBw5dKDK+VQkAB2FeImy+D5sBMrNqnGwPAAMRgygxwT1pl2RobmIIIp0ldAABIx4EUzYPKUk3MDyaBR5VPTBvqAgeUKcEMlZpugQBCnNvBTM3c1WzsXUrEwgBkI1XO5bCNbgDJ25nkT8ADgAFvqoogl4EdSFGc4W4xZsoCItnqbypR3RuBIlRLh9vlQcyJzJRLChGK3UyalDDISx1ukt1P7tMnmoeZ0cuDY8IZMdoZAigLadkvR4xKSIkIkVxAJ8DAUYxLFmutKSWTmQtWAB0MgtvaGmbXU4Aob8HN4kDBh6wIUFluw==

在以上计算签名值的过程中,没有使用到 signType 参数,但调用接口时仍需要传递默认值 RSA