收藏
回答

服务商模式小程序云开发v3支付功能正常,但是需要5-6秒钟才能跳出支付窗口?

问题:服务商模式。小程序通过云函数实现签名后得到了prepay_id,在小程序端用requestpayment拉起支付,支付的整个流程没有问题,能实现正确的支付。真机调试的时候,非常慢,在云函数传回预支付码后要等5到6秒才能跳出支付界面。而用云函数本地调试模式却非常快就能跳出支付界面,一秒内就出支付框。

不知道是哪里卡住了:

wx.cloud.callFunction({

    name: 'pay',

    data: {        

      sub_mchid: that.data.sub_mchid,

      out_trade_no: that.data.outTradeNo,//"1217752501201407033233368318",//outTradeNo,

      description: "aaa",

      amount: {

        total: 1,

      },

    },

    success: res => {

      console.log('HTTP 请求成功') // 3 

      console.log('res.result.prepay_id',res.result.prepay_id)    

      let nonceStr = that.getNonceStr()

      let timeStamp = parseInt(Date.now() / 1000)       

      let paySign =sp_appid + "\n" + timeStamp + "\n" + nonceStr + "\n" + 'prepay_id='+ res.result.prepay_id + "\n"

      console.log('paySign=',paySign)  

      console.log('res', res)  

      var sign_rsa = new RSA.RSAKey();      

 sign_rsa = RSA.KEYUTIL.getKey(privatekeyStr); 

 console.log('签名RSA:')

 console.log(sign_rsa)

 var hashAlg = 'sha256';

 var hSig = sign_rsa.signString(paySign, hashAlg); 

 hSig = RSA.hex2b64(hSig); // hex 转 b64

 console.log("签名结果:" + hSig)

 wx.requestPayment

 (

   {

     "timeStamp":timeStamp+'',

     "nonceStr": nonceStr,

     "package": "prepay_id="+res.result.prepay_id,

     "signType": "RSA",

     "paySign": hSig,

     "success":function(res){

       console.log('调用支付接口成功', res)

     },

     "fail":function(res){

       console.log('调用支付接口fail', res)

     },

     "complete":function(res){

       console.log('调用支付接口完成', res)

     }

   }

 )


最后一次编辑于  2023-03-28
回答关注问题邀请回答
收藏

2 个回答

  • 一路随风
    一路随风
    2023-03-28

    你好,谢谢你的建议。我也想过这个方法,但是从log来看,这些过程好像没占多长时间,而是明显再开始调用requestpayment这个函数后,卡住了。

    这些过程的延时时间有什么方法可以定量分析吗在小程序里?

    2023-03-28
    有用
    回复
  • 跨商通
    跨商通
    2023-03-28

    建议二次签名也在云函数中实现,云函数直接返回wx.requestPayment的5大参数。

    2023-03-28
    有用
    回复 3
登录 后发表内容