vue微信支付遇到的坑


vue-cli 3.0搭建的項目中搭配的vue-router,默認的路由方式是hash模式,但是,使用hash模式時,瀏覽器url地址仲會有一個#。

本來微信支付的時候,拉起支付訪問mweb_url,支付成功或者取消支付,默認應該返回的是發起支付的頁面,但是由於發起支付的頁面路由中帶有#,所以微信直接把#后面那部分給截了,每次返回都直接跳到首頁去了。

目前知道的解決方案有兩種:

  1:支付頁面做一個新的靜態頁,那么返回就不存在這樣的問題了。

  2:vue-router的路由方式改為history模式,我們只需要在router.js中進行配置

const router = new Router({
  mode: "history",
})

  但是這種方式需要后台進行配合,不然的話npm run build打包出來之后的html訪問頁面是空白的。

  官方給出了集中常用的后端配置例子:

  Apache:

  

  nginx:

  

  node.js:

  

  Internet Information Services (IIS):

   

  后面關於iis后端配置部分,直接拷貝原文作者內容:

IIS 后端配置

首先,前端將 vue-router 模式修改為 history 模式,開發完成並打包后,將文件部署到站點。站點的根目錄會有一些相關配置文件,這些后端人員會很清楚,前端開發只需要告訴后端人員如何寫去掉 # 的配置文件。

在站點的根目錄創建一個 web.config 文件,內容如上圖所示。起到關鍵作用的是 rewrite 標簽中的代碼:

  • rule 標簽:代表定義的一條規則。

  • match 標簽:你的規則是什么要求,url 屬性內容就是要求(正則表達式)。

  • action 標簽:type 屬性為 Rewrite(重寫),url 屬性為目標。意思是:如果滿足 match 標簽中 url 屬性的正則,就執行此配置(將符合match標簽url要求的地址,重寫為action標簽中url屬性的地址)。

這個配置就和重定向一樣,將符合你要求的地址,重定向為你想要的地址。下面是我的項目中 IIS 的配置:

 
 

我的要求是,除了 "api" 或者 "token" 開頭的地址,全部重定向為 " / " ,因為我的接口地址是 api 和 token 開頭的,所以接口地址不能變。

 
api 接口
 
token 接口

然后服務端設置的是默認顯示目錄下的 index.html ,而這個 index.html 文件就是前端打包后生成的 html 文件。網站打開了 html 文件,執行對應腳本,就會按照你的路由設置顯示對應的組件內容,瀏覽器地址中的 # 也被替換掉了。

還有一個 rule 標簽是配置我的圖片路徑的。

圖片在開發環境中,都按照對應的組件,分類放到不同的文件夾中,例如:home 組件中的 banner 圖,路徑是 “ assets/home/banner.png ”。

我的項目打包后,生成了 index.html 和 static 文件夾,js、css、img等文件夾都在 static 中。所有的圖片全都放在“ /static/img/ ”下面,圖片路徑也會自動更改為“ ./static/img/ ”。

我不希望圖片路徑重定向為“ / ”,所以規則就是:將符合“ ./static/img/name.png ”重定向為“ /static/img/name.png ”。

 
靜態圖片路徑

配置里的最難的可能是那個正則表達式,根據不同的需求配置不同的正則表達式,搞定正則就大功告成了!



作者:前端很忙
鏈接:https://www.jianshu.com/p/ab0f3e0fe9e5

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM