导入包:
//微信库
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
导入微信回调:
package com.example.myaries.widget.wxapi;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import com.example.myaries.constant.ProjectConfig;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity";
private IWXAPI api;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.pay_weixin_result);
api = WXAPIFactory.createWXAPI(this, ProjectConfig.APP_ID);
api.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
@Override
public void onReq(BaseReq req) {
Log.i("回调:BaseReq", "进来了" + req.toString());
}
@Override
public void onResp(BaseResp resp) {
Log.i("回调:BaseResp", "进来了" + resp.toString());
switch (resp.errCode) {
case 0:
//成功
break;
case -1:
//错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
break;
case -2:
//用户取消
break;
}
}
}
注意事项:
导入微信回调的类所在包名必须是wxapi,切必须要是在根目录,否则接收不到回调
AndroidManifest里注册回调:
<activity
android:name=".widget.wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"/>
拉起支付:
IWXAPI iwxapi = WXAPIFactory.createWXAPI(this, ProjectConfig.APP_ID);
PayReq request = new PayReq();
//Appid必须要传
request.appId = ProjectConfig.APP_ID;
//固定值,必须要传
request.packageValue = "Sign=WXPay";
//后台返回的时间戳,必须要传
request.timeStamp = "1572451901";
//后台返回的,必须要传
request.prepayId = "wx30161240133038c16ae089b71619872000";
//后台返回的,必须要传
request.partnerId = "1560827871";
//后台返回的,必须要传
request.nonceStr="6gAJjJ0xCcZlvGWw";
//后台返回的,必须要传
request.sign = "5E26280CEFA1F72087A0DE32F0A95563";
//拉起支付
iwxapi.sendReq(request);
注意事项:
微信开发签名一般是由配置人员来配置的,如果签名改变以后微信客户端会缓存之前的签名,所以更改签名后要清空微信的缓存和数据,新签名才能生效(不生效会拉不起支付,错误码返回-1)