小程序

小程序微信支付

payWeixin(data ={
    "timeStamp": "1691715565",
    "package": "prepay_id=wx110904396389276e5758748c9a480d0000",
    "appid": "wx2a38f8656e9ef3d8",
    "nonceStr": "89i62aqlrewekvoqng9oy08pi3inwoez",
    "paySign": "751A60B269F8AD4E444B6D73E7C01788"
  }){
      //data是统一下单接口返回的数据
      let that = this
      let random = (Math.random()).toString() //这个随机数,就是个坑,一定要变成字符串

      let mch_key = 'SDFSDFSDFHFKFJ973N4NNDFG98857739'
      //obj里面的key一定要是驼峰名称
      let obj = {
        appId: data.appid,
        nonceStr: random,
        package: data.package,
        signType:'MD5',
        timeStamp:data.timeStamp
      }
      console.log('obj:',obj)

      //参数名ASCII码从小到大排序(字典序)
      let arr = Object.keys(obj).sort().map(item => {
        return `${item}=${obj[item]}`;
      });
      console.log('arr:',arr)
    //最后拼接上key(商户密钥)得到字符串
      let str = arr.join('&') + '&key=' + mch_key;
      console.log(str);
    //对str进行MD5运算,再将得到的字符串所有字符转换为大写
      let paySign = md5(str).toUpperCase()
      console.log('paySign:',paySign);
      wx.requestPayment({
        "timeStamp":data.timeStamp,
        "nonceStr": random,
        // "package": "prepay_id="+data.prepay_id,
        "package": data.package,
        "signType": "MD5",
        "paySign": paySign,
        "success":function(res){
            //在支付成功的回调里面,还行执行其他方法就要加setTimeout,不然会报错,我也不知道为什么
          wx.showToast({
            title: '支付成功',
            icon:'success'
          })
          setTimeout(function(){
            wx.switchTab({
              url: '/pages/my/index',
            })
          },1500)
        },
        "fail":function(res){
          console.log(res);
          if (res.errMsg==='requestPayment:fail cancel') {
            wx.showToast({title: '用户取消支付',icon:'none',duration:2000})
          } else {
            wx.showToast({title: res.errMsg,icon:'none',duration:2000})
          }
        },
        "complete":function(res){}
      })
  }
上次更新: