收藏
回答

requestPayment有可能不执行success吗?

requestPayment的success和fail都有执行redictTo跳转其他页面,也就是说唤起了支付,不管支不支付成功都会跳转。

现在看到服务器日志里不少用户,点击支付按钮,支付后大概1分钟才回到小程序页面,但没有立即执行success,而是用户再次点了支付按钮后才执行success。

很奇怪,有没有相同问题的?

回答关注问题邀请回答
收藏

2 个回答

  • 郭毅.
    郭毅.
    2021-09-04

    需要用户点击完成或者返回才会执行回调。如果用户直接物理返回是不会执行的。如果你是想回到这个页面不管是否成功都跳转页面,那你需要自己做个标记,看是否唤起过支付,再做跳转

    2021-09-04
    有用
    回复 1
    • momo
      momo
      2021-09-04
      我试了ios和android,物理返回也是会执行success或者fail的。
      2021-09-04
      回复
  • 卖女孩的小火柴
    卖女孩的小火柴
    2021-09-04

    我是这样做的:(伪代码)

    setInterval(()=>{
      this.calcTime();
      if(i%3) this.chkPayment();
      i++;
     },1000);
    


    其中calcTime是计算剩余时间,页面进行倒数;

    i是计算第几次执行,由于不需要太过精准,所以calcTime里面也是通过i来计算过去多少秒,另外就是大概3秒执行一次chkPayment;

    chkPayment 就是检查服务器支付状态情况。

    *另外onHide的时候记得销毁setInterval。

    我自己实测过很多次,用户支付完点击完成时,小程序页面已经跳转走了。因为计时器一直在运行,包括用户支付途中。

    至于你说的success和fail里,我都没跑任何代码....

    2021-09-04
    有用
    回复 3
    • momo
      momo
      2021-09-04
      谢谢!   我试了唤起支付后回到小程序,会执行onShow,这时候去判断是否已经支付完成更简单点。
      2021-09-04
      回复
    • 卖女孩的小火柴
      卖女孩的小火柴
      2021-09-07回复momo
      會有坑,如果推送結果延遲或者服務器沒及時處理支付完成信息(一般大批訂單的時候)會導致onShow獲取到的支付狀態有誤,我之前就遇到過了,那時候客戶是用了台2m的虛擬主機,網絡原因導致的。所以後來涉及支付狀態,都是通過定時函數進行查詢。
      2021-09-07
      回复
    • momo
      momo
      2021-09-07
      你说得对,各种情况都要考虑到。不然用户会很疑惑。
      2021-09-07
      回复
登录 后发表内容