vue2 spa單頁(yè)項(xiàng)目實(shí)現(xiàn)微信支付

spa單頁(yè)項(xiàng)目實(shí)現(xiàn)微信支付坑比較多,一步一步來(lái)分析吧痘绎,相關(guān)技術(shù)vue2津函、 vue-router、vue-resource孤页。服務(wù)器api不扯了尔苦。

具體功能:充值模塊

  • 實(shí)現(xiàn)思路

1.前端充值頁(yè)面Recharge.vue請(qǐng)求服務(wù)器/api/user/recharge生成本地訂單并返回訂單號(hào)order_id
2.根據(jù)orderId請(qǐng)求服務(wù)器/api/wx/make-order來(lái)創(chuàng)建微信支付訂單(微信統(tǒng)一下單api,涉及支付簽名)行施,該api主要功能是創(chuàng)建微信訂單并且返回微信H5拉取支付控件chooseWXPay(params)params參數(shù)

{
    appId: '',
    noceStr: '',
    package: '',
    paySign: '',
    signType: '',
    timestamp: ''    
}

3.通過(guò)調(diào)用wx.chooseWXpay(params)來(lái)拉取支付控件

params.success = res => {
    // 支付成功
};
wx.chooseWXPay(params);

4.剩下的就是服務(wù)器支付回調(diào)notify處理了

  • 實(shí)現(xiàn)方案

服務(wù)端api
// 充值下單api
post /api/user/recharge
// 創(chuàng)建微信訂單api  
// @params orderId
post /api/wx/make-order
// 生成sdk配置參數(shù)
// @params url 當(dāng)前頁(yè)面url地址
post /api/wx/sdk-config
充值路由 routes.js
import Recharge from './pages/home/Recharge.vue';
let routes = [
    { path: '/home/recharge',  component: Recharge},
]
充值組件 pages/home/Recharge.vue
<template>
    <div></div>
</template>
<script>
    export default {
        
    }
</script>
步驟

微信支付需要引入jssdk允坚,先安裝npm包npm install weixin-js-sdk --save
1.在Recharge.vue組件引入jssdk
2.配置jssdk的config即:

wx.config({
    debug: true,
    appId: '',
    timestamp: '', // 必填,生成簽名的時(shí)間戳
    nonceStr: '', // 必填蛾号,生成簽名的隨機(jī)串
    signature: '',// 必填稠项,簽名
    jsApiList: [
        'chooseWXPay'
    ]
})

由于涉及到簽名,所以這些參數(shù)我通過(guò)服務(wù)器生成并返回鲜结,Recharge.vue代碼如下:

<template>
    <div>
    </div>
</template>
<script>
    import wx from 'weixin-js-sdk'
    export default {
        data() {
            return {
                 wx: null
            }
        }
        created() {
            let config = {};
            config.url = window.location.href; // 當(dāng)前頁(yè)面url

            // 請(qǐng)求api返回sdk配置參數(shù)
            this.$http.post('/api/wx/sdk-config', config).then(ret => {
                config = ret.data.config;
                config.debug = true;
            
                config.jsApiList = [
                    'chooseWXPay'
                ];
                wx.config(config);
                wx.ready(() => {
                    this.wx = wx;
                });
            });
        }
    }
</script>

sdk配置就完成了展运。
3.下單并拉取支付控件

// Recharge.vue
methods : {
    // 請(qǐng)求api創(chuàng)建本地訂單
    makeOrder() {
        this.$http.post('/api/user/recharge').then(ret => {
            this.makeWxOrder(ret.data.orderId);
        });
    },

    // 請(qǐng)求api創(chuàng)建微信訂單并拉取支付控件
    makeWxOrder(orderId) {
         this.$http.post('/api/wx/make-order', {orderId: orderId}).then(ret => {
            // 得到返回的支付參數(shù)
            let params = ret.data.params;
            params.success = res => {
                // 支付成功
            };
            this.wx.chooseWXPay(params);
        });
    }
}
  • 填坑

授權(quán)目錄問(wèn)題

微信授權(quán)目錄是要精確到二級(jí)或三級(jí)目錄,我用的vue-router hash模式精刷,支付目錄是www.xxx.com/#/home/recharge拗胜,但是微信支付目錄驗(yàn)證不支持這種hash模式,所以在微信看來(lái)目錄是錯(cuò)誤怒允。
網(wǎng)上有一種解決辦法是在當(dāng)前支付頁(yè)面的#號(hào)前邊加上?號(hào)www.xxx.com/?#/home/recharge埂软,這樣微信目錄驗(yàn)證會(huì)忽略掉?號(hào)后的參數(shù),微信會(huì)把請(qǐng)求頁(yè)面的目錄看做www.xxx.com/纫事,但是目錄要精確到二級(jí)或三級(jí)勘畔。
我的解決方法是所有微信前端都加上/wx前綴迷殿,在微信看來(lái)/wx下所有加了?號(hào)的hash頁(yè)面都是支付目錄,那微信支付目錄就填的是www.xxx.com/wx/咖杂。
如何給當(dāng)前頁(yè)面加上?號(hào)呢庆寺,就是加載Rechage.vue組件時(shí)候判斷url是否帶有?號(hào),沒(méi)有則加上并跳轉(zhuǎn)一下诉字。

// Recharge.vue
created() {
    let config = {};
    config.url = window.location.href;
    // 判斷當(dāng)前url是否存在?參數(shù)匹配符
    if(!config.url.match(/\?/)) {
        location.replace(window.location.href.split('#')[0] + '?' + window.location.hash);
        return ;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末懦尝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子壤圃,更是在濱河造成了極大的恐慌陵霉,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伍绳,死亡現(xiàn)場(chǎng)離奇詭異踊挠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)冲杀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)效床,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人权谁,你說(shuō)我怎么就攤上這事剩檀。” “怎么了旺芽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵沪猴,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我采章,道長(zhǎng)运嗜,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任悯舟,我火速辦了婚禮担租,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘图谷。我一直安慰自己翩活,他們只是感情好阱洪,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布便贵。 她就那樣靜靜地躺著,像睡著了一般冗荸。 火紅的嫁衣襯著肌膚如雪承璃。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天蚌本,我揣著相機(jī)與錄音盔粹,去河邊找鬼隘梨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛舷嗡,可吹牛的內(nèi)容都是我干的轴猎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼进萄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼捻脖!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起中鼠,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤可婶,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后援雇,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體矛渴,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年惫搏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了具温。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡筐赔,死狀恐怖桂躏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情川陆,我是刑警寧澤剂习,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站较沪,受9級(jí)特大地震影響鳞绕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜尸曼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一们何、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧控轿,春花似錦冤竹、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至在抛,卻和暖如春钟病,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工肠阱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留票唆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓屹徘,卻偏偏與公主長(zhǎng)得像走趋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子噪伊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容