一個簡單輕便的移動支付整合庫FastPay

weixin_33806914發表於2018-09-03

先放上地址GitHub,歡迎star,歡迎給我發issues
也歡迎star我另外的庫LDialog
LPhotoPicker

RxJava版本

FastPay

(LiveData版本)一個整合微信、支付寶、銀聯支付的小巧庫,本庫採用LiveData響應資料,具有LiveData的所有優點,例如生命週期的感知。
本庫不提供任何邏輯,主要是提供庫的整合,省去配置時間,以簡單、輕量為主,不做過度封裝。
三個支付平臺庫相互獨立,可根據專案,單獨使用,避免臃腫

獲取

先在 build.gradle 的 repositories 新增倉庫:

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

在dependencies中新增:

dependencies {
    //(根據需要,選擇對應包匯入)
    //支付寶
    implementation 'com.github.limuyang2.FastPay:alipaylibrary:0.1'
    //微信
    implementation 'com.github.limuyang2.FastPay:wechatpaylibrary:0.1'
    //銀聯
    implementation 'com.github.limuyang2.FastPay:unionpaylibrary:0.1'
}

使用

微信

13059531-8be5a2d8b7b304ee.png
wxtips.png

銀聯

13059531-0b34d5b3c07737e1.png
uniontips.png

  • 根據以上官方文件所示,移動端屬於不安全端,資料容易被篡改,所以不能以客戶端返回結果作為使用者支付的結果

(重要) 使用建議:onSuccessonFailed方法可以不用重寫,所有的結果均在onComplete中去進行伺服器查詢
以下示例為kotlin。唯一區別在於java例項化Observer時,請在"xxObserver"前加上"Java",例如:WxPayObserver,java使用"JavaWxPayObserver"

JavaDemoActivity

微信使用

// …………後臺伺服器返回的訂單資料,填入下方
val request = PayReq()
request.appId = "wx7e16cf49c52635e2"
request.partnerId = "1900000109"
request.prepayId = "1101000000140415649af9fc314aa427"
request.packageValue = "Sign=WXPay"
request.nonceStr = "1101000000140429eb40476f8896f4c9"
request.timeStamp = "1398746574"
request.sign = "7FFECB600D7157C5AA49810D2D8F28BC2811827B"

FastWxPay("wx7e16cf49c52635e2", this).pay(request, object : WxPayObserver {
    override fun onSuccess() {
        //成功,微信app返回的結果。
        //(可以不重寫;如果重寫,建議僅作為除錯列印Log使用)
        //注意一定不能以客戶端返回作為使用者支付的結果,應以伺服器端的接收的支付通知或查詢API返回的結果為準
    }

    override fun onFailed(message: String) {
        //失敗,微信app返回的結果。
        //(可以不重寫;如果重寫,建議僅作為除錯列印Log使用)
        //注意一定不能以客戶端返回作為使用者支付的結果,應以伺服器端的接收的支付通知或查詢API返回的結果為準
    }

    override fun onCancel() {
        //取消
    }

    override fun onComplete() {
       // onSuccess,onFailed 都會走到這裡
       // 不論成功與否,都在此對伺服器進行查詢,一切資料,以伺服器為準
    }
})

支付寶使用

支付寶官方需要獲取android.permission.READ_PHONE_STATE許可權,建議動態獲取給與

// …………後臺伺服器返回的訂單資料,填入下方
val orderInfo = "app_id=2015052600090779&biz………………………………"
FastAliPay(this).pay(orderInfo, object : AliPayObserver {
    override fun onSuccess() {
        //(可以不重寫;如果重寫,建議僅作為除錯列印Log使用)
    }

    override fun onFailed(message: String) {
        //(可以不重寫;如果重寫,建議僅作為除錯列印Log使用)
    }

    override fun onCancel() {
    }

    override fun onComplete() {
        // onSuccess,onFailed 都會走到這裡
        // 不論成功與否,都在此對伺服器進行查詢,一切資料,以伺服器為準
    }
})

銀聯支付

// …………後臺伺服器返回的 銀聯tn 資料,填入下方
val tn = "869278591167656016600"
// UnionPayType.TEST 為銀聯測試環境;UnionPayType.RELEASE 為銀聯正式環境
FastUnionPay(this).pay(UnionPayType.TEST, tn, object : UnionPayObserver {
    override fun onSuccess() {
        Log.d("FastUnionPay", "onSuccess")
     }

    override fun onFailed(message: String) {
        Log.d("FastUnionPay", message)
    }

    override fun onCancel() {
        Log.d("FastUnionPay", "onCancel")
    }

    override fun onComplete() {
        // onSuccess,onFailed 都會走到這裡
        // 不論成功與否,都在此對伺服器進行查詢,一切資料,以伺服器為準
    }
})

相關文章