Android 集成支付宝sdk 支付

集成支付宝sdk
链接:官方文档
1、导入依赖

dependencies {
    // 添加下方的内容
    api 'com.alipay.sdk:alipaysdk-android:+@aar'
    // ... 其它依赖项
}

2、依赖导入后在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"
            tools:replace="android:configChanges" />
        <activity
            android:name="com.alipay.sdk.app.H5AuthActivity"
            android:configChanges="orientation|keyboardHidden|navigation"
            android:exported="false"
            android:screenOrientation="behind"
            android:windowSoftInputMode="adjustResize|stateHidden"
            tools:replace="android:configChanges" />

3、创建支付返回的接口回调 success/error

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

4、创建自己应用的支付的类
例如:这里包含了微信支付忽略掉就好

public class PayActivity extends BaseActivity<ActivityPayBinding>  implements IWXAPIEventHandler {

    private static final int SDK_PAY_FLAG = 1;
    private String orderInfo; // 订单Id
    private String accessToken;
    private IWXAPI api;
    private boolean paySuccess = false;
    private Handler mHandler = new Handler() {
        @SuppressLint("HandlerLeak")
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(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则代表支付成功
                    // 9000为支付成功
                    // 4000为支付失败
                    // 6001为取消支付
                    // 8000为支付结果确认中
                    if (TextUtils.equals(resultStatus, "9000")) {
                        // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
                        showToast("支付成功");
                        mViewBinding.paySuccessLayout.payRoot.setVisibility(View.VISIBLE);
                        mViewBinding.payPriceLayout.setVisibility(View.GONE);
                        mViewBinding.titleBar.textTitle.setVisibility(View.GONE);
                        mViewBinding.surePay.setVisibility(View.GONE);
                        paySuccess = true;
                    } else {
                        // 该笔订单真实的支付结果,需要依赖服务端的异步通知。
                        showToast("取消支付");
                    }
                    break;
                }

            }
        }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 初始化支付宝SDK
        PayTask payTask = new PayTask(this);

        // 初始化微信支付API
        api = WXAPIFactory.createWXAPI(PayActivity.this, Contents.APP_ID);

    }

    @Override
    protected void initView() {
        mViewBinding.titleBar.textTitle.setText("安全收银台");
        String price = getIntent().getExtras().getString("price");
        orderInfo = getIntent().getExtras().getString("orderCode");
        accessToken = getSharedPreferences("UserInformation", Context.MODE_PRIVATE).getString("access_token", "");
        mViewBinding.payPrice.setText(price);
        mViewBinding.paySuccessLayout.payPrice.setText(price);

    }

    @Override
    protected void initData() {
        mViewBinding.titleBar.backHomePage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (paySuccess) {
                    finish();
                    return;
                }
                showCancelPayDialog();
            }
        });

        mViewBinding.selectAliPay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mViewBinding.selectWechatPay.setChecked(false);
                mViewBinding.selectAliPay.setChecked(true);
            }
        });

        mViewBinding.selectWechatPay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mViewBinding.selectWechatPay.setChecked(true);
                mViewBinding.selectAliPay.setChecked(false);
            }
        });

        // 确认付款
        mViewBinding.surePay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!mViewBinding.selectWechatPay.isChecked() && !mViewBinding.selectAliPay.isChecked()) {
                    showToast("请选择支付方式");
                    return;
                }

                // 支付宝支付
                if (mViewBinding.selectAliPay.isChecked()) {
                    getRequestAlipayPayIdOrWechatPrepayId(Api.GET_ALIPAY_PAYID, "2");
                }

                // 微信支付
                if (mViewBinding.selectWechatPay.isChecked()) {
                    getRequestAlipayPayIdOrWechatPrepayId(Api.GET_WECHAT_PREPAYID, "1");
                }

            }
        });

    }

    private void getRequestAlipayPayIdOrWechatPrepayId(String url, String payWay) {
        HashMap<String, String> params = new HashMap<>();
        params.put("order_code", orderInfo);
        OkHttpUtils.get()
                .get(this
                        , url
                        , accessToken
                        , params
                        , new JsonResponseHandler() {
                            @Override
                            public void onFailure(int statusCode, String error_msg) {
                                super.onFailure(statusCode, error_msg);
                            }

                            @Override
                            public void onSuccess(int code, JSONObject jsonBody) {
                                super.onSuccess(code, jsonBody);

                                try {
                                    JSONObject jsonObject = new JSONObject(String.valueOf(jsonBody));
                                    int code1 = jsonObject.getInt("code");
                                    if (code1 != Contents.SUCCESS) {
                                        showToast(jsonObject.getString("msg"));
                                        return;
                                    }

                                } catch (JSONException e) {
                                    throw new RuntimeException(e);
                                }

                                Gson gson = new Gson();
                                if (payWay.equals("2")) { // 支付宝
                                    DataGetAlipayPayId response = gson.fromJson(String.valueOf(jsonBody), DataGetAlipayPayId.class);
                                    if (response.getCode() == Contents.SUCCESS) {
                                        String data = response.getData();
                                        Runnable payRunnable = new Runnable() {
                                            @Override
                                            public void run() {
                                                PayTask alipay = new PayTask(PayActivity.this);
                                                Map <String,String> result = alipay.payV2(data ,true);
                                                Message msg = new Message();
                                                msg.what = SDK_PAY_FLAG;
                                                msg.obj = result;
                                                // 支付后返回的结果
                                                mHandler.sendMessage(msg);
                                            }
                                        };
                                        // 必须异步调用
                                        Thread payThread = new Thread(payRunnable);
                                        payThread.start();
                                    }
                                } else if (payWay.equals("1")) { // 微信
                                    DataGetWechatPrepayId response = gson.fromJson(String.valueOf(jsonBody), DataGetWechatPrepayId.class);
                                    if (response.getCode() == Contents.SUCCESS) {
                                        String prepayId = response.getData().getPrepayId();
                                        getRequestWechatSign(prepayId); // 微信支付获取签名
                                    }
                                }
                            }
                        });

    }

    // 微信支付获取签名
    private void getRequestWechatSign(String prepayId) {
        HashMap<String, String> params = new HashMap<>();
        params.put("prepay_id", prepayId);

        OkHttpUtils.get()
                .get(this
                        , Api.GET_WECHAT_SIGN
                        , accessToken
                        , params
                        , new JsonResponseHandler() {
                            @Override
                            public void onFailure(int statusCode, String error_msg) {
                                super.onFailure(statusCode, error_msg);

                            }

                            @Override
                            public void onSuccess(int code, JSONObject jsonBody) {
                                super.onSuccess(code, jsonBody);
                                Gson gson = new Gson();
                                DataGetWechatSign response = gson.fromJson(String.valueOf(jsonBody), DataGetWechatSign.class);
                                if (response.getCode() == Contents.SUCCESS) {
                                    PayReq request = new PayReq();
                                    request.appId = Contents.APP_ID;
                                    request.partnerId = Contents.PARTNER_ID;
                                    request.prepayId= prepayId;
                                    request.packageValue = "Sign=WXPay";
                                    request.nonceStr= response.getData().getNonceStr();
                                    request.timeStamp= response.getData().getTimeStamp();
                                    request.sign= response.getData().getSign();
                                    api.sendReq(request);
                                }
                            }
                        });


    }


    private void showCancelPayDialog() {
        View view = LayoutInflater.from(this).inflate(R.layout.dialog_sure_cancel_pay, null, false);
        TextView sureLeave = view.findViewById(R.id.sure_leave);
        TextView continuePay = view.findViewById(R.id.continue_payment);

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setView(view);
        AlertDialog alertDialog = builder.create();
        alertDialog.show();
        sureLeave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alertDialog.dismiss();
                Intent intent = new Intent(PayActivity.this, OrderActivity.class);
                Bundle bundle = new Bundle();
                bundle.putInt("position", 0);
                intent.putExtras(bundle);
                startActivity(intent);
                finish();
            }
        });
        continuePay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alertDialog.dismiss();

                if (!mViewBinding.selectWechatPay.isChecked() && !mViewBinding.selectAliPay.isChecked()) {
                    showToast("请选择支付方式");
                    return;
                }

                // 支付宝支付
                if (mViewBinding.selectAliPay.isChecked()) {
                    getRequestAlipayPayIdOrWechatPrepayId(Api.GET_ALIPAY_PAYID, "2");
                }

                // 微信支付
                if (mViewBinding.selectWechatPay.isChecked()) {
                    getRequestAlipayPayIdOrWechatPrepayId(Api.GET_WECHAT_PREPAYID, "1");
                }

            }
        });
        alertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
            @Override
            public void onDismiss(DialogInterface dialog) {
                mViewBinding.popShowBgLayout.popShowBg.setVisibility(View.GONE);
            }
        });
    }

    @Override
    public void onReq(BaseReq baseReq) {

    }

    @Override
    public void onResp(BaseResp baseResp) {

    }
}
  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Android集成支付宝支付可以通过以下步骤完成。 首先,注册支付宝开发者账号并创建应用,获得必要的应用ID和密钥。 其次,将支付宝SDK导入到项目中。可以通过Gradle或手动导入方式进行。 接下来,在需要使用支付宝支付的Activity中,添加支付宝支付的逻辑。 首先,创建支付宝支付的请求参数,包括订单号、订单金额、商品名称等必要信息。然后使用支付宝提供的接口将请求参数进行签名,生成最终的支付参数。 接着,调用支付宝提供的支付接口,将支付参数传入,并设置支付结果的回调监听。用户触发支付时,将会跳转到支付宝支付页面。 最后,在回调监听中处理支付结果。支付宝支付完成后,会通过回调返回支付结果。根据返回的支付结果,可以进行相应的操作,如更新订单状态、跳转到支付成功页面等。 需要注意的是,为了保障支付安全,建议在服务器端进行订单的签名和验签操作,避免将密钥等敏感信息暴露在客户端。 以上就是Android集成支付宝支付的基本流程,开发者可以根据具体需求进行相应的参数设置和结果处理。 ### 回答2: 在Android平台上集成支付宝支付是较为常见的一种支付方式,下面我会用300字回答这个问题。 首先,为了集成支付宝支付,我们需要在支付宝开放平台上注册一个开发者账号,并创建一个应用。然后,我们需要下载支付宝提供的SDK,并将其引入到我们的Android工程中。在引入SDK后,我们可以根据支付宝提供的文档和示例代码进行具体的集成操作。 集成支付宝支付的过程主要包括以下几个步骤: 1. 在AndroidManifest.xml文件中配置支付宝支付所需的权限、服务以及activity。 2. 在应用的代码中,我们需要创建一个支付宝客户端实例,并配置相应的支付参数,如商户ID、订单号、金额等。 3. 调用支付宝客户端实例的支付接口,将支付参数传递给支付宝服务器。 4. 支付宝服务器会返回一个支付结果,我们可以在回调方法中处理这个支付结果,并根据支付结果的状态进行相应的操作,如更新订单状态、跳转到支付成功页面等。 除了以上基本的支付流程外,我们还可以根据需求添加一些附加功能,如查询订单状态、退款等。 在集成支付宝支付时,我们还需要注意一些细节问题。例如,支付宝要求我们的应用必须使用HTTPS协议与其服务器进行通信,因此我们需要确保我们的应用开启了相应的网络权限,并在网络请求时使用HTTPS协议。 另外,为了保证支付安全,我们还需要在支付宝开放平台上生成一个RSA密钥,并将其配置到我们的应用中。 总的来说,集成支付宝支付相对来说并不复杂,只需要按照支付宝的文档和示例代码进行操作,就可以使我们的应用支持支付宝支付功能了。而支付宝支付作为一种简单、安全、方便的支付方式,可以为我们的应用提供更好的用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值