Android App调起微信支付实现步骤

1. 简介

在Android应用中实现调起微信支付功能,需要按照以下步骤进行操作。本文将详细介绍每一步需要做什么,提供相关代码并进行注释。

2. 步骤

步骤 动作 代码
1 引入微信支付SDK 添加依赖库
2 注册应用 在AndroidManifest.xml中配置
3 创建支付请求 使用统一下单API生成支付参数
4 发起支付 调起微信支付
5 处理支付结果 在onActivityResult中处理支付结果

2.1 引入微信支付SDK

在项目的build.gradle文件中,添加微信支付SDK的依赖库。在dependencies中添加以下代码:

implementation 'com.tencent.mm.opensdk:wechat-sdk-android:xxx' // xxx为版本号

2.2 注册应用

在AndroidManifest.xml文件中,添加以下代码,注册应用并配置合适的信息:

<manifest>
    <application>
        <!-- 注册AppID -->
        <meta-data
            android:name="com.tencent.mm.sdk.openapi.IWXAPI_APPID"
            android:value="YOUR_APP_ID" />
        <!-- 注册微信支付SDK -->
        <activity
            android:name="com.tencent.mm.opensdk.openapi.WXPayEntryActivity"
            android:exported="true"
            android:launchMode="singleTop" />
    </application>
</manifest>

2.3 创建支付请求

在调起支付前,需要使用统一下单API生成支付参数。以下是使用OkHttp库发送HTTP请求的示例代码:

String url = "
String xmlData = generateXmlData(); // 生成支付请求的XML数据

OkHttpClient client = new OkHttpClient();
RequestBody body = RequestBody.create(MediaType.parse("application/xml"), xmlData);
Request request = new Request.Builder()
    .url(url)
    .post(body)
    .build();

try {
    Response response = client.newCall(request).execute();
    if (response.isSuccessful()) {
        // 解析支付结果XML数据
        parseXmlData(response.body().string());
        // 获取支付参数
        String prepayId = getPrepayId();
        String nonceStr = getNonceStr();
        String timeStamp = getTimeStamp();
        String sign = getSign();
        // 调起支付
        payWithWeChat(prepayId, nonceStr, timeStamp, sign);
    }
} catch (IOException e) {
    e.printStackTrace();
}

2.4 发起支付

调起微信支付需要使用微信SDK提供的方法。以下是示例代码:

private void payWithWeChat(String prepayId, String nonceStr, String timeStamp, String sign) {
    IWXAPI api = WXAPIFactory.createWXAPI(this, "YOUR_APP_ID", true);
    PayReq req = new PayReq();
    req.appId = "YOUR_APP_ID";
    req.partnerId = "YOUR_PARTNER_ID";
    req.prepayId = prepayId;
    req.nonceStr = nonceStr;
    req.timeStamp = timeStamp;
    req.packageValue = "Sign=WXPay";
    req.sign = sign;
    api.sendReq(req);
}

2.5 处理支付结果

在调起支付后,用户完成支付后会返回到应用中。我们需要在onActivityResult方法中处理支付结果。以下是示例代码:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == ConstantsAPI.COMMAND_PAY_BY_WX) {
        if (resultCode == Activity.RESULT_OK) {
            // 支付成功
            String result = data.getStringExtra("result");
            // 处理支付结果
            handlePaymentResult(result);
        } else {
            // 支付失败
            handlePaymentFailure();
        }
    }
}

3. 甘特图

gantt
    dateFormat  YYYY-MM-DD
    title Android App调起微信支付实现步骤
    section 引入微信支付SDK
    引入微信支付SDK         : done, 2022-01-01, 1d
    section 注册应用
    注册应用         : done, 2022-01-02, 1d
    section 创建支付请求
    创建支付请求         : done, 2022-01-03, 2d
    section 发起支付
    发起支付         : done, 2022-01-05, 1d
    section 处