Android 微信支付V3

在移动支付领域,微信支付是一种非常常见的支付方式。为了方便开发者在 Android 平台上集成微信支付功能,微信提供了相应的 SDK 和 API。

安装 SDK

首先,我们需要在 Android 项目中引入微信支付的 SDK。可以将以下依赖项添加到 Gradle 文件中:

implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:x.x.x' // 替换为最新版本

需要注意的是,这里的 x.x.x 需要替换为最新版本号。

配置权限和信息

在 AndroidManifest.xml 文件中,我们需要添加一些权限和信息用于使用微信支付功能。请将以下代码添加到文件中:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<activity
    android:name=".wxapi.WXPayEntryActivity"
    android:exported="true"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoDisplay" />
<activity-alias
    android:name=".wxapi.WXPayEntryActivityAlias"
    android:exported="true"
    android:targetActivity=".wxapi.WXPayEntryActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="wxYourAppId" />
    </intent-filter>
</activity-alias>

<meta-data
    android:name="WX_APP_ID"
    android:value="your_wechat_app_id" />

请确保将 your_wechat_app_id 替换为你自己的微信 App ID。另外,如果你的项目中还没有 wxapi 目录,需要手动创建该目录,并在其中创建 WXPayEntryActivityWXPayEntryActivityAlias 类。

集成支付功能

接下来,我们可以开始集成微信支付功能了。首先,在你的代码中导入微信支付相关的类和接口:

import com.tencent.mm.opensdk.constants.Build;
import com.tencent.mm.opensdk.modelpay.PayReq;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;

然后,在合适的位置初始化微信 API:

IWXAPI api = WXAPIFactory.createWXAPI(context, "your_wechat_app_id", true);
// 检查是否支持微信支付
boolean isPaySupported = api.getWXAppSupportAPI() >= Build.PAY_SUPPORTED_SDK_INT;
if (isPaySupported) {
    api.registerApp("your_wechat_app_id");
}

代码中的 context 是当前上下文对象,需要根据实际情况进行替换。

接下来,我们可以使用 PayReq 创建一个支付请求对象,并发送给微信支付平台:

PayReq request = new PayReq();
request.appId = "your_wechat_app_id";
request.partnerId = "your_partner_id";
request.prepayId = "your_prepay_id";
request.packageValue = "Sign=WXPay";
request.nonceStr = "your_nonce_str";
request.timeStamp = "your_time_stamp";
request.sign = "your_sign";

boolean isSendReqSucceed = api.sendReq(request);

在上述代码中,我们需要将支付请求的参数填充到 PayReq 对象中。其中,your_wechat_app_id 是微信 App ID,your_partner_id 是商户号,your_prepay_id 是预支付订单号,your_nonce_str 是随机字符串,your_time_stamp 是时间戳,your_sign 是签名。

发送支付请求后,微信支付平台会返回一个支付结果给我们。为了接收支付结果,我们需要创建一个类继承自 Activity,并重写 onNewIntent 方法:

public class WXPayEntryActivity extends Activity {
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        api.handleIntent(intent, this);
    }
}

在该类中,我们需要将接收到的支付结果传递给微信 API 进行处理。

支付流程图

接下来,我们通过序列图的方式展示微信支付的整个流程:

sequenceDiagram
    participant App
    participant WeChat
    participant Merchant
    participant WeChat Pay

    App->>WeChat: 创建支付请求
    WeChat->>Merchant: 发送支付请求
    Merchant->>WeChat Pay: 向