最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

uniapp微信小程序支付前端生成簽名并調(diào)起微信支付全部代碼

 更新時(shí)間:2024年07月11日 08:32:30   作者:流偌花火  
想要在uniapp中實(shí)現(xiàn)支付功能,通常需要使用第三方支付服務(wù),如微信支付、支付寶支付,等這篇文章主要給大家介紹了關(guān)于uniapp微信小程序支付前端生成簽名并調(diào)起微信支付的相關(guān)資料,需要的朋友可以參考下

一、安裝npm包、引入npm包

npm install jsrsasign

頁面引入依賴

import jsrsasign from 'jsrsasign'

簽名方式使用的是SHA256withRSA

二、準(zhǔn)備簽名的數(shù)據(jù)

let str = {
    appId: 'xxxxxxxxxxx',   //appId后端返回,可在小程序開發(fā)平臺獲取
    timeStamp: 'xxxxxxxxxxx', //10時(shí)間戳
    nonceStr: 'xxxxxxxxxxx',  //隨機(jī)字符串
    package: 'prepay_id=' + prepay_id, //通過JSAPI下單接口獲取到發(fā)起支付的必要參數(shù)prepay_id
 }

①、登錄小程序開發(fā)者平臺獲取appId,如圖所示

②、前端獲取10位時(shí)間戳

const time = Math.round(new Date().getTime()/1000).toString();
console.log(time);

③、前端獲取隨機(jī)字符串

getRandomString(length) {
      var result = ''
      var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
      var charactersLength = characters.length
      for (var i = 0; i < length; i++) {
        result += characters.charAt(Math.floor(Math.random() * charactersLength))
      }
      return result
},

④、prepay_id

調(diào)用后端發(fā)起支付接口返回,后端返回

三、簽名封裝

singH5(data) {
      let encipher = new jsrsasign.RSAKey()
      // 私鑰 在微信端申請好后會(huì)有,一般由后端提供
      const key = `-----BEGIN PRIVATE KEY-----
xxxxxxxxxxxxxxxxxxxxxx
-----END PRIVATE KEY-----`
      // 把私鑰轉(zhuǎn)成16進(jìn)制并設(shè)置秘鑰
      encipher = jsrsasign.KEYUTIL.getKey(key)
      // 設(shè)置SHA256withRSA方式加密
      const sig = new jsrsasign.KJUR.crypto.Signature({
        alg: 'SHA256withRSA',
      })
      // 初始化
      sig.init(encipher)
      // 需要加密的字段,這里注意下一定要按每一個(gè)字段一行,切末位加上 \n
      const str = `${data.appId}\n` + 
      			  `${data.timeStamp}\n` + 
      			  `${data.nonceStr}\n` + 
      			  `${data.package}\n`
      const paySign = sig.updateString(str)
      // 加密后,轉(zhuǎn)成base64
      return jsrsasign.hextob64(sig.sign())
    },

①、私鑰如果找不到,可以在商戶號平臺獲取

四、全部代碼

import jsrsasign from 'jsrsasign'

//SHA256簽名
singH5(data) {
      let encipher = new jsrsasign.RSAKey()
      // 私鑰 在微信端申請好后會(huì)有,一般由后端提供
      // 在商戶號平臺可以找到
      const key = `-----BEGIN PRIVATE KEY-----
xxxxxxxxxxxxxxxxxxxxxx
-----END PRIVATE KEY-----`
      // 把私鑰轉(zhuǎn)成16進(jìn)制并設(shè)置秘鑰
      encipher = jsrsasign.KEYUTIL.getKey(key)
      // 設(shè)置SHA256withRSA方式加密
      const sig = new jsrsasign.KJUR.crypto.Signature({
        alg: 'SHA256withRSA',
      })
      // 初始化
      sig.init(encipher)
      // 需要加密的字段,這里注意下一定要按每一個(gè)字段一行,切末位加上 \n
      const str = `${data.appId}\n` + 
      			  `${data.timeStamp}\n` + 
      			  `${data.nonceStr}\n` + 
      			  `${data.package}\n`
      const paySign = sig.updateString(str)
      // 加密后,轉(zhuǎn)成base64
      return jsrsasign.hextob64(sig.sign())
    },
	
	//獲取隨機(jī)字符串,長度可自定義
    getRandomString(length) {
      var result = ''
      var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
      var charactersLength = characters.length
      for (var i = 0; i < length; i++) {
        result += characters.charAt(Math.floor(Math.random() * charactersLength))
      }
      return result
},
 // 微信支付
    async setRecharge(price01, price02) {
      let _this = this
      let obj = {
       //個(gè)人數(shù)據(jù)
       //發(fā)起請求
      }
      let res = await setRechargeAPI(obj)
      if (res.code == 200) {
      	let prepay_id = res.data.prepay_id
 //---------------------------------------------------------------------------------------------
 //---------------------------------------------------------------------------------------------
 //---------------------------------------------------------------------------------------------
 //從這里開始,上面為發(fā)起訂單支付獲取  prepay_id
 //準(zhǔn)備數(shù)據(jù)
        let str = {
          appId: 'xxxxxxxxx',  //你自己的appId
          timeStamp: Math.round(new Date().getTime() / 1000).toString(),
          nonceStr: this.getRandomString(31),
          package: 'prepay_id=' + prepay_id,
        }
        //獲取簽名
        let sign = this.singH5(str)
        uni.requestPayment({
          provider: 'wxpay', //支付類型-固定值 這里是微信支付
          appId: str.appId,  //appId
          timeStamp: str.timeStamp, // 時(shí)間戳(單位:秒)要和上面簽名的一致
          nonceStr: str.nonceStr, // 隨機(jī)字符串
          package: str.package, // 固定值
          signType: 'RSA', //固定值
          paySign: sign, //簽名

          success: function (res) {
            console.log('支付成功')
            uni.showToast({
              icon: 'success',
              title: '支付成功',
            })
			//此處為自己的刷新數(shù)據(jù)方法
            //_this.getUserInfo()
          },

          fail: function (err) {
            console.log('支付失敗', err)
            uni.showToast({
              icon: 'none',
              title: '支付失敗',
            })
          },
        })
 //結(jié)束
 //---------------------------------------------------------------------------------------------
 //---------------------------------------------------------------------------------------------
 //---------------------------------------------------------------------------------------------
      }
    },

總結(jié) 

到此這篇關(guān)于uniapp微信小程序支付前端生成簽名并調(diào)起微信支付的文章就介紹到這了,更多相關(guān)uniapp小程序支付前端生成簽名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

克拉玛依市| 仁化县| 会昌县| 砚山县| 河间市| 瑞安市| 交城县| 富阳市| 榕江县| 比如县| 望江县| 玛纳斯县| 伊宁县| 长宁县| 通州市| 德惠市| 平塘县| 喜德县| 凌云县| 桂平市| 吉安县| 巍山| 东乡| 平塘县| 常宁市| 伊春市| 柞水县| 武安市| 中方县| 博湖县| 岳阳市| 阳曲县| 衡南县| 五台县| 咸宁市| 大城县| 始兴县| 故城县| 响水县| 祁东县| 遵义市|