接入易错点

更新时间:2026.11.05
||| 安装 Skill

一、产品权限开通与移动应用 APPID 绑定

注意事项

说明、正确应该怎么做

不做会怎么样

 调用 APP 支付(trade_type=APP)前须按商户号单独开通 APP 支付产品权限,该权限不区分终端

 说明:APP 支付是独立的基础支付产品权限,须在商户平台产品中心申请并审核通过;支付产品权限按商户号维度开通,不按 iOS / 安卓 / 鸿蒙等终端分别开通,因此同一商户号下不同终端使用不同 trade_type 时,需要各自对应的产品权限。
正确应该怎么做:① 由超级管理员登录商户平台【产品中心 -> APP支付 -> 申请开通】,填写移动应用 APPID、上传 APP 页面截图、提供 APP 在主流应用市场的上架链接后提交;② 审核通过后发起 APPID 授权绑定申请,并登录开放平台确认授权绑定;③ 在【产品中心 -> APP支付】核实权限开通结果后再按 trade_type=APP 发起下单,未开通前不要以 APP 交易类型下单。
典型反例:以「iOS、安卓端都能正常收款」推断 APP 支付权限已开通,实际上这些端走的是 H5 支付等其他已开通产品,鸿蒙等真正走 APP 交易的终端被拦截。
见 4013070174-申请APP支付权限指引、4015478291-开发接入准备、4013289251-管理商户号绑定的APPID账号 

 下单返回「商户号该产品权限未开通,请前往商户平台>产品中心检查后重试」,该笔订单拿不到 prepay_id,用户在对应终端无法完成支付。 

 需限制信用卡支付时,须确认该商户号已开通 limit_pay 产品权限

 说明:限制信用卡支付(APIv2 的 limit_pay=no_credit)属于商户号维度的产品权限,不随下单接口版本变化;同一商户号在 APIv2 已申请过该权限的,迁移到 APIv3 后同样具备该权限。
正确应该怎么做:① 先确认 APIv2 与 APIv3 使用的是同一商户号;② 若该商户号在 APIv2 已申请过 limit_pay 权限,迁移 APIv3 后可直接沿用限制信用卡的能力;③ 若该商户号从未申请过该权限,需先为该商户号申请开通后再使用。
见 4013070347-APP下单、4013070176-APP支付开发指引 

 APIv3 的 APP 下单接口无等效入参可用,该商户号下单时无法禁用信用卡,业务侧「该笔订单禁止信用卡支付」的诉求无法实现。

二、开放平台应用注册、包名与签名配置

注意事项

说明、正确应该怎么做

不做会怎么样

 鸿蒙应用须在微信开放平台注册鸿蒙应用后再接入

 说明:HarmonyOS(鸿蒙)形态的应用使用微信开放平台能力前,需要在微信开放平台完成鸿蒙应用的注册或创建,不能沿用安卓 APK 侧已注册的应用信息。
正确应该怎么做:① 登录微信开放平台,按鸿蒙应用接入指引创建并注册鸿蒙应用;② 完成开放平台账号与应用认证,再按 APP 支付流程完成 APPID 与商户号绑定、APP 下单与 SDK 拉起。
见 微信开放平台-移动应用鸿蒙接入指引 

 鸿蒙形态的 APP 未注册鸿蒙应用时,无法正常使用开放平台与 APP 支付能力,支付无法拉起。

 开放平台登记的应用包名与应用签名须与 App 工程实际配置一致

 说明:APP 支付在调起支付阶段会校验调起方应用的应用包名与应用签名,是否与开放平台该移动应用 appid 的登记信息一致;安卓登记应用包名(AndroidManifest.xml 中声明的 package 值)与应用签名(由打包 keystore 生成的 32 位 md5 串),鸿蒙对应为 Bundle ID 与 Identifier,iOS 为 Bundle ID,登记值须与最终发布包的工程配置完全一致。
