前言:
先去微信开放平台注册账号,然后创建应用,签名工具下载(在页面最下面)
创建成功得到appid。
注意这里会需要一些信息,比如包名和apk签名,签名要写线上的,即release的签名,后面会继续讲。
1,添加依赖、权限
dependencies { compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+' } 或 dependencies { compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+' } (其中,前者包含统计功能) <uses-permission android:name="android.permission.INTERNET" /> <!-- for mta statistics, not necessary--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
权限基本上项目中都会用到,有就不用加了。
2,注册到微信
private IWXAPI api; private void regToWx() { api = WXAPIFactory.createWXAPI(mContext, GlobalConstant.APP_ID, true); api.registerApp(GlobalConstant.APP_ID); }
GlobalConstant.APP_ID 就是创建应用拿到的appid。
在合适的地方(比如onCreate中)调用regToWx()方法即可。
3,调起微信支付
private void doWXPay(OrderWX.DataBean data) { PayReq request = new PayReq(); request.appId = data.appid;//应用ID request.partnerId = data.partnerid;//商户号 request.prepayId = data.prepayid;//预支付交易会话ID request.packageValue = data.packageX;//扩展字段 暂填写固定值Sign=WXPay request.nonceStr = data.noncestr;//随机字符串 request.timeStamp = data.timestamp;//时间戳 request.sign = data.sign;//签名 api.sendReq(request); }
4,处理回调
在项目包名下新建wxapi包,然后新建WXPayEntryActivity类
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_wx_pay_entry); IWXAPI api = WXAPIFactory.createWXAPI(this, GlobalConstant.APP_ID, false); api.handleIntent(getIntent(), this); } @Override public void onReq(BaseReq baseReq) { LogUtil.i("onReq" + baseReq.getType()); } @Override public void onResp(BaseResp baseResp) { switch (baseResp.getType()) { case ConstantsAPI.COMMAND_PAY_BY_WX: LogUtil.i("baseResp.errCode====" + baseResp.errCode); switch (baseResp.errCode) { case 0://展示成功页面 ToastUtil.showCenterToast("支付成功"); break; case -1://签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。 ToastUtil.showCenterToast("支付异常"); break; case -2://无需处理。发生场景:用户不支付了,点击取消,返回APP。 ToastUtil.showCenterToast("支付取消"); break; } finish(); break; } } }
以上即核心代码,在onResp中处理回调逻辑即可。
别忘了在manifest中注册
<activity android:name=".wxapi.WXPayEntryActivity" android:exported="true" android:launchMode="singleTop"/>
闪屏要处理的话可以加上透明主题:
android:theme="@android:style/Theme.Translucent.NoTitleBar"
WXEntryActivity 同理
最后,关于测试,因为前面是线上的,所以本地测试是非常不方便的,这里有个小技巧,我们只要本地环境使用线上签名就行了。
在app目录下的build.gradle文件中配置签名信息:
//配置keystore签名 signingConfigs { release { storeFile file("路径") storePassword "密码" keyAlias "别名" keyPassword "密码" } } buildTypes { debug { signingConfig signingConfigs.release } release { signingConfig signingConfigs.release ..... } }