1.首先导入微信支付依赖
//wx 支付依赖(包含统计功能)
implementation'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
2.依赖导入以后在包后面创建 wxapi 包 (注意:wxapi包一定要放在根目录下面)
3.在wxapi包下创建 WXPayEntryActivity 接收微信支付结果回调的类(类名必须一致)
4.在清单文件中配置微信支付 (android:exported="true" 必须加)
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<!-- 这里填写你申请的app id -->
<data android:scheme="你申请的appid" />
</intent-filter>
</activity>
5.以上的准备工作完成以后开始调起微信支付,以下是调起微信支付的方法
IWXAPI api = WXAPIFactory.createWXAPI(this, "你申请的wxappID", false);//填写自己的APPIDapi.registerApp("wxAPPID");//填写自己的APPID,注册本身APPPayReq req = new PayReq();//PayReq就是订单信息对象
//建议动态监听微信启动广播进行注册到微信
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// 将该app注册到微信
api.registerApp("你申请的wxappID");
}
}, new IntentFilter(ConstantsAPI.ACTION_REFRESH_WXAPP));
//订单信息后台都会返回,直接拿来用即可
PayReq req = new PayReq();//PayReq就是订单信息对象
req.appId = "你申请的wxappID";//你的微信appid
req.partnerId = " "; //商户号
req.prepayId = " " ; //预支付交易会话ID
req.nonceStr = " "; //随机字符串
req.timeStamp =" "; //时间戳
req.packageValue = "Sign=WXPay"; //扩展字段,这里固定填写Sign=WXPay
req.sign = " ";//签名
api.sendReq(req);//将订单信息对象发送给微信服务器,即发送支付请求
6.在 WXPayEntryActivity 中处理支付结果
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private IWXAPI api;
private static final String TAG = "WXPayEntryActivity";
private String app_id = "你申请的qppid";//微信开发后台申请的app_id
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
api = WXAPIFactory.createWXAPI(this, app_id);
api.handleIntent(getIntent(), this);
}
@Override
public void onReq(BaseReq baseReq) {
}
@Override
public void onResp(BaseResp resp) {
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
switch (resp.errCode) {
case 0://支付成功
Toast.makeText(this, "支付成功", Toast.LENGTH_SHORT).show();
Log.d(TAG, "onResp: resp.errCode = 0 支付成功");
break;
case -1://错误,可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等
Toast.makeText(this, "支付错误" + resp.errCode, Toast.LENGTH_SHORT).show();
Log.d(TAG, "onResp: resp.errCode = -1 支付错误");
break;
case -2://用户取消,无需处理。发生场景:用户不支付了,点击取消,返回APP。
Log.d(TAG, "onResp: resp.errCode = -2 用户取消");
Toast.makeText(this, "用户取消支付" , Toast.LENGTH_SHORT).show();
break;
}
finish();//这里需要关闭该页面
}
}
}
7.这就是微信支付的全部流程,在android 11版本会出现调不起来,只需在清单文件加入以下内容就可适配android 11
<queries>
<package android:name="com.tencent.mm" />
</queries>
如果在使用中出现了在android studio中可以调起微信支付,但是在打包以后调不起来,这种问题绝对是签名问题,因为debug版的应用签名和release版的应用签名不一致,此时一定要把签名改成统一
signingConfigs {
//这里是签名配置信息
release {
keyAlias 'key0' //jks别名
keyPassword '123456' //密码
storeFile file('D:\\Login\\app\\test.jks') //jks路径
storePassword '123456' //密码
}
buildTypes {
//这里是release版的签名配置
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
//这里是debug版的签名配置
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
}
}
这里配置完成以后下载微信官方提供的签名文件apk,输入项目的包名,就可生成应用签名,然后把应用签名同步到微信开放平台的应用签名,这样就可以在debug和release版都可以调起微信支付