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

微信公眾號(hào)h5使用微信支付及支付寶支付的步驟(前端)

 更新時(shí)間:2024年07月15日 08:31:48   作者:前端、小老弟  
微信H5支付是一種支付解決方案,主要適用于商戶在微信客戶端外的移動(dòng)端網(wǎng)頁上展示商品或服務(wù)的場(chǎng)景,這篇文章主要給大家介紹了關(guān)于微信公眾號(hào)h5使用微信支付及支付寶支付(前端)的相關(guān)資料,需要的朋友可以參考下

方案:

一、微信支付

        考慮到授權(quán)的問題,微信支付使用JS-SDK進(jìn)行支付

二、支付寶支付

        問題:h5微信授權(quán)后是無法再微信瀏覽器直接打開支付寶的付款鏈接

        解決:使用一個(gè)中間頁 指向通過跳轉(zhuǎn)到瀏覽器進(jìn)行支付

實(shí)施:

一、微信支付:

第一步微信授權(quán),在main.js中添加路由攔截,獲取code,具體代碼如下  ↓

// main.js
router.beforeEach(async (to: RouteLocationNormalized,from: RouteLocationNormalized,next) => {
    // 判斷有沒有openId 即授權(quán)了直接放行
    if (store.state.openId) {
        next()
    } else {
        // 沒有授權(quán)去授權(quán)獲取code 再放行
        const code = await getCode()
        await queryInfo(code)
        next()
    }
})

// 獲取code
function getCode() {
    const code = getUrlCode()?.code
    if (!code) {
        // 沒有code 請(qǐng)求后端接口進(jìn)行鏈接跳轉(zhuǎn)獲取code(鏈接值微信的授權(quán)鏈接,成功授權(quán)后會(huì)跳回 回調(diào)地址,在回調(diào)地址上 會(huì)攜帶code參數(shù))
        return getWxOauthUrl({
            redirectUrl: window.location.href
        }).then(async ({data}) => {
            if (data.statusCode === 0) {
                window.location.replace(data.msg)
            }
        })
    } else {
        return code
    }
}

// 通過code 獲取用戶信息
function queryInfo(code: string) {
    return getUserInfo([code]).then(({data}) => {
        const result = data.data || {}
        store.commit('getUserInfo', result)
        store.commit('getUserOpenId', result.openId)
    })
}

// 獲取url 參數(shù)的通用方法
function getUrlCode() {
    // 截取url中的code方法
    const url = location.search;
    const theRequest = new Object();
    if (url.indexOf("?") !== -1) {
        const str = url.substr(1);
        const strs = str.split("&");
        for (let i = 0; i < strs.length; i++) {
            theRequest[strs[i].split("=")[0]] = strs[i].split("=")[1];
        }
    }
    return theRequest;
}

授權(quán)成功后即可以進(jìn)行支付環(huán)節(jié)

核心代碼

// 首先在index.html 中引入微信JS-SDK

<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

// 然后在支付邏輯中添加以下代碼即可~

if (typeof WeixinJSBridge == "undefined") {
               if (document.addEventListener) {
                  document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
                } else if (document.attachEvent) {
                  document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
                  document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
                }
              } else {
                onBridgeReady();
              }

function onBridgeReady(result) {
              WeixinJSBridge.invoke('getBrandWCPayRequest', {
                "appId": ,   //公眾號(hào)ID,由商戶傳入
                "timeStamp": ,   //時(shí)間戳,自1970年以來的秒數(shù)
                "nonceStr": ,      //隨機(jī)串
                "package": ,
                "signType": ,     //微信簽名方式:
                "paySign": 
              },
              function (res) {
                if ((res.errMsg || res.err_msg) === "get_brand_wcpay_request:ok") {
                  // 使用以上方式判斷前端返回,微信團(tuán)隊(duì)鄭重提示:
                  //res.err_msg將在用戶支付成功后返回ok,但并不保證它絕對(duì)可靠。
                  
                }
              });
            }

這樣 微信支付就已經(jīng)結(jié)束了

二、支付寶支付:

因?yàn)槭窃谖⑿攀跈?quán)后的h5頁面,所以不能直接在微信頁面直接進(jìn)行支付

所以第一步就是在點(diǎn)擊支付的時(shí)候,進(jìn)行跳轉(zhuǎn)到中間頁,

先定義一個(gè)中間頁: pay.html

注意:要把這個(gè)頁面放到publish目錄下

// 跳轉(zhuǎn)中間頁,把請(qǐng)求支付的參數(shù)一并帶過去
window.open(`${location.origin}/pay.htm?params=${encodeURIComponent(JSON.stringify(params))}`)

pay.html核心內(nèi)容如下

