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
目录,需要手动创建该目录,并在其中创建 WXPayEntryActivity
和 WXPayEntryActivityAlias
类。
集成支付功能
接下来,我们可以开始集成微信支付功能了。首先,在你的代码中导入微信支付相关的类和接口:
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: 向