Android客户端5分钟集成支付宝支付

来源:互联网 发布:c 获取数据库实例名 编辑:程序博客网 时间:2024/06/05 05:39

蚂蚁金服开放平台:
https://open.alipay.com/platform/home.htm
alipay在2.0后更注重安全性,我们客户端需要保存的东西没有了
很轻松就可以实现支付功能。这里我们应该知道,服务端已经集成了alipay,公司自己的服务器会给我们提供一个接口,我们只需要从这个接口里拿到orderInfo,这个String是什么呢,我们看官方文档
这里写图片描述

省去了我们之前客户端需要保存的信息

// 商户PID    public static final String PARTNER = "";    // 商户收款账号    public static final String SELLER = "";    // 商户私钥,pkcs8格式    public static final String RSA_PRIVATE = "";    // 支付宝公钥    public static final String RSA_PUBLIC = "";

下面我们看新的集成步骤
1 下载sdk,add as library
这里写图片描述
2 清单文件配置
权限

<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" />

H5页面

 <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>

3支付页面
Handler处理异步任务的子线程回调

 private static final int SDK_PAY_FLAG = 1;    private String orderInfo;    private Handler mHandler = new Handler() {        public void handleMessage(Message msg) {            switch (msg.what) {                case SDK_PAY_FLAG: {                    @SuppressWarnings("unchecked")                    PayResult payResult = new PayResult((Map<String, String>) msg.obj);                    /**                     对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。                     */                    String resultInfo = payResult.getResult();// 同步返回需要验证的信息                    String resultStatus = payResult.getResultStatus();                    // 判断resultStatus 为9000则代表支付成功                    if (TextUtils.equals(resultStatus, "9000")) {                        // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。                        Toast.makeText(AddressInfoActivity.this, "支付成功", Toast.LENGTH_SHORT).show();                        setResult(1);                        finish();                    } else {                        // 该笔订单真实的支付结果,需要依赖服务端的异步通知。                        Toast.makeText(AddressInfoActivity.this, "支付失败", Toast.LENGTH_SHORT).show();                    }                    break;                }            }        }    };

异步任务(支付)
需要orderInfo,要提前请求自己服务器接口回调,拿到对应的字符串信息

/**     * 支付宝支付异步任务     *     * @author haoran     */private class AliPayThread extends Thread {        @Override        public void run() {            PayTask alipay = new PayTask(AddressInfoActivity.this);            Map<String, String> result = alipay.payV2(orderInfo, true);            Message msg = new Message();            msg.what = SDK_PAY_FLAG;            msg.obj = result;            mHandler.sendMessage(msg);        }    }

PayResult,直接复制过去

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;    }}