Qt for Android集成史上第一最全最簡(jiǎn)單的微信支付
應(yīng)廣大Qt好友的要求,記錄下我自己開(kāi)發(fā)的qt for android中如何集成微信,在自己搞這個(gè)的時(shí)候,還是轉(zhuǎn)了不少?gòu)濐^,其實(shí)最簡(jiǎn)單的方法就是看官方文檔,但是要有java基礎(chǔ)才行,我當(dāng)初是研究的別人java的原生支付demo,所以版本有點(diǎn)老,但是不影響正常支付。好了,進(jìn)入正題,使用qt來(lái)進(jìn)行微信支付,其實(shí)就是要用java原生的實(shí)現(xiàn),只不過(guò)qt相當(dāng)于一個(gè)外用調(diào)用者,只管調(diào)用支付集成的方法就可以了,具體實(shí)現(xiàn)還是要用java來(lái)寫(xiě),這個(gè)可以看下別人安卓的文檔,了解搭建環(huán)境之類(lèi)的問(wèn)題,這里我就不累贅了,可以看下我的另外一篇博客轉(zhuǎn)載于別人的,內(nèi)附demo,安卓集成微信支付:點(diǎn)擊打開(kāi)鏈接, 不想看的可以看我下面的內(nèi)容:
如果你已經(jīng)成功集成了微信登錄和分享,那么此文將助你快速集成微信支付,此文基于微信支付SDK3.1.1,也就是目前為止最新的SDK
1)微信官方的集成文檔
2)微信官方資源下載
??
不過(guò)我相信,即便你看了微信的官方文檔,你依然不知道微信支付怎么集成,因?yàn)槲⑿胖Ц兜墓俜轿臋n簡(jiǎn)直太.....
如果你已經(jīng)準(zhǔn)備好了資源包,接下來(lái)正式開(kāi)始集成
我們需要的資源其實(shí)有以下幾樣,在開(kāi)始前,就這些轉(zhuǎn)備好吧
1)微信支付的APPID
2)微信支付依賴包 >>> libammsdk.jar
3)一個(gè)Activity類(lèi) >>> WXPayEntryActivity.java
這里需要特別說(shuō)明一下,這個(gè)Activity類(lèi),直接從上下載到的范例代碼中copy到自己的工程中即可,這個(gè)頁(yè)面是在你調(diào)起微信支付完成支付(或取消或失?。┖?,再回到你的App時(shí)會(huì)調(diào)用的一個(gè)頁(yè)面。頁(yè)面的布局可以是你自定義的布局,直接放圖講解:
先說(shuō)一下這個(gè)類(lèi)的路徑,網(wǎng)上也有一大堆介紹了,我直接放圖,路徑一定,而且必須是這樣的:
在這個(gè)類(lèi)中需要注意的地方有兩個(gè):
1、這個(gè)類(lèi)中的布局是可以自定義的,如果你不需要展示什么布局,而是要跳轉(zhuǎn)頁(yè)面,把這段代碼刪除即可
2、回調(diào)結(jié)果的處理,下面是官方的處理方式,直接給了一個(gè)dialog,很多人會(huì)摸不著頭腦,如果你不需要這個(gè)dialog,直接刪除就好了,不需要把官方demo中的布局和資源都復(fù)制過(guò)來(lái)
??下面是我自定義的處理方式,比較簡(jiǎn)單,就是土司顯示了一下支付結(jié)果,如果你需要支付成功后跳轉(zhuǎn),那么直接在這里startActivity即可,別忘記最后要將這個(gè)頁(yè)面finish()
?
這個(gè)類(lèi)中的其余的回調(diào)方法,我們都不需要去操作
然后我們就可以開(kāi)始支付了,支付很簡(jiǎn)單,真的很簡(jiǎn)單
這是微信支付需要我們攜帶的參數(shù),對(duì)于新人來(lái)說(shuō),可能比較困惑的是我怎么生成這些參數(shù)呢?其實(shí)這些參數(shù)都是服務(wù)器返回給我們的,APPID我們可以自己保存在本地一份,其余的都是服務(wù)器返回給我們的,大概介紹一下流程:
最后,服務(wù)器返回給我們微信支付的參數(shù)后,我們就可以愉快的支付了,這里是關(guān)鍵一步,注意??!
至此我們已經(jīng)可以調(diào)起微信支付頁(yè)面來(lái)支付了
最后還有一個(gè)需要注意的是,很多人被這一步坑了,就是關(guān)于微信開(kāi)放平臺(tái)簽名的問(wèn)題。其實(shí)只要你手機(jī)上的程序的簽名和你在微信平臺(tái)登記的簽名一致即可,無(wú)論是debug版本,還是release版本
把上面的看懂后,基本上是沒(méi)有其它問(wèn)題的,下面將重點(diǎn)是介紹Qt如何發(fā)揮它的用武之地,要用到Qt調(diào)用java集成的接口,就要學(xué)會(huì)Qt寫(xiě)Jni代碼 ,這里寫(xiě)下我接口方法實(shí)現(xiàn):
因?yàn)槲疫@邊實(shí)現(xiàn)的微信支付簽名是自己本地客戶端實(shí)現(xiàn)的,所以必須要自己傳送一個(gè)貨幣,也就是money過(guò)去,這個(gè)money一定要在后面*100,微信官方是100等于一分錢(qián)。其中圖中的重點(diǎn)就是我紅框圈起來(lái)的就是需要調(diào)用的方法,而wXPayPort就是Qt這邊調(diào)用了,調(diào)用的時(shí)候帶上一個(gè)貨幣即可,下面來(lái)看看我的wXPayPort的java實(shí)現(xiàn),這個(gè)是需要自己用java原生來(lái)寫(xiě)的,
?????首先并不是直接調(diào)用startPay()方法的,而是先調(diào)用wXPayPort,然后開(kāi)啟一個(gè)線程來(lái)啟動(dòng)微信支付程序,因?yàn)閷?xiě)了很久,當(dāng)時(shí)也未來(lái)的及記錄,所以為什么要開(kāi)啟一個(gè)線程來(lái)調(diào)用,具體好像是Qt所在的進(jìn)程來(lái)拉起java微信支付進(jìn)程會(huì)導(dǎo)致崩潰,所以需要開(kāi)啟一個(gè)java線程來(lái)拉起java本身的所構(gòu)建出來(lái)的微信支付進(jìn)程,當(dāng)調(diào)用這一步后,就是生成簽名的時(shí)候了,其實(shí)生成簽名應(yīng)該由服務(wù)器來(lái)做,這里就不累贅了,具體調(diào)用后的執(zhí)行可以查看PayActivity.java這個(gè)類(lèi)文件(都是官方Demo文件),下面列一下客戶端生成簽名需要注意的地方:
?1、notify_url必須是要服務(wù)器那邊知道的支付地址,我這邊是測(cè)試地址,
2、montyValue必須是一個(gè)string,不能是int,否則會(huì)報(bào)錯(cuò),還有程序調(diào)用不能為0.01,必須要乘以100。
3、sing就是簽名,所以一般簽名這堆配置其實(shí)不應(yīng)該由客戶端做,只需要服務(wù)器傳送給你sign簽名即可,有了sign簽名就可以進(jìn)行支付了。
后續(xù)將會(huì)貼出一個(gè)專(zhuān)門(mén)用于Qt支付的demo出來(lái),如有更好建議,還望多多評(píng)論
完整demo:Qt微信支付Demo