服务商支持拉起哪些支付类型,能否使用APP或H5支付?
结论
如果这里的“服务商”指微信支付服务商模式,可用的方式并不只有付款码支付和 JSAPI 支付。满足产品开通、商户资质、应用绑定等条件后,服务商通常可以为特约商户发起以下支付:
- JSAPI 支付
- Native 支付,即扫码支付
- APP 支付
- H5 支付
- 付款码支付
APP 和 H5 支付都可以接入,但服务商不能仅凭服务商身份直接调用。能否成功发起支付,要看服务商和特约商户是否已经开通相应产品,以及公众号、小程序、移动应用、域名等支付场景是否配置完成。
为什么有时只能使用付款码或 JSAPI
可用的支付方式由服务商模式和已开通的支付产品共同决定。服务商模式规定的是服务商代特约商户发起交易,并不会自动开通所有支付方式。
APP 或 H5 支付无法拉起,通常有以下原因:
- 特约商户没有开通对应的支付产品。
- APP 的应用信息、
appid、包名等尚未完成绑定。 - H5 支付域名、业务场景或相关资料尚未配置完成。
- 请求调用了普通商户接口,没有使用服务商模式对应的合单或合作伙伴接口。
- 请求中的服务商商户号、特约商户号与应用标识不匹配。
- 前端直接调用下单接口,没有先由服务端完成签名和下单。
接入步骤
1. 确认支付场景
先根据用户实际付款环境选择支付方式:
| 场景 | 建议支付方式 |
|---|---|
| 微信内公众号页面 | JSAPI 支付 |
| 微信小程序 | 小程序支付,通常使用 JSAPI 下单能力 |
| 原生移动应用 | APP 支付 |
| 手机浏览器网页 | H5 支付 |
| 用户扫描商户二维码 | Native 支付 |
| 商户扫描用户付款码 | 付款码支付 |
JSAPI、APP 和 H5 不能作为前端拉起方式随意替换。支付方式必须与用户所处环境、应用主体和产品权限相匹配。
2. 检查产品权限
登录微信支付商户平台,分别检查服务商和特约商户是否拥有目标支付产品的权限。产品名称、开通入口和审核条件可能随平台调整,具体以当前商户平台展示的信息为准。
还需要确认:
- 服务商商户号可以正常使用。
- 特约商户号状态正常。
- 特约商户已授权服务商开展相关业务。
- APP、公众号、小程序或 H5 域名已按要求绑定。
- 商户经营类目与实际业务一致。
3. 使用服务商模式接口下单
微信支付 API v3 的服务商模式通常使用 /v3/pay/partner/transactions/... 下的接口,例如:
POST /v3/pay/partner/transactions/jsapi
POST /v3/pay/partner/transactions/native
POST /v3/pay/partner/transactions/app
POST /v3/pay/partner/transactions/h5
付款码支付可能采用不同的接口体系。接入时应根据当前官方文档选择对应接口,不能直接套用 JSAPI、APP 或 H5 的请求结构。
4. 服务端下单并返回拉起参数
下面是 APP 支付的示意请求。字段是否必填及其具体取值,应以当前微信支付 API 文档为准:
{
"sp_appid": "wx_service_provider_appid",
"sp_mchid": "1900000001",
"sub_appid": "wx_sub_merchant_appid",
"sub_mchid": "1900000002",
"description": "订单商品",
"out_trade_no": "ORDER_202609130001",
"notify_url": "https://merchant.example.com/pay/notify",
"amount": {
"total": 100,
"currency": "CNY"
}
}
服务端调用接口时,需要按照微信支付 API v3 的规则生成请求签名,例如:
POST /v3/pay/partner/transactions/app HTTP/1.1
Host: api.mch.weixin.qq.com
Authorization: WECHATPAY2-SHA256-RSA2048 mchid="...",nonce_str="...",timestamp="...",serial_no="...",signature="..."
Content-Type: application/json
Accept: application/json
APP 下单成功后,服务端通常会获得 prepay_id,随后需要按照 APP 支付规则生成客户端调起支付所需的签名参数。私钥和签名过程必须保留在服务端,不能写入 APP。
H5 支付的请求结构中还需要包含 H5 场景信息,例如:
{
"sp_appid": "wx_service_provider_appid",
"sp_mchid": "1900000001",
"sub_mchid": "1900000002",
"description": "订单商品",
"out_trade_no": "ORDER_202609130002",
"notify_url": "https://merchant.example.com/pay/notify",
"amount": {
"total": 100,
"currency": "CNY"
},
"scene_info": {
"payer_client_ip": "203.0.113.10",
"h5_info": {
"type": "Wap"
}
}
}
下单成功后,接口通常会返回 h5_url。移动端浏览器需要跳转到该地址,才能继续完成支付。
注意事项
- H5 支付主要用于微信外的手机浏览器。微信内网页一般应根据具体场景使用 JSAPI 支付。
- APP 支付需要原生 APP 配合微信客户端 SDK,普通网页无法通过 APP 支付接口直接拉起。
sp_mchid是服务商商户号,sub_mchid是特约商户号,两者不能混用。sp_appid、sub_appid是否必填,取决于支付方式、应用归属和绑定关系,具体以对应接口文档为准。- 下单成功不代表付款成功。订单最终状态需要通过支付通知并结合查单接口确认。
- 支付通知必须验签。如果涉及资源数据加密,还需要使用 API v3 密钥解密。
out_trade_no应保持唯一。同一订单重复提交时,金额和商户信息必须保持一致。- 不要在客户端保存商户 API 私钥、API v3 密钥或其他服务端凭据。
如果当前账户只能看到付款码支付和 JSAPI 支付,通常不是因为服务商模式不支持 APP 或 H5,而是相应产品尚未开通、应用关系尚未绑定,或者特约商户资质不符合当前平台要求。
备注:内容仅供参考。