let getQueryString = function (url, name) {
        let reg = new RegExp("(^|\\?|&)" + name + "=([^&]*)(\\s|&|$)", "i");
        if (reg.test(url)) return RegExp.$2.replace(/\+/g, " ");
    };

    // 獲取接口返回的表單 進(jìn)行支付
    function handlePayForm(data) {
        const div = document.createElement("div");
        div.setAttribute("id", "payContainer");
        div.innerHTML = data
        document.body.appendChild(div);
        const payContainer = document.querySelector("#payContainer");
        const submit = payContainer.querySelector(
            'form[name="punchout_form"] input[type="submit"]'
        );
        submit.click();
        setTimeout(function () {
            div.remove();
        }, 500);
    };
    if (location.hash.indexOf('error') !== -1) {
        alert('參數(shù)錯(cuò)誤,請(qǐng)檢查');
    } else {
        // 判斷當(dāng)前的瀏覽器環(huán)境是不是微信瀏覽器
        let ua = navigator.userAgent.toLowerCase();
        let tip = document.querySelector(".weixin-tip");
        let tipImg = document.querySelector(".J-weixin-tip-img");
        const query = JSON.parse(decodeURIComponent(getQueryString(location.href, 'params')))

        if (ua.indexOf('micromessenger') !== -1) {
            // 如果是微信里的頁面,做個(gè)指引(請(qǐng)通過瀏覽器進(jìn)行支付)
            // 這個(gè)頁面自己定義即可
        } else {
            // 好的,這是外部瀏覽器,請(qǐng)求接口獲取支付的from表單
            axios({
                url: '',
                data: query,
                method: 'POST',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                }
            }).then(({data}) => {
                if (data.statusCode === 0) {
                    // 后端返回的form表單進(jìn)行支付
                    if (data.data && data.data.returnCode === "SUCCESS") {
                        // data.data.result ==> 是一個(gè)支付的from表單
                        handlePayForm(data.data.result)
                    }
                }
            })
        }
    }

這樣即可 跳轉(zhuǎn)到微信外部瀏覽器進(jìn)行正常的支付功能

總結(jié)

到此這篇關(guān)于微信公眾號(hào)h5使用微信支付及支付寶支付的文章就介紹到這了,更多相關(guān)公眾號(hào)h5使用微信及支付寶支付內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • template.js前端模板引擎使用詳解

    template.js前端模板引擎使用詳解

    本篇文章主要介紹了template.js前端模板引擎使用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • 深入理解Javascript閉包 新手版

    深入理解Javascript閉包 新手版

    最近在網(wǎng)上查閱了不少Javascript閉包(closure)相關(guān)的資料,寫的大多是非常的學(xué)術(shù)和專業(yè)。對(duì)于初學(xué)者來說別說理解閉包了,就連文字?jǐn)⑹龆己茈y看懂。撰寫此文的目的就是用最通俗的文字揭開Javascript閉包的真實(shí)面目。
    2010-12-12
  • javascript改變position值實(shí)現(xiàn)菜單滾動(dòng)至頂部后固定

    javascript改變position值實(shí)現(xiàn)菜單滾動(dòng)至頂部后固定

    現(xiàn)在很多網(wǎng)站都有這樣的一個(gè)效果,當(dāng)頁面滾動(dòng)到一定高度時(shí),菜單欄會(huì)固定在頁面頂部;該效果在 ie6 下不支持,因?yàn)閕e6不支持 position:fixed,效果很不錯(cuò),感興趣的朋友可以了解下啊
    2013-01-01
  • 微信小程序下拉菜單效果的實(shí)例代碼

    微信小程序下拉菜單效果的實(shí)例代碼

    這篇文章主要介紹了微信小程序下拉菜單效果的實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • js實(shí)現(xiàn)有時(shí)間限制消失的圖片方法

    js實(shí)現(xiàn)有時(shí)間限制消失的圖片方法

    這篇文章主要介紹了js實(shí)現(xiàn)有時(shí)間限制消失的圖片方法,實(shí)例分析了javascript操作setTimeout及圖片特效操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • JS正則獲取HTML元素的方法

    JS正則獲取HTML元素的方法

    這篇文章主要介紹了JS正則獲取HTML元素的方法,結(jié)合實(shí)例形式分析了JS針對(duì)頁面HTML元素正則操作相關(guān)技巧與注意事項(xiàng),需要的朋友可以參考下
    2017-03-03
  • javascript常見操作匯總

    javascript常見操作匯總

    這篇文章主要介紹了javascript常見操作,有針對(duì)字符串、時(shí)間、表單等的操作,以及驗(yàn)證、收藏、隨機(jī)數(shù)等其他常見技巧,需要的朋友可以參考下
    2014-09-09
  • TypeScript中的接口Interface詳解(對(duì)象類型的強(qiáng)大工具)

    TypeScript中的接口Interface詳解(對(duì)象類型的強(qiáng)大工具)

    TypeScript中的接口是一個(gè)強(qiáng)大而靈活的特性,它為我們提供了一種清晰、簡(jiǎn)潔的方式來定義對(duì)象的結(jié)構(gòu)和類型,通過使用接口,我們可以編寫更加健壯、可維護(hù)的代碼,這篇文章主要介紹了TypeScript中的接口(Interface):對(duì)象類型的強(qiáng)大工具,需要的朋友可以參考下
    2024-08-08
  • 使用JavaScript中的lodash編寫雙色球效果

    使用JavaScript中的lodash編寫雙色球效果

    本文通過實(shí)例代碼給大家介紹的使用JavaScript中的lodash編寫雙色球效果,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-06-06
  • js中的eventType事件及其瀏覽器支持性介紹

    js中的eventType事件及其瀏覽器支持性介紹

    js中的eventType事件想必大家都不陌生吧,下面為大家詳細(xì)介紹下一般的事情及瀏覽器支持性,感興趣的朋友可以參考下
    2013-11-11

最新評(píng)論

长宁县| 连山| 辉南县| 志丹县| 玛沁县| 门源| 民丰县| 托克逊县| 黄浦区| 云和县| 江都市| 昌黎县| 塘沽区| 滦平县| 区。| 定兴县| 兖州市| 新丰县| 鄂州市| 松潘县| 淮阳县| 南澳县| 长汀县| 葫芦岛市| 邵东县| 乐清市| 开原市| 图们市| 万源市| 金寨县| 峨边| 榆林市| 桂林市| 奈曼旗| 唐海县| 河源市| 松江区| 锦屏县| 宣城市| 丁青县| 桐乡市|