【android】轻松集成支付包支付

2 篇文章 0 订阅
1 篇文章 0 订阅


一、首先去支付宝开发平台下载 alipaySdk-xxxxxxxx.jar包并放入商户应用工程的libs目录下,如下图。

1.png

在app module下的build.gradle下手动添加依赖,如下代码所示:

dependencies {
......
compile files('libs/alipaySdk-20170725.jar')
......
}

二、修改AndroidManifest

在商户应用工程的AndroidManifest.xml文件里面添加声明:

<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>
和权限声明:

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

三、添加混淆

在商户应用工程的proguard-project.txt里添加以下相关规则:

-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.** { *;}
至此,开发包开发资源导入完成。


四、开始支付代码

//根据自己的网络框架去请求后天给的一个接口,得到挑用支付宝接口的数据如下:

NetUtils.getInstance().postMonth(PaymeijiaActivity.this, Constant.APARTPAY, NetUtils.getPay(startime, endtime, room_id, "alipay", allmoney, "1"), mHandler, Constant.ONE);

得到返回的数据形式:

String result = alipay_sdk=alipay-sdk-php-20161101&app_id=2017031306200467&biz_content=%7B%22body%22%3A%22%5Cu6d4b%5Cu8bd5%5Cu6570%5Cu636e%22%2C%22subject%22%3A%22App%5Cu652f%5Cu4ed8%5Cu6d4b%5Cu8bd5%22%2C%22out_trade_no%22%3A%221496387386561323%22%2C%22timeout_express%22%3A%2230m%22%2C%22total_amount%22%3A0.01%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%7D&charset=UTF-8&format=json&method=alipay.trade.app.pay&notify_url=http%3A%2F%2F222.173.28.166%3A8087%2Fnotify_url.php&sign_type=RSA2&timestamp=2017-06-02+07%3A09%3A46&version=1.0&sign=H1NJRwc9xtyZrtjd8kCDNwnZ%2FxdE%2FBFeM9sJK%2FXrRNC6npgcgJeA%2FV7xRKIO4AV75drG%2B068iVQUAIjy6poqPC9BTeKa2u4A3EJ6tl0zUO87GD5uKY%2Fb%2BaCHTXGqH3z6toZYa%2BzNBjPKcvydFuq2JRDRT8OTPay8N1GAZ10oDlnhYRNyOFok9ljlq8sc3J9sQioqxEPpIWIygwk0AxD%2FB7dUzKcCBFaN7%2FjAZlOnsyLpu%2FPwbJbxpPxSg9ZYXsx2u86wdLQQgkWVvyzasjHczO%2BgFhcBmpc%2FyTWeBvZmUj3nLrHhZqS6ZiwLkXQG3IiFwy986HiozRwsdxplnaKgyQ%3D%3D
五、调起支付
Runnable payRunnable = new Runnable() {
                        @Override
                        public void run() {
                            // 构造PayTask 对象
                            PayTask alipay = new PayTask(PaymeijiaActivity.this);
                            // 调用支付接口,获取支付结果
                            String result = alipay.pay(result , true);
                            Message msg = new Message();
                            msg.what = Constant.ONE;
                            msg.obj = result;
                            mHandler.sendMessage(msg);
                        }
                    };
                    // 必须异步调用
                    Thread payThreadpay = new Thread(payRunnable);
                    payThreadpay.start();


//支付宝支付结果返回
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (data == null) {
            return;
        }
        String msg = "";
        /*
         * 支付控件返回字符串:success、fail、cancel 分别代表支付成功,支付失败,支付取消
         */
        String str = data.getExtras().getString("pay_result");
        Log.v("zftphone", "2 " + data.getExtras().getString("merchantOrderId"));
        if (str.equalsIgnoreCase("success")) {
            msg = "支付成功!";

        } else if (str.equalsIgnoreCase("fail")) {
            msg = "支付失败!";

        } else if (str.equalsIgnoreCase("cancel")) {

            msg = "用户取消了支付";
        }
        //支付完成,处理自己的业务逻辑!
    }

六、支付结果后UI操作
private Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case Constant.ONE: {
                    PayResult payResult = new PayResult((String) msg.obj);
                    /**
                     对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
                     */
//                    String resultInfo = payResult.getResult();// 同步返回需要验证的信息
                    String resultStatus = payResult.getResultStatus();
                    // 判断resultStatus 为9000则代表支付成功
                    if (TextUtils.equals(resultStatus, "9000")) {
                        // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
                        Toast.makeText(PaymeijiaActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
                        Intent intent = new Intent(PaymeijiaActivity.this, PayOkActivity.class);
                        intent.putExtra("payMoney", payMoney);
                        intent.putExtra("pay", "ok");
                        startActivity(intent);
                        finish();
                    } else if (TextUtils.equals(resultStatus, "6001")) {
                        // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
                        Toast.makeText(PaymeijiaActivity.this, "用户中途取消", Toast.LENGTH_SHORT).show();
                                    
                    } else {
                        // 该笔订单真实的支付结果,需要依赖服务端的异步通知。
                        Toast.makeText(PaymeijiaActivity.this, "支付失败", Toast.LENGTH_SHORT).show();
                        Intent intent = new Intent(PaymeijiaActivity.this, PayOkActivity.class);
                        intent.putExtra("pay", "fail");
                        startActivity(intent);
                        finish();
                    }
                    break;
                
		default:
                break;
        }
    }

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值