Android 微信支付和支付宝支付 快速接入

先放上接入两个支付平台的官方文档地址
一、支付宝支付
导入开发资源
这里写图片描述
在商户应用工程的AndroidManifest.xml文件里面添加声明:

    <activity
                android:name="com.alipay.sdk.app.H5PayActivity"
                android:configChanges="orientation|keyboardHidden|navigation"
                android:exported="false"
                android:screenOrientation="behind" >
    </activity>
    <activity
                android:name="com.alipay.sdk.auth.AuthActivity"
                android:configChanges="orientation|keyboardHidden|navigation"
                android:exported="false"
                android:screenOrientation="behind" >
     </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" />

添加混淆规则

-libraryjars libs/alipaySingle-20161222.jar

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

二、微信支付
导入开发资源

这里写图片描述

商户在微信开放平台申请开发应用后,微信开放平台会生成APP的唯一标识APPID。由于需要保证支付安全,需要在开放平台绑定商户应用包名和应用签名,设置好后才能正常发起支付。设置界面在【开放平台】中的栏目【管理中心 / 修改应用 / 修改开发信息】里面,如图所示:

这里写图片描述

应用包名:是在APP项目配置文件AndroidManifest.xml中声明的package值,例如DEMO中的package=”net.sourceforge.simcpux”。

应用签名:根据项目的应用包名和编译使用的keystore,可由签名工具生成一个32位的md5串,在调试的手机上安装签名工具后,运行可生成应用签名串,如图8.9所示,绿色串即应用签名。签名工具下载地址
https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk

这里写图片描述

商户APP工程中引入微信JAR包,调用API前,需要先向微信注册您的APPID,代码如下:

public class MyApplication extends Application {

    IWXAPI msgApi = null;

    @Override
    public void onCreate()
    {
            msgApi = WXAPIFactory.createWXAPI(this, null);
            // 将该app注册到微信
            msgApi.registerApp(Constant.WX_APP_ID);
    }
}

Constant.java代码

public class Constant {
    //appid 微信分配的公众账号ID              
    public static final String WX_APP_ID = "wxc2d0381e95948db6";
    //商户号 微信分配的公众账号ID
    public static final String WX_MCH_ID = "1432223602";
    //API密钥,在商户平台设置
    public static final String WX_API_KEY = "";
}

下面是集合调用两种支付方法的统一方法(仅适用于服务器返回支付参数orderInfo):

//服务器返回加密参数
    private String orderInfo;

    /**
     * 支付宝
     */
    private void alipay(final String orderInfo) {
        Runnable payRunnable = new Runnable() {
            @Override
            public void run() {
                PayTask alipay = new PayTask(PayActivity.this);
                Map<String, String> result = alipay.payV2(orderInfo, true);
                Log.i("msp", result.toString());
                Message msg = new Message();
                msg.what = SDK_PAY_FLAG;
                msg.obj = result;
                mHandler.sendMessage(msg);
            }
        };

        Thread payThread = new Thread(payRunnable);
        payThread.start();
    }
 /**
     * 微信支付
     *
     * @param data
     */
    private void weixinPay(String data) {
        // 通过WXAPIFactory工厂,获取IWXAPI的实例
        IWXAPI api = WXAPIFactory.createWXAPI(this, null);
        // 将该app注册到微信
        api.registerApp(ConstantValue.WX_ID);
        LogUtil.d("data=" + data);
        try {
            JSONObject json = new JSONObject(data);
            PayReq req = new PayReq();
            req.appId = json.getString("appid");
            req.partnerId = json.getString("partnerid");
            req.prepayId = json.getString("prepayid");
            req.nonceStr = json.getString("noncestr");
            req.timeStamp = json.getString("timestamp");
            req.packageValue = json.getString("package");
            req.sign = json.getString("sign");
            req.extData = "app data"; // optional
            // 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
            api.sendReq(req);
            finish();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

返回调用的线程

 private Handler mHandler = new Handler() {
        @SuppressWarnings("unused")
        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(PayActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
                        startActivity(new Intent(PayActivity.this, PayEndActivity.class));
                        finish();
                    } else {
                        // 该笔订单真实的支付结果,需要依赖服务端的异步通知。
                        Toast.makeText(PayActivity.this, payResult.getMemo(), Toast.LENGTH_SHORT).show();
                    }
                    break;
                case 0:

                    orderList = orderdetails.getOrders();
                    for (OrderDetailsBean.OrdersBean ordersBean : orderList) {
                        if (ordersBean.getProducts().size() != 0) {
                            productsBeanList = ordersBean.getProducts();
                            for (OrderDetailsBean.OrdersBean.ProductsBean productsBean : productsBeanList) {
                                if (productsBean.getSkus().size() != 0) {
                                    datas = productsBean.getSkus();
                                    allSkudatas.addAll(datas);
                                }
                            }
                        }
                    }
                    ordersbean = orderList.get(0);
                    order_priceTv.setText("¥" + orderdetails.getTotalPay() + "");
                    orderAdapter = new OrderAdapter(context, allSkudatas);
                    goods_Lv.setAdapter(orderAdapter);
                    dialogUtils1.dismiss();
                    break;
                default:
                    break;
            }
        }
    };

所有代码都贴在上面了,大家不懂的可以多看下官网。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值