安卓接入微信支付,支付宝支付

一、微信支付
     1、接入准备,去微信开发平台注册好账户,拿到APPID,巴拉巴拉,这些就略过了。在微信平台注册应用的时候,需要填一个应用包签名的信息,其实那个就是填你APP的sha1值。

     2、通过后台给我们的接口,拿到一些支付必须的参数

   安卓接入微信支付,支付宝支付

3、将我们从后台拿到的的参数 全部传给微信
IWXAPI wxapi = WXAPIFactory.createWXAPI(activity, Contance.APP_ID, true);
// 将该app注册到微信
wxapi.registerApp(Contance.APP_ID);
if (!wxapi.isWXAppInstalled()) {
    ToastUtils.showToast(activity, "你没有安装微信");
    return;
}
//我们把请求到的参数全部给微信
PayReq req = new PayReq(); //调起微信APP的对象
req.appId = Contance.APP_ID;
req.partnerId = payReponse.getData().getPartnerid();
req.prepayId = payReponse.getData().getPrepayid();
req.nonceStr = payReponse.getData().getNoncestr();
req.timeStamp = String.valueOf(payReponse.getData().getTimestamp());
req.extData = type;
req.packageValue = payReponse.getData().getPackageX(); //Sign=WXPay
req.sign = payReponse.getData().getSign();
wxapi.sendReq(req); //发送调起微信的请求

4、微信支付的回调信息,必须要按照微信的官方规定的包名(wxapi)类名(WXPayEntryActivity)创建。

安卓接入微信支付,支付宝支付

在WXPayEntryActivity里接收微信支付返回的结果回调,然后做相应的提示,当然有的人说根据微信的返回结果不准确,我们应该根据微信给后台的返回结果作为支付成功与否的判断,所以,这里就要后台给我们一个接口来加以判断了。

@Override
public void onResp(BaseResp resp) {
 
    if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
        int code = resp.errCode;
        switch (code) {
            case 0://支付成功
                }
                break;
            case -1:
                // 支付失败 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等
                ToastUtils.showToast(WXPayEntryActivity.this, "支付失败");
                break;
            case -2:
                ToastUtils.showToast(WXPayEntryActivity.this, "支付取消");
                break;
        }
    }
}

微信支付大概就到这里了,我接入的时候没遇到什么大问题,可能在这里描述得不是很详细,但是希望的这些经历能帮到有需要的人,做一个记录。

 

二、支付宝支付

1、第一步当然也是去支付宝开发平台申请资格了,创建应用获取APPID,配置应用,添加功能并签约,配置秘钥,应用签名也是APP的sha1值。(虽然这些都不是我做的,,,)

2、集成SDK。我们下载支付宝给我们提供的jar包也可以,添加依赖也可以,各取所需吧。我是下载支付宝的jar包(偷下懒)。

3、然后通过后台接口,返回一长串的字符串,里面包含了APPID啊商户ID啊等等各种信息。

4、下面就是常规写法了吧,

private void ali_pay() {
    // 必须异步调用
    Thread payThread = new Thread(payRunnable);
    payThread.start();
}

private static final int SDK_PAY_FLAG = 1;
final Runnable payRunnable = new Runnable() {
    @Override
    public void run() {
        PayTask alipay = new PayTask(HandselActivity.this);
        Map<String, String> result = alipay.payV2(orderInfo, true);//orderInfo就是上面后台给我们返回的一大串字符串
        MyLog.e("msp", result.toString());
        Message msg = new Message();
        msg.what = SDK_PAY_FLAG;
        msg.obj = result;
        mHandler.sendMessage(msg);
    }
};
private Handler mHandler = new Handler() {
    @SuppressWarnings("unused")
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case SDK_PAY_FLAG: {
                // 支付宝返回此次支付结果及加签,建议对支付宝签名信息拿签约时支付宝提供的公钥做验签
                Map<String, String> mapPayResult = (Map<String, String>) msg.obj;
                String resultStatus = mapPayResult.get("resultStatus");
                // 判断resultStatus 为“9000”则代表支付成功,具体状态码代表参考:https://docs.open.alipay.com/204/105301
                if (TextUtils.equals(resultStatus, "9000")) {
                    showToast("支付成功");
                } else {
                    // 判断resultStatus 为非“9000”则代表可能支付失败
                    // “8000”代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
                    if (TextUtils.equals(resultStatus, "8000")) {
                        showToast("支付结果确认中");
                    } else if (TextUtils.equals(resultStatus, "6001")) { //用户中途取消
                        showToast("取消支付");
                    } else {
                        // 其他值就可以判断为支付失败
                        showToast("支付失败");
                    }
                }
            }
            default:
                break;
        }
    }
};

好了支付宝支付的接入大概就这些了,可能是我运气不太好吧,都没遇到什么问题,总结的东西就这些了。做个记录。

如果哪里有什么不对的地方,希望指出。谢谢~

QQ:308627352