安卓支付篇|安卓接入支付宝支付 傻瓜式接入

安卓支付篇|安卓接入支付宝支付 傻瓜式接入

我们的项目一般都会用到支付 这里涉及到支付宝,微信,银联等支付方式;

今天我们要讲的是 支付宝支付的接入;

为了方便新手的接入,这次的博客只讲应用App端的接入流程;

涉及到Appid 等参数的配置,我们在实际开发中只需要服务端配置即可;

有兴趣可以了解下配置流程;

言归正传 下面我们来看我们的接入流程:

1.下载支付宝 JAR包:

常规操作,到开放平台直接下载jar包,存放如图:

2.添加我们的Jar包依赖 一句话搞定:

 //TODO 支付宝支付
    api files('libs/alipaySdk.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调用所需的Activity配置:

<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.添加支付宝Jar的混淆 :

在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.建立支付宝支付的回调类:


 
import android.text.TextUtils;
 
import java.util.Map;
 
/**
 * 支付宝回调
 */
 
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.最后一步,最重要的一步,调起支付相关核心代码:

  /**
     * 支付宝支付相关
     */

    private static final int SDK_PAY_FLAG = 1;
    private static class MyHandle extends MyHandler<ComfirmOrderAct> {
        public MyHandle(ComfirmOrderAct classs) {
            super(classs);
        }
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            ComfirmOrderAct activity= ref.get();
            switch (msg.what) {
                case SDK_PAY_FLAG:
                    PayResult payResult = new PayResult((Map<String, String>) msg.obj);
                    String resultStatus = payResult.getResultStatus();
                    /**
                     * 判断resultstatus,为9000则是支付成功,否则失败
                     * 9000这里有漏洞,需要深入判断??
                     */
                    if (TextUtils.equals(resultStatus, "9000")) {
                        /**
                         * 真实支付结果还需要依赖服务端返回的信息.
                         */
                        ToastUtil.show(activity,"支付成功");
                        activity.finish();
                    } else {
                        ToastUtil.show(activity,"支付失败");
                    }
                    break;
                default:
                    break;
            }

        }

    }

    /**
     * 用户先将下单的信息上传服务端,服务端返回一个orderInfo
     * 再通过orderInfo调起支付宝APP支付.
     */
    private  String orderInfo;
    private void payThread() {
        Runnable payRunnable = new Runnable() {
            @Override
            public void run() {
                PayTask alipay = new PayTask(getActivity());
                Map<String, String> result = alipay.payV2(orderInfo, true);
                Message msg = new Message();
                msg.what = SDK_PAY_FLAG;
                msg.obj = result;
                mHandler.sendMessage(msg);
            }
        };
        ThreadManager.THREAD_POOL_EXECUTOR.execute(payRunnable);
    }

Handler可以修改为自己常用的方式,线程池可以修改为自己的普通线程运行;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值