項(xiàng)目開發(fā)中接入支付功能往往費(fèi)時(shí)費(fèi)力,不同的支付功能實(shí)現(xiàn)方式不一樣也導(dǎo)致代碼結(jié)構(gòu)不統(tǒng)一,這款QuickPay將微信/支付寶/銀聯(lián)三種支付方式進(jìn)行了統(tǒng)一封裝,方便項(xiàng)目中快速接入支付功能,接口統(tǒng)一也便于功能維護(hù)和修改。
項(xiàng)目地址:https://github.com/ban54/QuickPay
接入方式:
- 在項(xiàng)目根目錄的build.gradle中添加
allprojects { repositories { ... maven { url 'https://jitpack.io' } } }
- 在project的build.gralde中增加依賴
dependencies { implementation 'com.github.ban54:QuickPay:v0.0.4' }
- 微信支付對(duì)接
- 在項(xiàng)目根package下建立的wxapi的子package, 并在這個(gè)package下新建一個(gè)類名為WXPayEntryActivity的類,繼承自com.ban54.quickpay.wx.WXPayCallbackActivity,同時(shí)實(shí)現(xiàn)wxAppId的get()方法,返回接入app中微信開放平臺(tái)注冊(cè)的app id
- 在AndroidManifest.xml中注冊(cè)創(chuàng)建的WXPayEntryActivity類,并設(shè)置android:exported="true"
<activity android:name=".wxapi.WXPayEntryActivity" android:exported="true" />
- 調(diào)用微信支付接口,代碼如下(WXPayParameter中的參數(shù)根據(jù)實(shí)際下單情況填充):
val payParameter = WXPayParameter() payParameter.appId = "xxx" payParameter.sign = "xxx" payParameter.partnerId = "xxx" payParameter.prepayId = "xxx" payParameter.packageValue = "Sign=WXPay" // 固定值 payParameter.nonceStr = "xxx" payParameter.timeStamp = "xxx" PayHelper.pay(this, payParameter, mPayResultCallback)
mPayResultCallback的定義和使用請(qǐng)見“6. mPayResultCallback的定義和使用”。
- 支付寶支付對(duì)接
代碼如下(AlipayParameter中的參數(shù)根據(jù)實(shí)際下單情況填充):
val payParameter = AlipayParameter("xxx") PayHelper.pay(this, payParameter, mPayResultCallback)
mPayResultCallback的定義和使用請(qǐng)見“6. mPayResultCallback的定義和使用”。
- 銀聯(lián)支付對(duì)接
代碼如下(UnionPayParameter中的參數(shù)根據(jù)實(shí)際下單情況填充):
val payParameter = UnionPayParameter() payParameter.tn = "xxx" PayHelper.pay(this, payParameter, mPayResultCallback)
mPayResultCallback的定義和使用請(qǐng)見“6. mPayResultCallback的定義和使用”。
- mPayResultCallback的定義和使用
- 作用:mPayResultCallback為PayResultCallback類實(shí)例,用于接收支付結(jié)果的回調(diào)(在主線程中執(zhí)行)
- 定義:代碼如下
private val mPayResultCallback by lazy { object : PayResultCallback { override fun onSuccess(payParameter: PayParameter, payResult: PayResult) { // "支付成功" } override fun onFail(payParameter: PayParameter, payResult: PayResult) { // "支付失敗: " + payResult.description } override fun onCancel(payParameter: PayParameter, payResult: PayResult) { // "支付取消" } override fun onWait(payParameter: PayParameter, payResult: PayResult) { // "支付等待" } } }
- 其它
- PayResult類:PayResult用于保存返回的支付結(jié)果,其中code代表支付結(jié)果狀態(tài),description代表支付結(jié)果描述,主要用于支付失敗情況,subCode為錯(cuò)誤細(xì)分碼,日常使用可忽略
- 微信支付調(diào)不起:排除接入問題和參數(shù)問題,微信支付很容易在這個(gè)場(chǎng)景卡住->“當(dāng)前手機(jī)微信賬號(hào)在另外一個(gè)手機(jī)上登錄后“,這種只能手動(dòng)去打開一下微信,屬于微信自身問題。如果還不行,可以嘗試在系統(tǒng)app設(shè)置中清除微信APP應(yīng)用數(shù)據(jù)再試。