在android中支付是特别常见的.
那么首先是导入微信官方给你提供的依赖或是sdk(jar包)
api'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
这个依赖是特别牛逼的,它包含了一系列的微信所支持的东西例如微信支付,或是微信分享这也只是最基本的,他还可以查询很多东西,详细的我也就不说了想看的可以去查一查。
其次在微信的开发文档中你需要一个activity
这个activity是干什么呢?它的作用其实就是经过这个activity并通过这个activity联系到微信(这个activity必须创建在wxapi包下)
简单说他就是一个桥梁链接了应用和微信,那么这个activity代码如下
第一个是我从其他一个大佬哪里粘过来的第二个则是由其他人提供的一个
第一个WXEntryActivity
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import android.widget.Toast;
import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.wd.tech.App;
/**
* by:majunbao
*/
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private static final int RETURN_MSG_TYPE_LOGIN = 1;
private static final int RETURN_MSG_TYPE_SHARE = 2;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//如果没回调onResp,八成是这句没有写
App.mWxApi.handleIntent(getIntent(), this);
}
// 微信发送请求到第三方应用时,会回调到该方法
@Override
public void onReq(BaseReq req) {
}
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
//app发送消息给微信,处理返回消息的回调
@Override
public void onResp(BaseResp resp) {
Log.d("WXEntryActivity", "错误码 : " + resp.errCode + "");
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_AUTH_DENIED:
case BaseResp.ErrCode.ERR_USER_CANCEL:
if (RETURN_MSG_TYPE_SHARE == resp.getType()) {
Toast.makeText(this, "分享失败", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(this, "登录失败", Toast.LENGTH_SHORT).show();
}
break;
case BaseResp.ErrCode.ERR_OK:
switch (resp.getType()) {
case RETURN_MSG_TYPE_LOGIN:
//拿到了微信返回的code,立马再去请求access_token
String code = ((SendAuth.Resp) resp).code;
//就在这个地方,用网络库什么的或者自己封的网络api,发请求去咯,注意是get请求
break;
case RETURN_MSG_TYPE_SHARE:
Toast.makeText(this, "微信分享成功", Toast.LENGTH_SHORT).show();
finish();
break;
}
break;
}
//支付成功
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("支付结果");
builder.setMessage(resp.errCode + "");
builder.show();
}
}
}
第二个WXEntryActivity
/**
* author:AbnerMing
* date:2019/1/11
*/
public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
private IWXAPI wxAPI;
private static final String APP_ID = "wx4c96b6b8da494224";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
wxAPI = WXAPIFactory.createWXAPI(this,APP_ID,true);
wxAPI.registerApp(APP_ID);
wxAPI.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent){
super.onNewIntent(intent);
wxAPI.handleIntent(getIntent(),this);
Log.i("ansen","WXEntryActivity onNewIntent");
}
@Override
public void onReq(BaseReq arg0) {
Log.i("ansen","WXEntryActivity onReq:"+arg0);
}
@Override
public void onResp(BaseResp resp){
if(resp.getType()== ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX){//分享
Log.i("ansen","微信分享操作.....");
// WeiXin weiXin=new WeiXin(2,resp.errCode,"");
// EventBus.getDefault().post(weiXin);
}else if(resp.getType()==ConstantsAPI.COMMAND_SENDAUTH){//登陆
Log.i("ansen", "微信登录操作.....");
SendAuth.Resp authResp = (SendAuth.Resp) resp;
// WeiXin weiXin=new WeiXin(1,resp.errCode,authResp.code);
// EventBus.getDefault().post(weiXin);
}
finish();
}
}
当然你需要在AndroidManifast.xml中进行一个activity的注册
<activity android:name=".wxapi.WXEntryActivity"
android:exported="true"
android:launchMode="singleTop"/>
添加权限,有则不用重复添加:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
其实这个activity无论是微信支付还是微信分享都可以用到
之后就可以去调用方法了但是你首先要初始化
private void regToWx() {
// 通过WXAPIFactory工厂,获取IWXAPI的实例 APP_ID为微信的AppID
api = WXAPIFactory.createWXAPI(this, APP_ID, true);
// 将应用的appId注册到微信
api.registerApp(APP_ID);
}
那么接下来你就需要调用微信支付的代码了
在这个项目中,你需要先去调用下单接口
在你调用下单接口中会有一个sign: 规则:这个规则你可以在项目的开发文档中找到,然后在进行支付
在支付接口中会返回给你微信支付所需要的数据,
其中payBean是什么呢,其实就是接口中给你返回的对象
appId其实就是你在注册时微信给你的appid
partnerId则是商户号,微信支付商户号
prepayId是支付凭证
packageValue扩展字段
nonceStr随机字符串
timeStamp时间戳
sign签名
这是就是接口返回的一些数据
而api.sendReq(request)就是向你添加的那个activity传递数据,再有那个activity传递到微信
PayReqrequest=newPayReq();
request.appId=payBean.getAppId();
request.partnerId=payBean.getPartnerId();
request.prepayId=payBean.getPrepayId();
request.packageValue=payBean.getPackageValue();
request.nonceStr=payBean.getNonceStr();
request.timeStamp=payBean.getTimeStamp();
request.sign=payBean.getSign();
api.sendReq(request);
这就是完成了当然这只是微信支付