首先微信授权登录和支付分为客户端(通过微信官方平台)集成和原生集成
原生集成:需要跟后台进行对接
客户端集成:是自己到微信官方平台去操作即可 跟咱们友盟分享登录一样
以下是授权登录和支付
1:导入依赖:
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
2:keystore文件放到app目录下
3:在app的build.gradle 中Android 代码块加入keystore文件配置
signingConfigs {
debug {//这个地方可以写成 release
//keystore的文件名字
storeFile file('movie.keystore')
keyAlias " 公司后台给的别名"
storePassword "123456"
keyPassword "123456"
}
}
4.微信的工具类:
public class WXUtils {
/**
* APP_ID 替换为你的应用从官方网站申请到的合法appID
*/
public static String APP_ID = "wx4c96b6b8da494224" +
"";
public static IWXAPI reg(Context context) {
if (context != null) {
//AppConst.WEIXIN.APP_ID是指你应用在微信开放平台上的AppID,记得替换。
IWXAPI wxapi = WXAPIFactory.createWXAPI(context, APP_ID, true);
//注册到微信
wxapi.registerApp(APP_ID);
return wxapi;
} else {
return null;
}
}
//判断是否安装过微信
public static boolean success(Context context) {
if (WXUtils.reg(context).isWXAppInstalled()) {
return true;
} else {
return false;
}
}
}
5:在项目包下新建文件夹名字必须是以下名字
wxapi下新建 WXEntryActivity 以下是代码:
public class WXPayEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
private IWXAPI iwxapi;
private static String APP_ID = "wx4c96b6b8da494224";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// // 隐藏状态栏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//接收到分享以及登录的intent传递handleIntent方法,处理结果
iwxapi = WXAPIFactory.createWXAPI(this, APP_ID, false);
iwxapi.handleIntent(getIntent(), this);
}
@Override
public void onReq(BaseReq baseReq) {
}
@Override
public void onResp(BaseResp baseResp) {
if (baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
switch (baseResp.errCode) {
case BaseResp.ErrCode.ERR_OK:
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(WXPayEntryActivity.this, "成功", Toast.LENGTH_SHORT).show();
Log.e("dj", "支付成功");
WXPayEntryActivity.this.finish();
}
});
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
Toast.makeText(WXPayEntryActivity.this, "取消支付", Toast.LENGTH_SHORT).show();
Log.e("dj", "用户取消支付");
WXPayEntryActivity.this.finish();
break;
default:
break;
}
}
}
}
支付成功的回调:
PayReq req = new PayReq();
req.appId = bean.getAppId();
req.nonceStr = bean.getNonceStr();
req.partnerId = bean.getPartnerId();
req.prepayId = bean.getPrepayId();
req.sign = bean.getSign();
req.timeStamp = bean.getTimeStamp();
req.packageValue = bean.getPackageValue();
//去调微信
WXUtils.reg(this).sendReq(req);
支付注意页面逻辑
这里面一定要分析公司给的接口文档 跟后台协商好
1:首先要去下订单去获取订单账号
2:通过订单去支付
3:在支付成功的接口里面去回调微信
这个方法是MVP成功的回调
微信支付要注意的几个点:首先是WXUtils 和WXPayEntryActivity 的APP_ID 要搞对,包名要和对,清单文件的注册 ,android:exported="true"表示允许跳转到第三方,提高安全性。