服务商模式小程序支付签名失败问题,拜求各位帮忙看看问题出在哪儿
发布于 7 年前 作者 yan94 12728 次浏览 来自 问答

开发小程序时调起支付一直提示

{err_code: "2", err_desc: "支付验证签名失败", errMsg: "requestPayment:fail"}

我是以服务商模式发起的支付,统一下单什么都成功了,但是一到调起支付的时候就验证签名失败。我服务端返回的6个参数如下:

Array
(
   [appId] => wxc21534f70356ba05  //这里是服务商的appid,不是小程序的
   [nonceStr] => bangkkwrslpveua69dek54k344r5coz7
   [package] => prepay_id=wx201710101537105ea7593fcb0689926766
   [signType] => MD5
   [timeStamp] => 1507621030
   [paySign] => E5C4A3BC291A45EDBD3FF131E93E5280
)

根据服务商模式的小程序支付文档:服务商模式下应为当前调起支付的小程序的appid,貌似问题就出在这个这个appid上,而在我的小程序是第三方平台的模板小程序,特约商户授权后的extAppid:为"wx1ce0dfce6268ceac",也就是当前小程序的appid。


附上统一下单的整个过程的参数,烦请各位帮忙看看问题是出在哪儿。

统一下单参数:
{
   "appid":"wxc21534f70356ba05",//服务商appid
   "attach":"",
   "body":"asdfasdfasdfa",
   "goods_tag":"",
   "mch_id":"1481143442",//服务商mch_id
   "nonce_str":"sb0q2rzoxu4e40kl5y9lf9pqzhzaw03m",
   "notify_url":"https://pay.zsmart.me/wxpay/notify",
   "out_trade_no":"2017092209341118572",
   "spbill_create_ip":"220.172.54.174",
   "sub_appid":"wx1ce0dfce6268ceac",//授权的小程序
   "sub_mch_id":"1489086632",//特约商户号
   "sub_openid":"obQb60MPr_xxtiLNeg6iLZ-Itahg",//与sub_appid对应的sub_openid
   "time_expire":"20171010154710",
   "time_start":"20171010153710",
   "total_fee":"7000",
   "trade_type":"JSAPI",
   "sign":"51CD7C77D29515FE007B9E5ADD1D8DBD"
}
统一下单成功返回预付单:
Array
(
   [appid] => wxc21534f70356ba05
   [mch_id] => 1481143442
   [nonce_str] => MXP4KyE43Jqwufgk
   [prepay_id] => wx201710101537105ea7593fcb0689926766
   [result_code] => SUCCESS
   [return_code] => SUCCESS
   [return_msg] => OK
   [sign] => FC4576C71554FB56512C2E65C91882B7
   [sub_appid] => wx1ce0dfce6268ceac
   [sub_mch_id] => 1489086632
   [trade_type] => JSAPI
)
预付单再次签名后的jsApiParamter
Array
(
   [appId] => wxc21534f70356ba05 //为什么
   [nonceStr] => bangkkwrslpveua69dek54k344r5coz7
   [package] => prepay_id=wx201710101537105ea7593fcb0689926766
   [signType] => MD5
   [timeStamp] => 1507621030
   [paySign] => E5C4A3BC291A45EDBD3FF131E93E5280
)

拜托拜托

10 回复

参数,注意参数吗,一个个比对。

我就因为参数名,一个微小的差异,搞了很久。。。。。。

我也不懂了,官方给出的文档是用小程序的appId

sub_appid 就是小程序的appId

sub_appid 是个什么?  同样的问题,在线等求解~

服务商模式的小程序支付步骤,1,在后台绑定小程序appid与子商户号的关联关系(银行服务商下的特约商户由银行配置)2.统一下单的时候sub_appid传小程序已关联的appid;3. 获取到prepayid后, 再根据支付文档说明重新生成一次签名,参与签名的字段appId(小程序的appid),timeStamp,nonceStr,packagesignType(详细说明见支付文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_sl_api.php?chapter=7_7&index=5), 将这5个字段+生成的sign,6个字段返回给小程序端调起支付

换了的,换成小程序的APPID:wx1ce0dfce6268ceac依然是一样 的结果,感觉问题是不是出在统一下单的时候的参数配置配置上呢。

请问下最后一个签名是appId 和sub_appid 都要传还是只传sub_appid

nonceStr,packagesignType,timeStamp和sub_appid再次生成一个签名,是这种意思吗@熊旭

哪几个参数呢?是那5个吗?

Array
(
   [appId] => wxc21534f70356ba05  换成小程序的APPID试试
   [nonceStr] => bangkkwrslpveua69dek54k344r5coz7
   [package] => prepay_id=wx201710101537105ea7593fcb0689926766
   [signType] => MD5
   [timeStamp] => 1507621030
   [paySign] => E5C4A3BC291A45EDBD3FF131E93E5280
)
回到顶部