小程序wx.requestPayment报错/无响应信息梳理

这篇具有很好参考价值的文章主要介绍了小程序wx.requestPayment报错/无响应信息梳理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大风起兮云飞扬,安得猛士兮走四方,BUG,任何时候都要改,不改不行,你想想,你自己一个人,下了班,吃着火锅还唱着歌,突然支付就不能用了!
本文整理了关于微信小程序wx.requestPayment的报错或无响应的问题。报错信息与回答多整理于[微信开发社区],本文仅做整理。(https://developers.weixin.qq.com/community/develop/mixflow)
一、报错
问题1:

requestPayment:fail no permission
解决办法:
1. 重启项目,再次尝试。
2. 核对appID,如一致,尝试重新复制粘贴一边

问题2:

requestPayment:fail jsapi has no permission
// 开发及体验版本皆可支付,但正式版本不行
解决办法:
ios支付被平台限制,去申诉完成

问题3:

requestPayment:fail 支付验证签名失败
解决办法:
1. 在签名的时候,需要和appId(I为大写)一起签名,因为在调用requestPayment接口的时候不需要传入appId
2. 签名问题,一般是你的签名参数本身不符合文档规范,大小写。转义,排序。等等都必须完全符合规范。确认参数无误,可以更换一下KEY。还有参数的编码,可能出现乱码问题,要注意编码UTF8

问题4:

视频号跳入小程序之后,在小程序中下订单时,调用wx.requestPayment()支付时,一直支付失败
解决办法:
通过视频号进入小程序下单的,需要先将商品推送审核,并调用wx.requestOrderPayment()进行支付。
如果搜索进入小程序,可正常调用wx.requestPayment()

问题5

requestPayment:fail parameter error: parameter.noner.paySign should be String instead of Undefined
这个就不用说了吧,调起支付一共需要paySign、timeStamp、nonceStr、package、signType五个参数,每个参数都必须是字符串,不能是null和undefined。如果报这个错误,就console检查一下参数吧。

问题6

APP调起支付返回:-1
解决办法(官方回答):
1[使用签名检查工具](https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=20_1)校验签名算法是否有误

2、确认秘钥是否有误(服务商模式使用服务商商户号秘钥,秘钥是在商户平台配置,如果同一商户号调用其它接口成功可排除是秘钥问题)

3、确认接口实际的请求参数与生成签名原串的参数一致,不能增加或缺少参数(可通过打印签名原串进行排查)

4、确认参数的大小写,参数名与接口文档一致

5、签名原串的参数值使用原始值,不需要encode

6、接口需要使用UTF-8编码

7IOS正常,安卓异常的情况下,请排查包名与包签名

8、未注册APPID

9、项目设置APPID不正确

10、注册的APPID与设置的不匹配

11、服务商模式下,统一下单中的sub_appid是否有传入

12、“唤起支付接口”中的签名类型是否与“统一下单接口”的类型一致

好了,这是暂时整理到的比较常见的报错问题,下面来谈下我遇到的神仙问题。

二、无响应

先来谈下是怎样无响应的

机型:iphone8、12、13
系统:不限
场景:用户点击支付,调用预支付后,调取wx.requestPayment,无响应
看代码

...
let data = res.data.data;
try {
  console.log(data); // 正常打印
  wx.requestPayment({
    timeStamp: data.timeStamp,
    nonceStr: data.nonceStr,
    package: data.package,
    signType: 'MD5',
    paySign: data.paySign,
    success (res) { 
    	// 无响应
    },
    fail (res) {
		// 无响应
    },
    complete(res) {
    	// 无响应
    }
  })
} catch (err) {
  // 不报错
  console.log(err)
} finally {
  console.log('执行了'); // 正常执行
}

这套支付代码已经安稳运行了3年,从来没出过问题,所以一开始就没往代码上考虑,怀疑是其他部门更改了配置项之类的,核对后没问题,又怀疑是v2和v3版本的问题,紧急写了v3的demo,发现也不能调用。

所以怀疑不是配置项或者后台代码的问题,开始对前端代码进行核对,代码一个方法一个方法的删,看到底是哪个方法会影响支付,终于,

onUnload: function () {
  for (let timer = 0; timer < 1000; timer++) {
    clearInterval(timer)
  }
},

因为订单列表会存在大量定时器,所以我在3年前,写了这段代码,在页面卸载时清除1000次定时器。

删除这段代码后,小程序可以正常支付,所以感觉像是清除定时器时阻塞了微信小程序底层的某些方法。

现在改变了新的写法:

let setIntervals = {}; 
setIntervals[`${id}`] = setInterval(() => {
...
...
onUnload: function () {
   for(var each in setIntervals){
     clearInterval(setIntervals[each]);
   }
},

这样就可以正确删除定时器,并且微信支付也没有异常了。

现在终为年轻付出了代价。
完结,撒花!文章来源地址https://www.toymoban.com/news/detail-484837.html

到了这里,关于小程序wx.requestPayment报错/无响应信息梳理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 关于微信小程序如何调用wx.login获取openId和用户信息

    关于微信小程序如何调用wx.login获取openId和用户信息

    首先我们需要在微信开发小工具获取code临时登录凭证,下面是js文件也就是一些需要调用的函数。需要做这个的话我们需要上微信公众平台获取AppId和AppSecret 这个是页面 这是获取到的code 本来获取用户信息是getUserInfo但是微信官方已经把那个接口废弃了,只能获取到一些默认

    2024年02月11日
    浏览(9)
  • 小程序隐私信息授权wx.onNeedPrivacyAuthorization vue2+uniapp / vue3

    小程序隐私信息授权wx.onNeedPrivacyAuthorization vue2+uniapp / vue3

    记录一下微信隐私信息授权接口相关配置使用。小程序是uniapp+vue2开发 1.首先需要去到微信公众平台,申请小程序中用到的所有隐私接口。可参考 用户隐私保护指引填写说明 | 微信开放文档 小程序用户隐私保护指引内容介绍 | 微信开放文档 在这里配置和查看需要申请的接口

    2024年02月06日
    浏览(7)
  • 小程序中使用wx.getUserProfile报错getUserProfile:fail getUserAvatarInfo fail

    小程序中使用wx.getUserProfile报错getUserProfile:fail getUserAvatarInfo fail

    一点进去小程序的登录/注册按钮的时候显示报错,检查小程序appId是否填写正确。 1、可能是小程序的appId没填写对,把appId改成自己的 2、我找了下其他的解答,可能是微信文档改版 分析原因:最开始去网上找资料说是必须要用户点击才可以使用,否则就会报这个错误,我就

    2024年02月04日
    浏览(8)
  • wx.getUserProfile is not a function微信小程序报错

    wx.getUserProfile is not a function微信小程序报错

    在使用小程序wx.getUserProfile接口调用时报错:wx.getUserProfile is not a function  解决办法: 在微信开发者工具上打开详情,对调试基础库进行升级  OK了!

    2024年02月07日
    浏览(9)
  • 企业微信小程序在调用wx.qy.login时返回错误信息qy.login:fail

    企业微信小程序在调用wx.qy.login时返回错误信息qy.login:fail

    原因是大概是绑定了多个企业但是在开发者工具中没有选择正确的企业 解决方法:  重新选择企业后即可成功获取code

    2024年02月13日
    浏览(9)
  • 微信小程序wx.canvasToTempFilePath,draw()报错 ctx.draw is not a function

    微信小程序wx.canvasToTempFilePath,draw()报错 ctx.draw is not a function

    微信小程序canvas转图片临时路径,使用wx.canvasToTempFilePath方法,官方文档中写了要在 draw() 回调里调用该方法才能保证图片导出成功。 然而,显示是写在draw()里面会报错draw is not a function,查阅了一下资料,新版 Canvas 2D 接口与 Web 一致,是没有 draw 方法的。https://developers.weix

    2024年02月11日
    浏览(8)
  • 微信小程序报错qqmap-wx-jssdk.js‘ is not defined解决方法

    微信小程序报错qqmap-wx-jssdk.js‘ is not defined解决方法

     今天做了一个需求,需要接入腾讯地图,报错qqmap-wx-jssdk.js\\\' is not defined报了一下午,我苦苦找不到原因,太自信了,因为另外一个地方的腾讯地图引入很轻松,我也是按照官网给的方法写的,怎么都引入不进去,网上的方法都尝试了一遍都不行。刚刚解决了,先说报错原因

    2024年02月04日
    浏览(8)
  • 微信小程序报错“qqmap-wx-jssdk.js‘ is not defined”解决方法

    微信小程序报错“qqmap-wx-jssdk.js‘ is not defined”解决方法

    一、问题描述 在使用微信小程序开发过程中,有时会遇到“qqmap-wx-jssdk.js‘ is not defined”的报错信息。这个错误通常与腾讯地图SDK相关,表明小程序试图引用一个未定义的脚本。 二、解决方案 解决此问题的方法有多种,以下是一些常见的解决方案: 检查引用顺序:确保在使

    2024年04月15日
    浏览(11)
  • 微信小程序wx.createInnerAudioContext播放play报错errMsg: “operateAudio:fail jsapi has no permission, event=ope

    微信小程序wx.createInnerAudioContext播放play报错解决 微信小程序wx.createInnerAudioContext播放play报错errMsg: “operateAudio:fail jsapi has no permission, event=operateAudio, runningState=background, permissionMsg=permission got, detail=jsapi has no permission” 解决方案: 在创建onError回调函数再次执行播放函数

    2024年02月08日
    浏览(19)
  • 微信小程序报错wx.getLocation need to be declared in the requiredPrivateInfos field in app.json

    微信小程序报错wx.getLocation need to be declared in the requiredPrivateInfos field in app.json

    wx.getLocation need to be declared in the requiredPrivateInfos field in app.json/ext.json(env: Windows,mp,1.06.2301160; lib: 2.30.3) 自 2022 年 7 月 14 日后发布的小程序,使用以下8个地理位置相关接口时,需要声明该字段,否则将无法正常使用。 文件app.json   全局配置 | 微信开放文档 微信开发者平台文档

    2024年02月05日
    浏览(3)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包