最近使用微信服务商支付踩的坑,大坑小坑.....
商户ID与APPID不匹配
sub_openid and sub_appid not match
openid与商户appid不匹配
普通商户不允许传sub_mch_id
当前页面的url未注册
签名失败....
先看看未使用服务商支付时候的下单参数,也就是下图的普通商户版 的支付
这个普通商户的描述看上去没有问题只有一个appid与商户号mch_id, 服务商模式的话比普通商户模式多三个参数 sub_appid,sub_mch_id,sub_openid
子商户公众账号ID | sub_appid | 否 | String(32) | wx8888888888888888 | 微信分配的子商户公众账号ID,如需在支付完成后获取sub_openid则此参数必传。 |
子商户号 | sub_mch_id | 是 | String(32) | 1900000109 | 微信支付分配的子商户号 |
用户标识 | openid | 否 | String(128) | oUpF8uMuAJO_M2pxb1Q9zNjWeS6o | trade_type=JSAPI,此参数必传,用户在主商户appid下的唯一标识。openid和sub_openid可以选传其中之一,如果选择传sub_openid,则必须传sub_appid。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。 |
用户子标识 | sub_openid | 否 | String(128) | oUpF8uMuAJO_M2pxb1Q9zNjWeS6o | trade_type=JSAPI,此参数必传,用户在子商户appid下的唯一标识。openid和sub_openid可以选传其中之一,如果
选择传sub_openid,则必须传sub_appid。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。 |
服务商支付的文档中很容易搞混的地方如下图标注
到这里之后就明白 openid 跟 sub_openid 的关系了。openid 对应服务商用户的openid, sub_openid 对应商户用户的 openid
这两个参数只传其中一个即可
所以openid 服务商模式不需要传,因为我们一般用的是商户的appid获取的用户openid, 所以只需要传 sub_openid
填错 openid 跟 sub_openid 会提示 openid与商户appid不匹配
然后这里的支付密钥要填的是服务商的密钥,也就是说支付商户的密钥在服务商支付模式下是不需要的
否则报错:签名错误
最后需要注意看的一点是支付目录的设置,普通模式只需要在商户号的后台设置支付目录即可
服务商支付的话需要在服务商的后台设置支付目录,如图
否则有可能报错:当前页面的url未注册
其实微信服务商替支付商家申请了商户号之后,商户可以使用普通的商户支付,也就是说他其实可以用官方的【普通商户模式】进行支付
使用服务商支付是因为里面可能有支付费率的优惠,还可以参加一些广告的推广计划...总之就是有得赚就对了~