close
我在串接綠界的時候,遇到了這樣的雷。
我先說,我不是很專業的前端,這個方法也是土炮解法,如果有人有更好的方法,歡迎來交流。
Ecpay的php套件回傳了一個html字串。假設它呈現到網頁上,他就會自動把form的內容做submit。然後自動跳轉到付款頁面。
php的套件怎麼帶我就不多說,key word是AutoSubmitFormWithCmvService
我的vue從axios拿回來的字串如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<form id="ecpay-form" method="POST" target="_self"
action="https://payment-stage.ecpay.com.tw/Cashier/AioCheckOut/V5">
<input type="hidden" name="CheckMacValue" value="1231231231dsnejkqweknqjwe">
<input type="hidden" name="ChoosePayment" value="ALL">
<input type="hidden" name="ClientBackURL" value="https://example">
</form>
<script type="text/javascript">
document.getElementById("ecpay-form"). submit();
</script>
</body>
</html>
這是經過排版的,原本的字串完全沒有換行縮排。拿回來的時候沒辦法渲染,用getElementById也沒辦法拿到form。 那怎麼辦呢? 我先在template 中加入這個元素
<div id="orderForm"> </div>
我的axios程式碼如下:
axios.post(process.env.VUE_APP_BACKEND_URI + '/api/url', this.payload)
.then((response) => {
let ret = response.data.replace('<script type="text/javascript">
我做的事情很簡單,就是把整個字串中除了form以外的都去除。 然後再使用原本就有的html新增innerHTML 這樣一來,就可以用getElementById拿到元素了。 之所以要分3次 replace是因為
- 要掐頭去尾 頭尾各1次
- 在replace尾部的時候遇到
</script>
標記,網頁會判斷成這是你js標籤的完結,會報錯,所以要分成兩次,把</script>
分成兩個字串來取代。就不會有這個問題。
就是這樣,非常感謝我的朋友YY和Barbie的協助。
文章標籤
全站熱搜