安卓接入支付宝支付

本文档详细介绍了如何在Android应用程序中接入支付宝支付,包括下载支付宝SDK,将jar包添加到项目依赖,设置权限,创建支付活动,配置ProGuard混淆规则,以及实现关键支付代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 下载支付宝jar包

存放位置如下


2.将jar包添加进依赖

compile files('libs/alipaySdk-20180316.jar')

3.添加权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

4.添加活动

<activity
    android:name="com.alipay.sdk.app.H5PayActivity"
    android:configChanges="orientation|keyboardHidden|navigation|screenSize"
    android:exported="false"
    android:screenOrientation="behind"
    android:windowSoftInputMode="adjustResize|stateHidden" >
</activity>
<activity
    android:name="com.alipay.sdk.app.H5AuthActivity"
    android:configChanges="orientation|keyboardHidden|navigation"
    android:exported="false"
    android:screenOrientation="behind"
    android:windowSoftInputMode="adjustResize|stateHidden" >
</activity>

5.在proguard-ules.pro文件中添加混淆,该文件在build.gradle下面

-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.sdk.app.AuthTask{ public *;}
-keep class com.alipay.sdk.app.H5PayCallback {
    <fields>;
    <methods>;
}
-keep class com.alipay.android.phone.mrpc.core.** { *; }
-keep class com.alipay.apmobilesecuritysdk.** { *; }
-keep class com.alipay.mobile.framework.service.annotation.** { *; }
-keep class com.alipay.mobilesecuritysdk.face.** { *; }
-keep class com.alipay.tscenter.biz.rpc.** { *; }
-keep class org.json.alipay.** { *; }
-keep class com.alipay.tscenter.** { *; }
-keep class com.ta.utdid2.** { *;}
-keep class com.ut.device.** { *;}

6.新建类PayResult

package com.example.test.alipaytest.alipay;

import android.text.TextUtils;

import java.util.Map;

/**
 * Created by app-i on 2018/3/24.
 */

public class PayResult {

    private String resultStatus;
    private String result;
    private String memo;

    public PayResult(Map<String, String> rawResult) {
        if (rawResult == null) {
            return;
        }

        for (String key : rawResult.keySet()) {
            if (TextUtils.equals(key, "resultStatus")) {
                resultStatus = rawResult.get(key);
            } else if (TextUtils.equals(key, "result")) {
                result = rawResult.get(key);
            } else if (TextUtils.equals(key, "memo")) {
                memo = rawResult.get(key);
            }
        }
    }

    @Override
    public String toString() {
        return "resultStatus={" + resultStatus + "};memo={" + memo
                + "};result={" + result + "}";
    }

    /**
     * @return the resultStatus
     */
    public String getResultStatus() {
        return resultStatus;
    }

    /**
     * @return the memo
     */
    public String getMemo() {
        return memo;
    }

    /**
     * @return the result
     */
    public String getResult() {
        return result;
    }
}

7.主要代码如下

package com.example.test.alipaytest;

import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.alipay.sdk.app.PayTask;
import com.example.test.alipaytest.alipay.PayResult;

import org.w3c.dom.Text;

import java.util.Map;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private static final int SDK_PAY_FLAG = 1;

    @SuppressLint("HandlerLeak")
    private Handler mHandler = new Handler() {
        @Override
        @SuppressWarnings("unused")
        public void handleMessage(Message msg) {
            /**
             *对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
             * 也就是说,这里的通知只是支付宝返回的支付结果,另外还需要获取服务端返回的信息.
             */
            switch (msg.what) {
                case SDK_PAY_FLAG:
                    PayResult payResult = new PayResult((Map<String, String>) msg.obj);
                    String resultInfo = payResult.getResult();
                    String resultStatus = payResult.getResultStatus();
                    /**
                     * 判断resultstatus,为9000则是支付成功,否则失败
                     * 9000这里有漏洞,需要深入判断??
                     */
                    if (TextUtils.equals(resultStatus, "9000")) {
                        /**
                         * 真实支付结果还需要依赖服务端返回的信息.
                         */
                        Toast.makeText(MainActivity.this, "支付成功", Toast.LENGTH_SHORT);
                    } else {
                        Toast.makeText(MainActivity.this, "支付失败", Toast.LENGTH_SHORT);
                    }

                    break;

                default:
                    break;
            }

        }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        TextView pay = findViewById(R.id.apppay);
        pay.setOnClickListener(this);
    }

    /**
     * 用户先将下单的信息上传服务端,服务端返回一个orderInfo
     * 再通过orderInfo调起支付宝APP支付.
     */
    private void payThread() {
        /**
         * 这里的orderInfo来源于服务端
         * orderInfo值示例:biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.01%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%220324023830-1710%22%7D&method=alipay.trade.app.pay&charset=utf-8&version=1.0&app_id=2014100900013222×tamp=2016-07-29+16%3A55%3A53&sign_type=RSA2&sign=mCBmIvPKx3ZqBQkxO4uJ9qSkRp09vQeYTl362ECkXJE1SqPYNNYi7Ev68g9a8fr4Fop5pi8eWt6Lt%2BLBhJfK5obUdOwazNf074%2Bq2c5O73s9qwc9%2FFQMj21FaVJBBJK3f587zjDytWymUBfIHSnAuGT7ZZlJIhp4a4c2WFFCfBtnOaVwxZ3tmnR96M6o1qze0dwQDGeDMGMa5z%2BiPxDNyw5JzE%2B1JGGRedzECtswb5Qk%2F%2FiAZZra7kunyCjBfzDPxSth6ulQ0mvil9PfBRrusJ24SnLrPy%2FPxx%2BAADldQnnWlcz5oZMHCSDgQhQtbjPBGdLYQwat8HNypQwKclKdug%3D%3D
         */
        final String orderInfo = "biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.01%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%220324023830-1710%22%7D&method=alipay.trade.app.pay&charset=utf-8&version=1.0&app_id=2014100900013222×tamp=2016-07-29+16%3A55%3A53&sign_type=RSA2&sign=mCBmIvPKx3ZqBQkxO4uJ9qSkRp09vQeYTl362ECkXJE1SqPYNNYi7Ev68g9a8fr4Fop5pi8eWt6Lt%2BLBhJfK5obUdOwazNf074%2Bq2c5O73s9qwc9%2FFQMj21FaVJBBJK3f587zjDytWymUBfIHSnAuGT7ZZlJIhp4a4c2WFFCfBtnOaVwxZ3tmnR96M6o1qze0dwQDGeDMGMa5z%2BiPxDNyw5JzE%2B1JGGRedzECtswb5Qk%2F%2FiAZZra7kunyCjBfzDPxSth6ulQ0mvil9PfBRrusJ24SnLrPy%2FPxx%2BAADldQnnWlcz5oZMHCSDgQhQtbjPBGdLYQwat8HNypQwKclKdug%3D%3D";

        Runnable payRunnable = new Runnable() {
            @Override
            public void run() {
                PayTask alipay = new PayTask(MainActivity.this);
                Map<String, String> result = alipay.payV2(orderInfo, true);
                Log.e("result:", result.toString());
                Message msg = new Message();
                msg.what = SDK_PAY_FLAG;
                msg.obj = result;
                mHandler.sendMessage(msg);

            }
        };
        Thread payThread = new Thread(payRunnable);
        payThread.start();

    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.apppay:
                payThread();
                break;
            default:
                break;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值