android 支付宝接入

接入步骤一定看官网教程、非常简单、非常简单、客户端 Android 集成流程 | 网页&移动应用

该文只展示一些简单的支付封装、及注意事项。 

 正文:

1、支付宝支付所需参数、必须均来自服务端、即客户端不需要配置appkey等一些无用信息、只需要拿到服务端返回的支付参数、orderinfo(String类型)、传给sdk即可;同样也需要支付宝控制台申请创建app开通相应功能;

2、如下为支付代码:(注意支付请求必须异步)

/**
 * 支付宝支付
 */
object AliPayUtils {

    //支付标志 可自定义
    const val ALI_PAY_FLAG = 1

    //支付成功后的回调(同步回调)、真正支付成功已服务端返回为准;
    const val PAY_SUCCESS="9000"

    /***
     *发起支付
     * handler 需自行定义、用来处理支付回调
     * orderInfo 订单参数、来自服务器  
     * CoroutineScope 为Kt协程 可以用线程代替、
     * @return Job 可以取消协程
     */
    fun pay(activity: Activity, handler: Handler?, orderInfo: String): Job {
        return CoroutineScope(Dispatchers.Default).launch {
            val aliPay = PayTask(activity)
            val result: Map<String, String> = aliPay.payV2(orderInfo, true)
            val msg = Message().apply {
                what = ALI_PAY_FLAG
                obj = result
            }
            handler?.sendMessage(msg)
        }
    }

    //---------以下为Thread写法
     fun pay(activity: Activity, handler: Handler?, orderInfo: String) {
        Thread{
            val aliPay = PayTask(activity)
            val result: Map<String, String> = aliPay.payV2(orderInfo, true)
            val msg = Message().apply {
                what = ALI_PAY_FLAG
                obj = result
            }
            handler?.sendMessage(msg)
        }.start()
    }
}

3、回调处理 handler在Activity中定义。

private var handler = object : Handler() {
        override fun handleMessage(msg: Message) {
            super.handleMessage(msg)
            //同步返回结果、
            val payResult = PayResult(msg.obj as Map<String, String>)
            when (payResult.resultStatus) {
            AliPayUtils.PAY_SUCCESS -> {//=9000
                    ToastUtils.showToast(getString(R.string.ali_pay_suc))
                    finish()
                }
                else -> {
                  // payResult.resultStatus 返回错误码、自行处理
                }
            }
        }
    }



//----------PayResult 支付成功返回结果、 该代码参考了(抄)官方demo

/**
 * 支付结果回调
 */
class PayResult(rawResult: Map<String, String>) {
    //支付状态
    var resultStatus: String? = null

    //对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
    var result: String? = null

    //备注
    var memo: String? = null

    init {
        //map for循环、
        rawResult.forEach {
            when (it.key) {
                "resultStatus" -> resultStatus = it.value
                "result" -> result = it.value
                "memo" -> memo = it.value
            }
        }
    }
}

至此完成;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值