Android之第三方支付(微信,支付宝)


前言

例如:干了那么多年的IT,支付是我们最常见的功能需求之一,一直没用关于支付的博客,今天就记录一下,顺便当自己的笔记,就不截图了,按照我的步骤整,不实现都难,有问题随时私信我。

一、支付的步骤是什么

一般不管是支付宝还是微信,在支付前,都需要调用后台接口得到一些支付配置参数,得到后根据自己选择的支付类型给相应的配置参数即可。

二、导入依赖

    //支付宝
    implementation 'com.alipay.sdk:alipaysdk-android:+@aar'
    //微信支付
    implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:1.1.6'

三、实现步骤

1.支付宝支付

1.调用支付宝并传参

    //支付宝支付(这里的orderStr就是后台接口创建订单后返回的支付签名,直接拿去支付即可,不行就是后台的问题,你说我说的)
    fun aliPay(orderStr: String) {
        val payRunnable = Runnable {
            val alipay = PayTask(this@PointsRecharge)
            var result: Map<String?, String?>? = null
            try {
                result = alipay.payV2(orderStr, true)
            } catch (e: JSONException) {
                e.printStackTrace()
            }
            val msg = Message()
            msg.what = SDK_PAY_FLAG
            msg.obj = result
            mHandler.sendMessage(msg)
        }
        val payThread = Thread(payRunnable)
        payThread.start()
    }
    

2.支付宝回调

   @SuppressLint("HandlerLeak")
    private val mHandler: Handler = object : Handler() {
        override fun handleMessage(msg: Message) {
            when (msg.what) {
                SDK_PAY_FLAG -> {
                    val payResult = PayResult(msg.obj as Map<String?, String?>)

                    /**
                     * 对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
                     */
                    val resultInfo: String = payResult.getResult() // 同步返回需要验证的信息
                    val resultStatus: String = payResult.getResultStatus()
                    // 判断resultStatus 为9000则代表支付成功
                    if (TextUtils.equals(resultStatus, "9000")) {
                        ToastUtils.showToast(resources.getString(R.string.paysuccess))
                    } else {
                        // 该笔订单真实的支付结果,需要依赖服务端的异步通知。
                        ToastUtils.showToast(resources.getString(R.string.Paymentfailed))
                    }
                }

                else -> {}
            }
        }
    }

2.微信支付

1.调用微信支付并传参(这里的data是个对象,里面就是微信的appid签名这些玩意,如果有问题找后台,你说我说的,,,常见问题,后台返回参数不要大写,必有问题,切记,记得AndroidManifest注册这个文件)

//微信支付
    fun wxPay(data: JSONObject) {
        try {
            api = WXAPIFactory.createWXAPI(this, null)
            api.registerApp(data.getString("appid"))
            val req: PayReq = PayReq()
            req.appId = data.getString("appid")
            req.partnerId = data.getString("partnerid")
            req.prepayId = data.getString("prepayid")
            req.nonceStr = data.getString("noncestr")
            req.timeStamp = data.getString("timestamp")
            req.packageValue = data.getString("packages")
            req.sign = data.getString("sign")
            api.sendReq(req)
        } catch (e: JSONException) {
            e.printStackTrace()
        }
    }

2.微信回调(在项目新建一个文件命名为wxapi,然后再文件下创建一个文件,文件代码如下)。

**
 * @Author : CaoLiulang
 * @Time : 2025/1/20 13:51
 * @Description :微信支付回调
 */
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {

    private static final String TAG = "WXPayEntryActivity";

    private IWXAPI api;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        api = WXAPIFactory.createWXAPI(this, "wx8c717c202737f123");
        api.handleIntent(getIntent(), this);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        api.handleIntent(intent, this);
    }

    @Override
    public void onReq(BaseReq req) {
    }

    @Override
    public void onResp(BaseResp resp) {
        int code = resp.errCode;
        if (code == 0) {
            ToastUtils.showToast("支付成功");
        }
        if (code == -1) {
            ToastUtils.showToast("支付失败");
            finish();
        }
        if (code == -2) {
            ToastUtils.showToast("支付取消");
            finish();
        }
    }

3.androidManifest 注册

        <!--支付回调-->
        <activity
            android:name=".wxapi.WXPayEntryActivity"
            android:exported="true"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

总结

总之呢,整个流程也不复杂,有的新手呢研究也需要些时间,再加上自己平常不太喜欢翻之前的项目,索性记录一下,方便各位也方便自己,得吃。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶已初秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值