手机网站支付调起支付宝时提示账户身份信息不完善
支付老李
明确结论
仅凭这条提示,无法确定问题出在付款方还是收款方。它表示支付宝在风控或实名合规校验中发现,付款账户、收款账户或交易关联主体中,至少有一方的身份信息不完整。
这类问题通常与 alipay.trade.wap.pay 的接口参数或手机网站代码无关。要确定具体是哪一方,需要更换付款账户测试,同时检查商家账户状态和支付宝后台记录。
如何快速判断
可以按以下顺序排查:
-
换一个已完成实名认证的支付宝账户付款
- 如果其他账户可以正常支付,问题大概率出在原付款账户。
- 如果多个不同账户都出现相同提示,应优先检查收款方或商家主体信息。
-
检查付款账户
请付款用户在支付宝中确认:
- 是否已完成实名认证;
- 身份证件是否过期;
- 是否需要补充职业、地址等身份资料;
- 账户是否有支付限制或风险提示;
- 绑定银行卡的实名信息是否与支付宝账户一致。
-
检查收款方和商家账户
商家应登录支付宝商家平台或开放平台,确认:
- 企业或个人主体认证是否完成;
- 营业执照、法人证件等资料是否过期;
- 签约产品“手机网站支付”是否处于正常状态;
- 应用绑定的支付宝账号是否与签约收款账号一致;
- 商户号、应用和收款主体是否一致;
- 后台是否有待补充资料、账户限制或风险处置通知。
-
查看交易和接口记录
排查时保留以下信息:
out_trade_notrade_no,如果支付宝已经生成app_id- 报错时间
- 付款账户的脱敏信息
- 支付页面截图
- 接口返回的
code、sub_code、sub_msg
如果商家后台没有提供更具体的原因,可以将这些信息提交给支付宝客服或商户技术支持查询。涉及身份认证和风控时,接口一般不会直接返回对方完整的身份问题。
代码侧应该做什么
身份信息不完整通常无法通过修改支付参数解决。不过,系统仍应完整记录支付宝的接口响应和订单状态,避免只向用户显示笼统的“支付失败”。
下面以 Java SDK 为例:
AlipayClient alipayClient = new DefaultAlipayClient(
gatewayUrl,
appId,
merchantPrivateKey,
"json",
"UTF-8",
alipayPublicKey,
"RSA2"
);
AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
request.setReturnUrl(returnUrl);
request.setNotifyUrl(notifyUrl);
AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
model.setOutTradeNo(outTradeNo);
model.setTotalAmount(totalAmount);
model.setSubject(subject);
model.setProductCode("QUICK_WAP_WAY");
request.setBizModel(model);
try {
AlipayTradeWapPayResponse response =
alipayClient.pageExecute(request, "GET");
if (!response.isSuccess()) {
logger.warn(
"Alipay wap pay failed, outTradeNo={}, code={}, subCode={}, subMsg={}",
outTradeNo,
response.getCode(),
response.getSubCode(),
response.getSubMsg()
);
}
String paymentForm = response.getBody();
} catch (AlipayApiException e) {
logger.error(
"Alipay wap pay exception, outTradeNo={}",
outTradeNo,
e
);
}
alipay.trade.wap.pay 成功返回支付表单,只说明支付页面创建成功,并不表示交易已经完成。身份校验可能在支付宝收银台进行,因此应以异步通知和主动查询结果判断最终支付状态。
主动查询订单时,可以记录实际交易状态:
AlipayTradeQueryRequest queryRequest = new AlipayTradeQueryRequest();
AlipayTradeQueryModel queryModel = new AlipayTradeQueryModel();
queryModel.setOutTradeNo(outTradeNo);
queryRequest.setBizModel(queryModel);
AlipayTradeQueryResponse queryResponse =
alipayClient.execute(queryRequest);
logger.info(
"Alipay trade query, outTradeNo={}, code={}, subCode={}, subMsg={}, tradeStatus={}",
outTradeNo,
queryResponse.getCode(),
queryResponse.getSubCode(),
queryResponse.getSubMsg(),
queryResponse.getTradeStatus()
);
注意事项
- 不要试图通过更换
subject、return_url、notify_url等参数绕过身份校验。这些参数与实名认证问题无关。 - 不要根据同步跳转结果直接把订单标记为支付成功。系统应校验异步通知签名,并确认
trade_status。 - 如果银行卡已经扣款,但页面提示无法付款,应先查询订单状态,不要立即重复支付。提示中已经说明款项可能原路退回,具体退款时间以支付宝和发卡行的处理结果为准。
- 日志中不要记录身份证号、银行卡号、完整手机号等敏感信息。
- 如果只有一个付款账户失败,应先由付款人补全身份信息。如果多个已正常实名的账户都失败,商家应重点检查收款账户、签约主体和应用绑定关系。
- 风控和身份认证的具体判定规则不会完全通过接口公开。如果仍然无法定位问题,需要由支付宝根据
out_trade_no、trade_no和报错时间查询。
备注:内容仅供参考。