正确应该怎么做:① 在微信开放平台创建移动应用时,按 App 工程配置填写应用包名与应用签名(鸿蒙填 Bundle ID 与 Identifier),用签名生成工具由发布 keystore 生成签名串;② 包名或签名发生变更后,同步到开放平台【管理中心 / 修改应用 / 修改开发信息】中更新;③ 存在多渠道包、马甲包等不同变体时,以实际发起支付的那个包的配置为准登记;④ 接入 OpenSDK 后按官方 Android 接入指引完成工程配置。
典型反例:把调试 keystore 生成的签名登记到开放平台,而线上发布包使用另一套 keystore 打包;安卓应用运行在鸿蒙系统的安卓兼容容器内,SDK 取到的调用方标识是容器而非 App 本身;仅在开放平台创建了移动应用、未补充登记 Android 应用的包名与签名,就在安卓端用该 appid 调起支付。
见 4013070174-申请APP支付权限指引、4013070182-APP支付常见问题、4011936836-APP端开发步骤、4015478291-开发接入准备、创建移动应用APPID(微信开放平台)、Android应用包名和应用签名(微信开放平台)、OpenSDK安卓接入指引 

 调起支付时提示「包名不对,请检查包名是否与开放平台上填写的一致」「签名不对,请检查签名是否与开放平台上填写的一致」,或「暂时无法开通此服务 - 商家服务异常,请联系商家处理」,客户端回调 errCode=-1,无法拉起微信支付收银台;安卓端表现为「苹果可以拉起、安卓拉不起」。

三、下单与调起的 APPID 归属及请求路径

注意事项

说明、正确应该怎么做

不做会怎么样

 下单与调起支付须使用实际发起支付 App 自身的 appid 及对应的商户号、证书与密钥

 说明:下单传入的 appid 必须是实际拉起支付的那个 App 自己的 appid,不支持用 A 应用已开通权限的 appid 与商户号在 B 应用中预下单并拉起支付,也不支持通过两个 appid 做关联变相实现;同一商户号接入多个 App 时,各 App 还须使用与其自身绑定的商户号、API 证书与密钥(服务商模式的 sub_appid 取值与 appId/partnerId 配对见服务商分节)。
正确应该怎么做:① 每一个需要收款的对外发布 App 都在开放平台单独创建移动应用 appid,并单独申请 APP 支付权限、与商户号完成绑定;② 服务端用该 App 自己的 appid 调用 APP 下单接口获取 prepay_id;③ 客户端用同一 appid 组装 PayReq 并通过 sendReq 调起支付;④ 新接入的 App 复用原有支付业务代码时,逐项替换 appid、商户号、证书与密钥后再发起下单与调起。
典型反例:把 A 应用已开通权限的 appid 与商户号拿去在 B 应用预下单并拉起支付,或试图通过两个 appid 做关联绕过;商户号新增绑定另一公司的 App 后,仍沿用原 App 的 appid、商户号与密钥发起下单与调起;App 被第三方套壳重签名后仍使用原 appid 拉起支付。
见 4013070182-APP支付常见问题、4013070176-APP支付开发指引、4013070174-申请APP支付权限指引、4013289251-管理商户号绑定的APPID账号 

 调起支付返回「商户传入的APPID参数不正确」,客户端回调 errCode=-1,或提示签名不一致被拦截,用户无法完成付款。

四、客户端 OpenSDK 调起与回调实现

注意事项

说明、正确应该怎么做

不做会怎么样

 安卓 App 须按官方 OpenSDK 指引实现 WXPayEntryActivity 回调类

 说明:支付完成后从微信返回商户 App、以及接收支付结果回调,均由商户 App 侧通过微信 OpenSDK 自行实现;安卓端必须在自身应用包内提供 .wxapi.WXPayEntryActivity 并在 AndroidManifest.xml 中按官方写法声明,不能沿用其它自定义写法或只在 SDK 工程中处理。
正确应该怎么做:① 在应用工程(而非 SDK 工程)内实现 public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler,在 onResp 中处理支付结果;② 在 AndroidManifest.xml 中声明该 Activity:android:name=".wxapi.WXPayEntryActivity"、android:exported="true"、android:taskAffinity="填写你的包名"、android:launchMode="singleTask";③ 面向 Android 13 及以上时,在该 Activity 上去除 intent-filter,否则系统会屏蔽不匹配的 intent;④ 收到 onResp 后由商户后端调用查询订单接口确认最终支付状态,不要仅以回调作为入账依据。
典型反例:在 SDK 模块而非 App 主工程中处理支付回调;沿用非官方写法封装回调类。
见 4013070176-APP支付开发指引、4013070351-APP调起支付、微信开放平台 Android 接入指引 

 支付完成后点击「返回商家」仍停留在微信界面,无法跳回商户 App;onResp 回调不触发,商户 App 前端拿不到本次支付结果,只能依赖后端查单或用户主动返回。