Android 微信-支付寶 支付功能實踐記錄

——不要假裝很努力,結(jié)果不會陪你演戲

前言
一、簡介
二、用戶使用支付流程
三、微信支付
——1.集成準備
——2.Android集成
四、支付寶支付
——1.集成準備
——2.Android集成
五、內(nèi)容推薦


前言

——新的一年開始了,愿好事接二連三,心情四季如春,生活五顏六色、七彩繽紛,偶爾“八”點小財,煩惱拋到九霄云外,請接受我十心十意的祝福:元旦快樂。

——那么如何發(fā)點小財呢? 不妨試試在自己的APP中接入支付功能,就像淘寶那樣出售自己的商品。坐等錢到賬。想想就開始流口水,不過還是不要白日做夢了。先學(xué)會如何集成支付功能,再來考慮下一步。最近又接了支付功能,順便就寫下這篇。當然詳細文檔官方文檔寫的很詳細,這里就大概講下流程。不會太詳細。。。

一、簡介

——接完之后發(fā)現(xiàn),支付功能代碼接入變簡單了。主要還是第三方服務(wù)提供的功能越發(fā)完善,而且文檔也描述的很詳細。但是還是有很麻煩的地方,就是前期的準備工作。在這里提醒那些想做支付功能的同胞,先去微信/支付寶 開放平臺 注冊項目并開通支付功能。若這些工作都完成了,后續(xù)工作就相當簡單了。

二、用戶使用支付流程

——在開始集成前,有必要先了解下。用戶是如何使用支付功能的。有利于對集成的理解

  1. 步驟1:用戶進入商戶APP(例淘寶),選擇商品下單、確認購買,進入支付環(huán)節(jié)。
  2. 步驟2:用戶點擊后發(fā)起支付操作,進入到微信/支付寶界面,調(diào)起支付,出現(xiàn)確認支付界面。
  3. 步驟3:用戶確認收款方和金額,點擊立即支付后出現(xiàn)輸入密碼界面。
  4. 步驟4:輸入正確密碼后,支付完成,用戶端出現(xiàn)支付詳情頁面。
  5. 步驟5:回跳到商戶APP中,商戶APP根據(jù)支付結(jié)果個性化展示訂單處理結(jié)果。

——微信/支付寶的使用流程都是差不多的。

三、微信支付

1.集成準備

簡介:在微信開放平臺創(chuàng)建項目獲取AppId并開通支付功能

(1)登錄微信開放平臺注冊應(yīng)用:https://open.weixin.qq.com/

(2)App端開發(fā)步驟:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5#


(3)業(yè)務(wù)流程圖:

對微信支付整體流程有了大概了解之后,我們就可以更輕松的對接支付。

2.Android集成

資源下載頁

(1)添加依賴

dependencies {
    compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}

(2)調(diào)用接口

//微信支付
//1\. 將該app注冊到微信
val createWXAPI = WXAPIFactory.createWXAPI(this, null)
createWXAPI.registerApp("appid")
//2\. 調(diào)用微信支付
btn_pay.setOnClickListener {
    it.setEnabled(false)
    //檢查是否安裝了微信
    if (createWXAPI.isWXAppInstalled){
        Toast.makeText(this, "未安裝微信", Toast.LENGTH_SHORT).show()
        return@setOnClickListener
    }
    //檢查微信版本是否支持支付
    if (createWXAPI.getWXAppSupportAPI() < Build.PAY_SUPPORTED_SDK_INT){
       Toast.makeText(this, "請升級微信版本", Toast.LENGTH_SHORT).show()
    }
    val request = PayReq().apply {
        appId = "appId "
        partnerId = "partnerId "
        prepayId = "prepayId "
        packageValue = "packageValue "
        nonceStr = "nonceStr "
        timeStamp = "timeStamp "
        sign = "sign "
    }
    createWXAPI.sendReq(request)
    it.setEnabled(true)
}

(3)支付回調(diào)

1.在 包名 下新建 wxapi 文件并加入 WXPayEntryActivity.class 微信回調(diào)類
2.清單中添加:

<activity
    android:name=".wxapi.WXPayEntryActivity"
    android:exported="true"
    android:launchMode="singleTop"/>

3.WXPayEntryActivity

class WXPayEntryActivity :  AppCompatActivity(), IWXAPIEventHandler {
    companion object{
        val TAG:String = "WXPayEntryActivity"
    }
    private var api : IWXAPI?=null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(com.blcs.paysdk.R.layout.pay_result)
        api = WXAPIFactory.createWXAPI(this, WxPayUtils.APP_ID)
        api?.handleIntent(intent, this)
    }
    override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)
        setIntent(intent)
        api?.handleIntent(intent, this)
    }
    override fun onReq(p0: BaseReq?) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    override fun onResp(resp: BaseResp?) {
        if (resp?.getType() === ConstantsAPI.COMMAND_PAY_BY_WX) {
            when (resp.errCode) {
                0 -> {//支付成功 }
                -1-> {//錯誤,可能的原因:簽名錯誤、未注冊APPID、項目設(shè)置APPID不正確、注冊的APPID與設(shè)置的不匹配、其他異常等 }
                -2-> {//用戶取消,無需處理。發(fā)生場景:用戶不支付了,點擊取消,返回APP。 }
            }
            finish()//這里需要關(guān)閉該頁面
        }
    }
}

集成比以前更簡單了,文檔描述也非常詳細。更新很快,建議大家去看文檔。因為該篇也會過時,所以就簡單梳理一下。

四、支付寶支付

1.集成準備

(1)登錄支付寶開放平臺注冊應(yīng)用:https://open.alipay.com/platform/home.htm

(2)開發(fā)文檔:https://docs.open.alipay.com/204

(3)支付流程圖:

(4)業(yè)務(wù)流程圖

2.Android集成

(1)資源下載頁

(2)添加依賴包

1.下載SDK后將alipaySdk-15.5.7-20181023110917.aar 包放在您的應(yīng)用工程的 libs

2.主項目的 build.gradle 中,將 libs 目錄作為依賴倉庫

allprojects {
    repositories {
        // 添加下面的內(nèi)容
        flatDir {
            dirs 'libs'
        }
        // ... jcenter() 等其他倉庫
    }
}

3.在App Module 的 build.gradle 中,將支付寶 SDK 作為項目依賴

dependencies {
    // 添加下面的內(nèi)容
    compile (name: 'alipaySdk-15.5.7-20181023110917', ext: 'aar')

    // ... 其他依賴項
}

4.調(diào)用接口(orderInfo 是訂單信息,由后臺提供。)

public fun zfbPay(orderInfo: String) {
    Observable.create<Map<String, String>> {
        val alipay = PayTask(this)
        val result = alipay.payV2(orderInfo, true)
        it.onNext(result)
    }.compose(RxUtils.applySchedulers()).subscribe {
        //支付結(jié)果獲取和處理
        val payResult = PayResult(it)
        val resultInfo = payResult.result// 同步返回需要驗證的信息
        val resultStatus = payResult.resultStatus
        // 判斷resultStatus 為9000則代表支付成功
        if (TextUtils.equals(resultStatus, "9000")) {
            toast("支付成功")
            Log.e(" resultInfo ", "" + payResult)
        } else {
            Log.e(" resultInfo ", "" + payResult)
            toast("支付失敗" + payResult.memo)
        }
    }
}

5.返回碼

五、內(nèi)容推薦

若您發(fā)現(xiàn)文章中存在錯誤或不足的地方,希望您能指出!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容