最近接了一個微信小程式的活,想象中微信小程式應該跟普通的網站開發差不多,實際上就前端來說確實差不多,但是還是遇到不少蛋疼的問題,所以這裡記錄一下,希望對後來人有所啟示。
伺服器端方面:
伺服器端是用java寫的,應用伺服器是tomcat7
問題1、微信小程式要求向我們自己伺服器傳送的請求是https協議並且備案過的域名,我這裡客戶提供的域名是備案之後的,但是https得自己搞,https的證書可以在騰訊雲和沃通申請1年的免費證書。我是在騰訊雲上申請的,證書下載下來之後,只有apache的和Nginx的,沒有tomcat的,在網上看了下,可以用openSSL生成tomcat的證書,但是太麻煩了,所以我這裡安裝了一個nginx代理tomcat,然後配置nginx的證書,nginx的安裝和證書的配置都是很簡單的,這裡就不描述了,但是出現的問題是一直在報 證書的證書的key這個錯誤,反覆嘗試多次,還是不行,最後發現是騰訊雲辦法的證書有問題。。。。沒辦法這裡就沒再去自己配置證書了,而是直接在騰訊雲上面購買微信小程式的解決方案,購買騰訊已經配置好SSL的伺服器。
問題2、騰訊雲提供的伺服器是linux的,在使用騰訊雲配置好的伺服器的時候,發現tomcat的個個目錄都不在同一個目錄下面,通過類似於連線的方式跳轉過去,伺服器可以通過putty登入連線,可以使用FIleZilla上傳檔案。在這裡出現的問題是在tomcat的bin目錄下面始終找不到startop.sh,也找不到其他任何與啟動tomcat相關的東西。最後發現,騰訊這裡吧tomcat配置成了服務,啟動是以服務的方式啟動的,systemcml start tomcat。(centos7以下,啟動服務是 service start tomcat)
問題3、上傳檔案的時候,報錯 permission miss。看這個錯誤,應該是我在檔案上傳的目錄沒有寫檔案的許可權,這裡直接通過chmod 777 資料夾 授權。
微信小程式端方面:
小程式這邊,跟做前端的工作差不多,只是js的 一些函式換成的微信這把封裝之後的API。
問題4、頁面設定背景圖片,height:100%,width:750rpx;之後,發現縱向不能鋪滿,解決方法是,在頁面載入的時候,通過微信的api獲取裝置螢幕的高,然後被 container的高賦值。
微信小程式支付方面:
先說一下,騰訊關於微信文件真的寫得讓人眼花繚亂,不知道他們做產品文件的人怎麼搞得。
關於微信支付,我們需要做三件事情:
1、在伺服器端呼叫微信 統一下單介面,生成支付需要的 prepay_id;
2、根據第1步返回的prepay_id和其他幾個引數生成sign,這裡返回的sign才是wx.requestPayment這個方法需要的簽名。
3、在小程式端呼叫微信支付介面,支付成功之後,在success裡面給使用者支付成功的提示;
4、支付成功之後,會根據第一步傳過去的支付成功回撥地址,通知伺服器端。
有一些問題已經遺忘,後面想起再補上。
關於微信小程式支付,有這幾個問題需要注意:
1、wx.requestPayment方法使用的paySign不是 統一下單介面返回的,而是在呼叫統一下單介面之後,獲取到prepay_id之後,將wx.requestPayment方法呼叫需要的幾個引數,加上 appId和key生成的sign,這裡是個坑,官方的文件上面說的是隻有nonceStr、package、signType、timeStamp這4個引數參加簽名,其實是appId、nonceStr、package=prepay_id=、signType、timeStamp、key這幾個引數。

2、支付開發完成之後,在Android上面呼叫支付成功,但是在iphone測試,提示缺少“呼叫JSAPI缺少:timeStamp引數”,這是因為從後臺返回的timeStamp是一個數字,但是騰訊那邊需要的是字串,需要把數字轉成字串。
需要原始碼的朋友,可以留下郵箱。