APP调起签约-iOS
更新时间:2026.04.24||
提示:本功能目前处于灰度测试阶段、暂未开放使用,待全量开放后将通过文档门户公告同步,感谢您的理解。 简介
商户在完成预签约后,可在移动端应用APP中集成开放SDK调起微信,请求用户签约。
接入前注意事项
该能力依赖微信Open SDK,需按照指引在微信开放平台申请开通移动应用的微信支付能力,以完成相关初始化配置
该能力需要使用微信支付商户号,需配置 Api key 配置商户号证书等内容,详情可参考开发必要参数说明
预签约成功后,首次调起微信有严格的时间限制:需在 2 分钟内调起微信(未来可能缩短至 20 秒)。因此,建议在确认用户有签约意愿后再发起预签约,且预签约一旦成功,需立即通过 SDK 调起微信,以确保流程顺利进行
接口说明
| iOS兼容性表现:若微信版本 >= 8.0.51,开发者可以通过此openSDK接口调起用户确认收款页面;若微信版本 < 8.0.51,开发者通过此openSDK接口可以跳转到微信,但不能调起用户确认收款页面,此时微信会提示用户可能由于应用的请求非法或者微信版本过低。 |
|
接口参数
iOS对应对象:WXOpenBusinessViewReq
请求参数
businessType 必填 string(128)
【业务类型】固定配置:liteAppC2CSignPay
query 必填 string(2048)
【查询参数】使用URL的query string方式传递参数,格式为key=value&key2=value2,其中value、value2需要进行UrlEncode处理。
 | 属性 |
| mchid 必填 string(32) 【商户号】商户号,由微信支付生成并下发
appid 必填 string(32) 【商户AppID】微信开放平台审核通过的移动应用appid
package 必填 string(256) 【扩展字符串】需拼接预签约ID preEntrustwebId、业务申请单号outContractCode、权限类型 permissionType,其中 preEntrustwebId取值为预签约接口返回的pre_entrustweb_id,outContractCode取值为预签约接口参数中的out_contract_code,permissionType 仅支持 INDIVIDUAL_PAYEE。参数格式:preEntrustwebId=pre_entrustweb_id&outContractCode=out_contract_code&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 计算得出的签名值,具体算法见下文签名步骤。 |
调用示例

1WXOpenBusinessViewReq *req = [WXOpenBusinessViewReq object];
2req.businessType = @"liteAppC2CSignPay";
3req.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";
4[WXApi sendReq:req]
返回参数
iOS对应对象:WXOpenBusinessViewResp
businessType 必填 string(128)
【业务类型】打开的业务类型。
extMsg 必填 string
【扩展信息】返回的业务数据,格式为JSON字符串,如 {"result":"success","code":"SUCCESS","authState":"AUTHORIZED","individualAuthId":"123","openid":"xxxxxxxxxxx","operationtime":"2015-05-20T13:29:35+08:00"}。具体内部字段如下
 | 属性 |
| result 必填 string(32) 【调用微信支付结果】 success:代表请求已经发动到微信支付,但实际业务结果要以服务端查询个人收款方授权结果或根据业务申请单号查签约信息为准
code 必填 string(32) 【结果信息】 SUCCESS:展示页面成功。
其他失败情况请参考错误码
message 选填 string(1024) 【失败原因】当code不为SUCCESS时必填 该字段只可用于商户开发人员定位失败原因,不可依赖该字段在代码中做逻辑处理,例如:if (message.equals("xxx")),也不建议展示给用户
authState 选填 string(32) 【授权的结果状态】当code为SUCCESS时必填 AUTHORIZED:已授权
UNAUTHORIZED:未授权
DUPLICATE_AUTHORIZED:已授权,无需重复授权
individualAuthId 选填 string(128) 【个人收款方授权id】当code为SUCCESS时必填 标识一个微信用户在该平台用于个人收款的微信支付账户,平台邀请微信用户完成个人收款授权后获得此id,详见查询个人收款方授权结果。
openid 选填 string(128) 【个人收款方Openid】当code为SUCCESS时必填 返回签约用户的openid(基于来源APP的appid)
operationtime 选填 string(64) 【操作时间】当code为SUCCESS时必填 遵循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秒。 |
返回示例

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
输出结果示例:

1uOVRnA4qG/MNnYzdQxJanN+zU+lTgIcnU9BxGw5dKjK+VdEUz2FeIoC+D5sB/LN+nGzX3hfZg6r5wT1pl2ZobmIc6p0ldN7J6yDgUzbX8Uk3sD4a4eZVPTBvqNDoUqcYMlZ9uuDdCvNv4TM3c1WzsXUrExwVkI1XO5jCNbgDJ25nkT/c1gIFvqoogl7MdSFGc4W4xZsqCItnqbypR3RuGIlR9h9vlRsy7zJR9PBI83X8alLDIfR1ukt1P7tMnmogZ0cuDY8cZsd8ZlCgLadmvej58SLsIkVxFJ8XyUgx9FmutKSYTmYtWBZ0+tNvfGmbXU7cob8H/4nLBiCwIUFluw==
在以上计算签名值的过程中,没有使用到 signType 参数,但调用接口时仍需要传递默认值 RSA